1

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

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

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

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

ответ

7

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

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

В вашей реализации 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()); 
} 

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

спасибо, что используем именно так в нашей компании – PedroAGSantos

 Смежные вопросы

  • Нет связанных вопросов^_^