URI перенаправления не открывает приложение Android непосредственно в OAuth2 - глубокая ссылка уже настроена - PullRequest
1 голос
/ 04 февраля 2020

Требование: чтобы открыть URL-адрес и получить ответ обратно в приложение, и перенаправить пользователя обратно в мое приложение, поскольку следуют другие вызовы API.

<intent-filter
            android:autoVerify="true"
            android:order="1">
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="ab.bc.cd"
               android:port="11001"/>
               <data android:scheme="https" />
                <data android:scheme="http" />
               <data android:pathPrefix="/abc.html" />
        </intent-filter>
    </activity>

Код для открытия первый вызов API в браузере:

if (!TextUtils.isEmpty(url)) {
        final CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
        CustomTabActivityHelper.openCustomTab(MainActivity.this, customTabsIntent, Uri.parse(url), new WebviewFallback() {
            @Override
            public void openUri(Activity activity, Uri uri) {
                    setupCustomTabs(uri);
            }
        });

Обработка части намерения здесь

  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    final String schemeName = intent.getScheme();
    final Uri data = intent.getData();
    if (data != null && data.getHost() != null && data.getHost().equalsIgnoreCase("")) {
        return;
    }
    if (!TextUtils.isEmpty(schemeName) && schemeName.equalsIgnoreCase(UAEPassConstant.SCHEME)) {
        final Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if (fragment != null && !(fragment instanceof DisplayFragment)) {
            setFragment(new DisplayFragment(), null, false);
        }
        final String encodedQuery = intent.getData().getEncodedQuery();
        if (!TextUtils.isEmpty(encodedQuery) && !encodedQuery.contains(UAEPassConstant.ERROR_DESCRIPTION)) {
            final String[] queryDataArray = encodedQuery.split("=|&"); // this is to fetch a code value which comes as a result of the first api call
            final LoginApiCall uaePassCall = new LoginApiCall(MainActivity.this, queryDataArray[1], new IUAEPassCallBack() {
                @Override
                public void onSuccessLogin(String userInfoJson, String tokenJson) {
                    Log.e("userInfo", userInfoJson);
                    Log.e("tokenJson", tokenJson);
                    final Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
                    if (fragment instanceof DisplayFragment) {
                        ((DisplayFragment) fragment).LoggingData(userInfoJson);

                    }
                }

Что происходит : Когда я запустить этот код, все работает, но когда в браузере открывается первая ссылка на вызов API, и когда я утверждаю запрос на вход в систему, он показывает URI перенаправления в самом браузере, и элемент управления не возвращается непосредственно в мое приложение. Вместо этого он зависает, а затем мне нужно нажать «Открыть в chrome» (прилагается), а затем он дает мне подсказку, хочу ли я открыть приложение и при выборе, что элемент управления возвращается в мое приложение. Любые указатели будут оценены. Заранее спасибо! Изменить: код работает правильно во время первого выполнения, но во второй раз я получаю эту проблему.

1 Ответ

0 голосов
/ 05 февраля 2020

Я сделал много вещей, но в конце концов, когда я изменил код для открытия пользовательских вкладок на:

    CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();

            CustomTabsIntent customTabsIntent = builder.build();
            customTabsIntent.launchUrl(this, Uri.parse(url));

Теперь, он работает нормально.

ПРИМЕЧАНИЕ. Работа. Я проверил почти все возможные ссылки, связанные с этой проблемой, но оказалось, что глубокая ссылка, которую я использовал, была неправильной. Пожалуйста, убедитесь, что вы устанавливаете схему и хост правильно. Я потратил 4 дня, чтобы понять это.

...