Делаю пуш рассылку на приложение через 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 с данными, в виде, описанном выше.
Комментариев нет:
Отправить комментарий