私は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>
または、「通常の」ディープリンクのドキュメントに記載されているように、インテントフィルターでデータを提供することもできます( 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>
編集:このリンクの場所を示す画像を追加しました
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>
ディープリンクが機能しないという同じ問題があり、以前の回答は役に立ちませんでした。トリックは次のように「データ」タグを分割することでした:
の代わりに:
<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"/>
それが他の人を助けることを願っています:)
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>
別の回答で説明されているように、インテントフィルターにはいくつかの問題があるようです。また、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にはありません。