6

Android アプリに Firebase 通知を実装しようとしています。

アプリに Dynamic Links も実装しました。

しかし、動的リンクを使用して通知を送信する方法がわかりません (通知をクリックすると、特定の動的リンクが開かれます)。テキスト通知を送信するオプションしか表示されません。

回避策はありますか、それとも FCM の制限ですか?

4

1 に答える 1

15

現在、コンソールではサポートされていないため、カスタム データを使用してサーバー側で通知を送信するように実装する必要があります。(カスタムのキーと値のペアを使用しても機能しません。アプリがバックグラウンド モードの場合、通知はディープ リンクされません)。詳細はこちら: 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 でインテントを設定した場合と比較して、処理できないリンクを開くこともありません。

于 2017-01-03T10:41:13.507 に答える