Динамическая ссылка Firebase не открывает приложение

Я разработал приложение для Android локально на своем устройстве (приложение еще не в магазине Android Play). У меня есть следующая логика, чтобы получить глубокую ссылку в MainActivity.

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, null)
            .addApi(AppInvite.API)
            .build();

    // Check if this app was launched from a deep link. Setting autoLaunchDeepLink to true
    // would automatically launch the deep link if one is found.
    boolean autoLaunchDeepLink = false;
    AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
            .setResultCallback(
                    new ResultCallback<AppInviteInvitationResult>() {
                        @Override
                        public void onResult(@NonNull AppInviteInvitationResult result) {
                            if (result.getStatus().isSuccess()) {
                                // Extract deep link from Intent
                                Intent intent = result.getInvitationIntent();
                                String deepLink = AppInviteReferral.getDeepLink(intent);

                                Toast.makeText(getApplicationContext(), deepLink, Toast.LENGTH_LONG).show();
                                // Handle the deep link. For example, open the linked
                                // content, or apply promotional credit to the user's
                                // account.

                                // ...
                            } else {
                                Log.d(TAG, "getInvitation: no deep link found.");
                            }
                        }
                    });

Я построил несколько динамических ссылок с помощью консоли Firebase и открыл в мобильном браузере. Но оно не открывает мое приложение и не достигает строки String deepLink = AppInviteReferral.getDeepLink (intent);

Вместо этого он открывает URL в самом мобильном браузере.

Как открыть приложение и обрабатывать глубокие ссылки в действии при использовании динамической ссылки Firebase ??

Редактировать:

У меня есть фильтр намерений в файле манифеста.

<activity android:name="MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:host="example.com" android:scheme="http"/>
            <data android:host="example.com" android:scheme="https"/>
        </intent-filter>
    </activity>
 user355947103 июн. 2016 г., 11:45
@NicolasSimon, да, у меня есть намеренный фильтр в манифесте. и правильно настроить консоль. Обновленная деталь под вопросом.
 NSimon03 июн. 2016 г., 11:42
Вы объявили фильтр намерений в манифесте? Кроме того, правильно ли вы настроили консоль с помощью отпечатка пальца SHA-1?

Ответы на вопрос(5)

Как объясняется в другом ответе, у вашего фильтра намерений есть некоторые проблемы. Также ваш URL может иметь некоторые проблемы. Когда я играл с ними, я создал неверный URL-адрес веб-сайта FireBase, не замечая этого. Можно проверить ваш код, открыв весь URL в вашем приложении. Я написал все URL-адреса для проверки на электронную почту и отправил сам себе, открыл на устройстве и начал щелкать. После этого вы можете создать нужный URL в FireBase. Ниже приведено несколько примеров (возможны опечатки и другие ошибки):

Если вы нажали этот URL на вашем устройстве:

https://<myapp>.app.goo.gl/?link=https://mysite.fi/112972&apn=com.mydomain.myapp

и это проявилось в тебе:

 <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="https"
            android:host="mysite.fi"
            android:pathPattern=".*" />
    </intent-filter>

Должно открытьсяhttps://mysite.fi/112972 в вашем приложении (com.mydomain.myapp), и если вы откроете ссылку на своем ПК, она откроетсяhttps://mysite.fi/112972 в браузере.

Если вы открыли этот URL в вашем устройстве:

https://<myapp>.app.goo.gl/?link=https://mysite.fi/112972&apn=com.mydomain.myapp&al=x-myscheme://mydeeplink/112972&afl=http://fallback.fi

и это проявилось в тебе:

 <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="myscheme"
            android:host="mydeeplink"
            android:pathPattern=".*" />
    </intent-filter>

Откроется myscheme: // mydeeplink / 112972 в вашем приложении (com.mydomain.myapp). Вам нужно иметь код для его обработки. Если приложение не установлено, оно откроетсяhttp://fallback.fi в вашем браузере. На ПК все равно откроетсяhttps://mysite.fi/112972.

(edit 19.3.2018) Кажется, что Firebase больше не полностью поддерживает 'al ='. Код работает, но он отсутствует в документации и сгенерированных URL-адресах консоли Firebase.

