web-dev-qa-db-ja.com

Firebaseダイナミックリンクがアプリを開かない

私はAndroidアプリをデバイス上でローカルに開発しました(アプリはまだAndroid Play Storeではありません)。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>
13
user3559471

または、「通常の」ディープリンクのドキュメントに記載されているように、インテントフィルターでデータを提供することもできます( 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>

そのリンクはあなたのコンソール、ここで入手できます: enter image description here

編集:このリンクの場所を示す画像を追加しました

6
NSimon

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>
3

ディープリンクが機能しないという同じ問題があり、以前の回答は役に立ちませんでした。トリックは次のように「データ」タグを分割することでした:

の代わりに:

<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"/>

それが他の人を助けることを願っています:)

2
Shirane85

2019年1月の更新

Firebaseコンソールで、アプリのSHA256証明書フィンガープリントをプロジェクトに追加したことを確認します。

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>
  • 削除Android:autoVerify = "true" Android 6.0(APIレベル23)以下を使用している場合、アプリがクラッシュします。
1
Leo S

別の回答で説明されているように、インテントフィルターにはいくつかの問題があるようです。また、URLに問題がある可能性があります。私がそれらをいじっていたとき、気付かずにFireBase Webサイトへの不完全なURLを作成していました。アプリでURL全体を開いて、コードをテストすることができます。テストするすべてのURLをメールに書き込んで自分に送信し、デバイスで開いてクリックし始めました。その後、FireBaseで必要なURLを作成できます。以下にいくつかの例を示します(タイプミスやその他のエラーの可能性があります)。

デバイスでこの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>

アプリ(com.mydomain.myapp)で https://mysite.fi/112972 が開き、PCでリンクを開いた場合は 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>

アプリ(com.mydomain.myapp)でmyscheme:// mydeeplink/112972を開きます。それを処理するためのコードが必要になります。アプリがインストールされていない場合、ブラウザで http://fallback.fi が開きます。 PCでは、それは開きます https://mysite.fi/112972

(編集19.3.2018)Firebaseが「al =」を完全にサポートしていないようです。コードは機能しますが、ドキュメントとFirebaseコンソールで生成されたURLにはありません。

1
diidu