Android アプリに Firebase 通知を実装しようとしています。
アプリに Dynamic Links も実装しました。
しかし、動的リンクを使用して通知を送信する方法がわかりません (通知をクリックすると、特定の動的リンクが開かれます)。テキスト通知を送信するオプションしか表示されません。
回避策はありますか、それとも FCM の制限ですか?
Android アプリに Firebase 通知を実装しようとしています。
アプリに Dynamic Links も実装しました。
しかし、動的リンクを使用して通知を送信する方法がわかりません (通知をクリックすると、特定の動的リンクが開かれます)。テキスト通知を送信するオプションしか表示されません。
回避策はありますか、それとも FCM の制限ですか?
現在、コンソールではサポートされていないため、カスタム データを使用してサーバー側で通知を送信するように実装する必要があります。(カスタムのキーと値のペアを使用しても機能しません。アプリがバックグラウンド モードの場合、通知はディープ リンクされません)。詳細はこちら: https://firebase.google.com/docs/cloud-messaging/server
独自のアプリケーション サーバーを用意したら、ディープ リンク URL を通知のカスタム データ セクションに含めることができます。
実装では、ペイロードを確認FirebaseMessagingService
してそこから URL を取得し、そのディープ リンク URL を使用するカスタム インテントを作成する必要があります。
私は現在、AirBnb のディープリンク ディスパッチャー ライブラリ ( https://github.com/airbnb/DeepLinkDispatch ) を使用しています。これは、データと DeepLinkActivity へのリンクを設定でき、リンク処理を行うため、この状況で非常にうまく機能します。 . 以下の例では、サーバーからのペイロードを DeepLinkNotification というオブジェクトに変換します。これには URL フィールドが含まれています。
private void sendDeepLinkNotification(final DeepLinkNotification notification) {
...
Intent mainIntent = new Intent(this, DeepLinkActivity.class);
mainIntent.setAction(Intent.ACTION_VIEW);
mainIntent.setData(Uri.parse(notification.getUrl()));
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntent(mainIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(notificationId, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = buildBasicNotification(notification);
builder.setContentIntent(pendingIntent);
notificationManager.notify(notificationId, builder.build());
}
ディープリンク アクティビティ:
@DeepLinkHandler
public class DeepLinkActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dispatch();
}
private void dispatch() {
DeepLinkResult deepLinkResult = DeepLinkDelegate.dispatchFrom(this);
if (!deepLinkResult.isSuccessful()) {
Timber.i("Deep link unsuccessful: %s", deepLinkResult.error());
//do something here to handle links you don't know what to do with
}
finish();
}
}
Intent.ACTION_VIEW
この実装を行うと、任意の URL でインテントを設定した場合と比較して、処理できないリンクを開くこともありません。