Страницы

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

воскресенье, 8 марта 2020 г.

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

#java #android #firebase


Делаю пуш рассылку на приложение через 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. вот так отправляю сообщение

    


Ответы

Ответ 1



Есть 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 с данными, в виде, описанном выше.

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

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