Делаю пуш рассылку на приложение через Firebace, мне необходимо чтобы когда пользователь нажимает на сообщение открывалась нужная мне активити (не главное активити).
Сейчас это реализовано так
<activity
android:name=".StereoIntroActivity"
android:label="">
<intent-filter>
<action android:name="OPEN_ACTIVITY_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service android:name=".firebace.MessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
В данном классе 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:APA91IFdt5CHCoNmombd5bqTh7WVSlAOyS-WraSrGv_IRZM"
}
Так отобразится уведомление, которое направит юзера в активити с intentFilter test, как это указано в поле click_action. Если не будет в манифесте активити с таким фильтром - запустится главная актвити.
<intent-filter>
<action android:name="test"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
Второй способ - отправлять информацию в поле data без поля notification - так точно будет вызван метод onReceive в котором вы можете уже отреагировать на пуш нужным образом, самостоятельно отобразив уведомление. В т.ч. составить PendingIntent для запуска нужной активити.
Через саму консоль FireBase отпрвлять пуши не очень, т.к. там мало что понятно и мало контроля. Лучше отправлять запрос через программу Postman - она есть в т.ч. в виде приложения для браузера Хром.
Authorization = key=%тут ключ который можно взять из консоли (Настройки-настройки проекта-CLOUD MESSAGING-ключ сервера)%
ContentType = application/json
body) запроса, в raw формате отправлять json с данными, в виде, описанном вышеПродвижение своими сайтами как стратегия роста и независимости