Почему моя активность не запускается по URL? - PullRequest
5 голосов
/ 04 марта 2011

Я понимаю, что есть несколько похожих вопросов, но ни один из принятых ответов не работает для меня.В рамках процесса oauth я хочу, чтобы браузер перенаправил мою активность.Как я видел везде, я настроил фильтр намерений, который предположительно делает это:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.codesta.test"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".BrowsableActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/> 
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="http" android:host="oauth.android.mydomain.com" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Однако, когда я открываю браузер и ввожу http://oauth.android.mydomain.com, я получаю "веб-страницу неДоступно "ошибка страницы.Я также попытался определить свою собственную схему (которую я прочитал, как правило, не рекомендуется), но она тоже не сработала.

Я нацеливаюсь на уровень API 7 и проверил код на эмулируемых устройствах, работающих под управлением 2.1 и 2.2.безуспешно.Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

2 голосов
/ 03 апреля 2011

Я столкнулся с той же проблемой - насколько я могу высчитать, несколько сайтов OAuth используюттег для окончательного перенаправления, которое вы пытаетесь перехватить.

Перенаправления, использующие тег META, не перехватываются фильтром Intent, поэтому ваш код никогда не выполняется.Странно, если пользователь нажимает на ту же ссылку или перенаправляет ее с помощью заголовка Location:, он срабатывает.Уже есть открытый тикет об ошибке Android 2.2.1, но я потерял ссылку на него.

Обычный обходной путь - создать реальную страницу по URL-адресу обратного вызова и перенаправить ее оттуда.используя заголовок Location: куда-то еще, что вы МОЖЕТЕ захватить.

РЕДАКТИРОВАТЬ: С тех пор я пытался сделать это с заголовком Location:другая схема (x-oauth: //) осуждается, но работает.

0 голосов
/ 07 марта 2011

Фильтр намерений работал нормально для схем http и https, пока я использовал реальный домен.Однако всплывающее окно с вопросом, хотят ли они использовать браузер вместо приложения, было неприемлемым.Я попытался использовать свою собственную схему, но это не сработало (понятия не имею, почему).

Для целей моего приложения было достаточно создать действие с WebView вместо использования полнофункционального браузера, и япереопределил mustOverrideUrlLoading WebViewClient, перехватывает запросы для моего URI и отправляет их непосредственно в мою деятельность.Это решение на самом деле работает лучше, чем то, что я пытался сделать раньше, потому что пользователь не получает подсказку, и мне не нужно определять глобальную схему.

0 голосов
/ 11 марта 2011

Бен ...

Проверьте с изменением схемы на https вместо http.

0 голосов
/ 04 марта 2011

Я не уверен, я могу проверить позже, но я думаю, что когда вы вводите его в браузер, вы говорите браузеру, чтобы открыть его.

Что может потребоваться, чтобы фактически нажать нассылка, которая загружает эту схему: // комбинация хоста, а не только введите ее в «строку URL».

Редактировать: Извините, я сделал быстрый тест, но это не так.Тем не менее, проблема может заключаться в том, что браузер пытается разрешить хост до того, как он действительно доберется до целевой части, и предлагает вам открыть его вместе с приложением.Работает ли это с реальным URL (если предположить, что я был прав, предполагая, что это не реальный разрешающий URL?)

...