Страницы

Поиск по вопросам

воскресенье, 26 мая 2019 г.

Android, Firebase сервис push уведомлений

Делаю пуш рассылку на приложение через Firebace, мне необходимо чтобы когда пользователь нажимает на сообщение открывалась нужная мне активити (не главное активити).
Сейчас это реализовано так

В данном классе MessagingService реализован сервис, который должен получение слушать сообщения. Вот его код
public class MessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) {
sendNotification(remoteMessage.getNotification().getBody());
} private void sendNotification(String messageBody) { Intent intent = new Intent(this, StereoIntroActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent (but not the Intent itself) stackBuilder.addParentStack(StereoActivity.class); // Adds the Intent that starts the Activity to the top of the stack stackBuilder.addNextIntent(intent); PendingIntent contentIntent = stackBuilder .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher)) .setContentTitle("asasasasas!!!!") //this.getString(R.string.app_name) .setContentText(messageBody) .setAutoCancel(true) .setSound(defaultSoundUri);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
} }
Мне нужно чтобы открывалось StereoIntroActivity, но почему-то открывается главное активити, мне вообще кажется что этот сервис просто не работает. Подскажите, пожалуйста, в чём у меня проблема. Заранее большое спасибо!
update. вот так отправляю сообщение


Ответ

Есть 2 разных способа отправить сообщение с помощью FireBase. Первый способ - отправить информацию в теле пуша в поле notification - так инфа будет обработана FireBase-ом мочла, без вызова метода onReceive. JSON должен выглядеть так:
{ "notification": { "title": "news", "text": "newsTExt", "click_action": "test" }, "data": { "keyname": "any value" }, "to" : "dAQilNw:APA91IFd666h7WVSlAOyS-WraSrGv_IRZM" }
Так отобразится уведомление, которое направит юзера в активити с intentFilter test, как это указано в поле click_action. Если не будет в манифесте активити с таким фильтром - запустится главная актвити.


Второй способ - отправлять информацию в поле data без поля notification - так точно будет вызван метод onReceive в котором вы можете уже отреагировать на пуш нужным образом, самостоятельно отобразив уведомление. В т.ч. составить PendingIntent для запуска нужной активити.

Через саму консоль FireBase отпрвлять пуши не очень, т.к. там мало что понятно и мало контроля. Лучше отправлять запрос через программу Postman - она есть в т.ч. в виде приложения для браузера Хром.
Для этого надо через Postman отправить POST запрос на адрес https://fcm.googleapis.com/fcm/send При этом надо задать заголовки

Authorization = key=%тут ключ который можно взять из консоли (Настройки-настройки проекта-CLOUD MESSAGING-ключ сервера)% ContentType = application/json
Далее в теле (body) запроса, в raw формате отправлять json с данными, в виде, описанном выше.

Комментариев нет:

Отправить комментарий