Action View и Action Main оба относятся к разным категориям Intent. Итак, вы должны поместить их в разные блоки, как это:

 <activity android:name=".DynamicLinkActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <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:host="example.com"
                android:scheme="http" />
            <data
                android:host="example.com"
                android:scheme="https" />
        </intent-filter>
    </activity>

В качестве альтернативы, вы можете также предоставить данные в вашем намерении-фильтре, как указано в «обычном» документе глубоких ссылок (https://developer.android.com/training/app-indexing/deep-linking.html)

Фильтр намерений будет выглядеть следующим образом:

        <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:host="https://XXYYZZ42.app.goo.gl/"  // <- Replace with your deep link from the console
                android:scheme="https"/>
        </intent-filter>

Эту ссылку можно получить в вашей консоли прямо здесь:

РЕДАКТИРОВАТЬ: Добавил картинку, чтобы показать, где найти эту ссылку

 user355947103 июн. 2016 г., 12:00
Я попробовал новую динамическую ссылку с действительным URL. Но этот URL открывается в самом мобильном браузере. Я хочу, чтобы этот URL-адрес в приложении после запуска приложения.
 user355947103 июн. 2016 г., 11:55
При создании динамической ссылки в консоли Firebase второе обязательное поле - Deep Link. Описание, которое они дали - Глубокая ссылка, которую откроет ваше приложение. Эта ссылка должна быть действительным URL-адресом и использовать схему HTTP или HTTPS. См. Параметр «ссылка» в документации. Но когда я создал динамическую ссылку, я сохранил какой-то случайный URL "abcd.com". Это может быть проблемой для не запуска приложения?
 NSimon03 июн. 2016 г., 12:00
Из моего (короткого) опыта работы с глубокими ссылками в firebase я не думаю, что URL-это проблема. Я добавил изображение, чтобы объяснить, где взять упомянутую ссылку, о которой я говорил (ту, которая помещается под данными в фильтре намерений). Ты пробовал с этим?
 user355947103 июн. 2016 г., 12:07
Да, я пытался с тем, что вы сказали, и с действительным URL. Это запуск URL в мобильном браузере. Тем не менее приложение не запускается.

Обновление января 2019

Убедитесь, что вы добавили отпечаток сертификата SHA256 для своего приложения в свой проект в консоли Firebase.

Добавьте приведенный ниже код в файл AndroidManifest.xml под действием, для которого вы хотите динамическую ссылку на обед:

    <intent-filter android:autoVerify="true">
       <action android:name="android.intent.action.VIEW"/>
       <category android:name="android.intent.category.DEFAULT"/>
       <category android:name="android.intent.category.BROWSABLE"/>
       <data android:host="mydomainname.page.link" android:scheme="http"/>
       <data android:host="mydomainname.page.link" android:scheme="https"/>
   </intent-filter>
Удалитьандроид: autoVerify = "истина" Если у вас есть Android 6.0 (уровень API 23) и ниже, или приложение упадет.
 Rahul Dange06 янв. 2019 г., 19:41
DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance (). CreateDynamicLink () .setLink (Uri.parse ("example.com/»)) .setDomainUriPrefix ("example.page.link») .setAndroidParameters (новый DynamicLink.AndroidParameters.Builder (). build ()) .buildDynamicLink (); Можете ли вы сказать мне, что добавить в .setLink () и .setDomainUriPrefix () для приложения на базе Firebase для Android
 Leo S09 янв. 2019 г., 22:30
setLink (Uri.parse (»example.com/») "примером" может быть любое имя, даже если у вас нет реального сайта. setDomainUriPrefix (»example.page.link») вам нужно получить "пример" из вашей динамической ссылки вашего проекта firebase.

У меня была та же проблема с неработающими глубокими ссылками, и предыдущие ответы не помогали. Что сделал трюк, разделив тег "data" следующим образом:

Вместо:

<data android:host="example.com" android:scheme="http"/>
<data android:host="example.com" android:scheme="https"/>

Сделай это:

<data android:host="example.com"/>
<data android:scheme="http"/>
<data android:scheme="https"/>

Надеюсь, что это поможет кому-то еще :)

 N.Droid01 мая 2018 г., 10:06
очень полезно, спасибо.

Ваш ответ на вопрос