Ну, есть некоторые проблемы с кодом 1. в вашем php-скрипте вы не указываете "body"
, но вы все еще вызываете String body = remoteMessage.getNotification().getBody();
, это одно исключение нулевого указателя.
2.Этот ключ click_actionбудет работать только тогда, когда приложение находится на переднем плане, для всех остальных случаев, когда приложение находится в фоновом режиме и закрыто, оно не работает.
3. Вам нужно установить флаги, чтобы начать новое действие, поэтому intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
, так что если ожидающее намерение увольняет вас, в результате чего вы получили npe по причине номер 2, теперь вы можете обойти это, отправив сообщения с данными вместо firebase sdk, обрабатывающего ваши уведомления, и тогда это будут коридоры NONNULL
хорошо, у firebase есть два типа сообщений
- Push-сообщения, которые обрабатываются с помощью firebase SDK, и это сообщения, в которых вы задаете заголовок, текст и другие факторы, кроме вас.не может отправлять пользовательские данные
Массажи данных должны быть парами ключ-значение.
в качестве примера вы хотите отправить сомДанные с вашим уведомлением о том, что клиентское приложение будет обрабатывать, например, вы отправляете некоторые новости о спортивном матче, чтобы вы могли создать узел в формате JSON, говоря
data: {
coolNews: "Some Cool News1",
coolNews2: "Some really cool news2"
}
, а затем вы можете позвонить remoteMessage.getData().get("coolNews");
однако будьте осторожны, потому что если вы отправите следующий JSON
Notification:{
to: //UserToken ,
title: "Some Title",
body: "Some body",
data: {
coolNews: "Some Cool News1",
coolNews2: "Some really cool news2"
}}
Полезная нагрузка данных будет управляться только после того, как клиент откроет уведомление, однако, если вы отправите целое json-уведомление как полезную нагрузку данныхи вы обрабатываете все на стороне клиента, все это будет получено одновременно.как следующее:
Notification:{
to: //UserToken
data: {
title: "Some Title",
body: "Some body",
coolNews: "Some Cool News1",
coolNews2: "Some really cool news2"
}}
и затем в вашем FirebaseMessageId
вы можете позвонить remotemessage.getData().get("title");
для названия и то же самое для всех остальных, таких как body
и coolNews
..
Теперь для BroadCast recevier
вы можете отправлять трансляции через firebasemessagingId
следующим образом:
Intent intent = new Intent(this, NotificationBR.class);
Bundle bundle = new Bundle();
bundle.putDouble("key1",remoteMessage.getData().get("title"));
bundle.putDouble("key2",remoteMessage.getData().get("coolNews1"));
......
intent.putExtras(bundle);
sendBroadcast(intent);
и инициировать broadcast class
и
DONT FORGET TO ADD TO YOUR MANIFEST!
как-то так ...
public class NotificationBR extends BroadCastReciever {
@Override
public void onReceive(Context ctx, Intent intent){
if(intent.getExtras() != null){
String key1 = intent.getStringExtra("key1");
......
}
//Then you can use intent to send it to whichever activity you want
Intent sendToActivity = new Intent(ctx, Activity.class);
sendToActivity.putExtras(someBundle) //Containing your strings you want to pass to activity, you can also use sendToActivity.putStringExtra("Some values")
startActivity(sendToActivity);
и все.
извините за опечатки ..