Как открыть динамические ссылки с помощью уведомлений Firebase?

1

Я пытаюсь реализовать уведомления Firebase для нашего приложения для Android.

Я также использовал Dynamic Links в приложении.

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

Есть ли какое-либо обходное решение или это ограничение FCM?

Теги:
firebase
firebase-cloud-messaging
firebase-dynamic-links
deep-linking

1 ответ

9

Вам нужно будет выполнить отправку уведомления на стороне сервера с помощью настраиваемых данных, поскольку в настоящее время консоль не поддерживает его. (Использование настраиваемых пар ключ-значение не будет работать так же, как если ваше приложение находится в фоновом режиме, уведомление не будет иметь глубокую ссылку). Подробнее здесь: https://firebase.google.com/docs/cloud-messaging/server

После того, как у вас есть собственный сервер приложений, вы можете добавить URL-адрес Deep Link в раздел пользовательских данных уведомления.

В вашей реализации FirebaseMessagingService вам нужно будет посмотреть полезную нагрузку и получить URL-адрес оттуда, создать собственное намерение, использующее этот URL-адрес Deep Link.

В настоящее время я использую библиотеку диспетчера глубоких ссылок 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());
}

DeepLinkActivity:

@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-адресом.

  • 0
    спасибо мы используем именно так в нашей компании

Ещё вопросы

Сообщество Overcoder
Наверх
Меню