Deep Link - Https неожиданно перенаправляет на chrome - PullRequest
0 голосов
/ 02 апреля 2020

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

У меня все работает до этого момента, кроме перенаправления обратного вызова часть, и она работает на моем реальном устройстве, а не на эмуляторе.

Это код, который начинает поток OAuth.

val connection = object:CustomTabsServiceConnection() {
        override fun onCustomTabsServiceConnected(name: ComponentName, client: CustomTabsClient) {
            val builder = CustomTabsIntent.Builder()
            val customTabsIntent = builder.build()
            client.warmup(0)
            var authUrl = "$TOKEN_URL?key=$API_KEY&scope=read&callback_method=fragment&return_url=${AuthenticationManager.HTTPS_REDIRECT_URL}&expiration=never&name=$NAME&integration=${integration.id}"
            customTabsIntent.launchUrl(context, Uri.parse(authUrl))
        }
        override fun onServiceDisconnected(name: ComponentName?) {
        }
    }
    bindCustomTabsService(context, "com.android.chrome", connection);

Манифест

 <activity
            android:name="com.myapp.MainActivity"
            android:screenOrientation="sensor"
            android:windowSoftInputMode="adjustPan"
            android:launchMode="singleTop"
            android:configChanges="uiMode">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="pomodoro" android:host="oauth.myapp.com"/>
            <data android:scheme="https" android:host="myapp.com"/>
        </intent-filter>
    </activity>

На этом этапе он перенаправляется на мою веб-страницу, которую я подтвердил на моем реальном устройстве, перенаправляет на мое приложение (чтобы оно могло использовать намерение и получить необходимый токен). Мне интересно, если при выборе Всегда использовать для браузера chrome (при первом открытии веб-страницы в эмуляторе), это в основном отменяет мою глубокую ссылку? Это возможно? Также использование другой схемы невозможно, поскольку Trello принудительно использует https / http в качестве надежных URL-адресов перенаправления / обратного вызова?

1 Ответ

0 голосов
/ 02 апреля 2020

Это связано с моим неправильным пониманием глубоких ссылок против AppLinks. Я хочу относиться к этому больше как к AppLink, так и к диплинку, что означает, что проверка уже произошла, что этот URL принадлежит моему приложению (через файл в моем домене). Чтобы эта проверка произошла, мне нужен файл подтверждения по соответствующему URL-адресу, если его там нет - проверка не может произойти. Что происходит для каждого хоста / схемы и должно проверять все совпадения.

Решение было удалить схему / хост, не связанный с приложением / доменом, чтобы разрешить AutoVerify.

«Только если система найдет соответствующий файл ссылок на цифровые активы для всех хостов в манифесте, она затем установит sh ваше приложение в качестве обработчика по умолчанию для указанных шаблонов URL». https://developer.android.com/training/app-links/verify-site-associations

После обновления моего манифеста до приведенного ниже он работал, как и ожидалось, и перенаправлял поток OAuth, как и ожидалось.

        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="https" android:host="myapp.com"/>
        </intent-filter>
...