Вам необходимо будет выполнить отправку уведомления на стороне сервера с помощью настраиваемых данных, поскольку в настоящий момент консоль не поддерживает его. (Использование настраиваемых пар ключ-значение не будет работать так же, как если ваше приложение находится в фоновом режиме, уведомление не будет иметь глубокую ссылку). Подробнее читайте здесь: 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.
спасибо, что используем именно так в нашей компании – PedroAGSantos