当应用程序关闭时,Firebase推送通知不会在Android上触发onMessageReceive
当我没有将JSON请求中的通知对象发送到Firebase API时,onMessageReceive会正常触发,我的通知会按预期工作,但是,当我使用JSON中作为参数发送的通知或android对象时,当应用程序处于后台时,不会触发onMessageReceive 我一直在试着调试这个,但我想不出来 我的服务器中有一个简单的类,它使用Firebase API发送推送通知 在我发送给服务器的参数中,我发送了以下属性当应用程序关闭时,Firebase推送通知不会在Android上触发onMessageReceive,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,当我没有将JSON请求中的通知对象发送到Firebase API时,onMessageReceive会正常触发,我的通知会按预期工作,但是,当我使用JSON中作为参数发送的通知或android对象时,当应用程序处于后台时,不会触发onMessageReceive 我一直在试着调试这个,但我想不出来 我的服务器中有一个简单的类,它使用Firebase API发送推送通知 在我发送给服务器的参数中,我发送了以下属性 "apns": { "title": title.nil? ? "Testi
"apns": {
"title": title.nil? ? "Testing notification" : title,
"body": body.nil? ? "This is a test push notification, liking it?" : body,
"mutable_content": true,
"sound": sound.nil? ? "enabled" : sound
},
"android": {
"title": title.nil? ? "Testing notification" : title,
"body": body.nil? ? "This is a test push notification, liking it?" : body,
"sound": sound.nil? ? "enabled" : sound
},
对于跨平台形状,请参见以下内容
"notification": {
"title": title.nil? ? "Testing notification" : title,
"body": body.nil? ? "This is a test push notification, liking it?" : body,
"mutable_content": true,
"sound": sound.nil? ? "enabled" : sound
},
谷歌在以下官方文档中建议了这种配置
它实际工作的唯一方式是,我不发送通知或android对象,并使用发送到Firebase API的JSON对象的数据属性中发送的数据生成通知
params = {
"#{key}": to,
# "apns": {
# "title": title.nil? ? "Testing notification" : title,
# "body": body.nil? ? "This is a test push notification, liking it?" : body,
# "mutable_content": true,
# "sound": sound.nil? ? "enabled" : sound
# },
# "android": {
# "title": title.nil? ? "Testing notification" : title,
# "body": body.nil? ? "This is a test push notification, liking it?" : body,
# "sound": sound.nil? ? "enabled" : sound
# },
"data": {
"title": title,
"body": body
}
}.to_json
通过Firebase控制台发送的通知也不起作用
?有什么想法吗?您应该发送格式数据,相同:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
在ANDROID清单中使用以下Xml代码
<service
android:name=".services.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
创建MyFirebaseMessaginService类,以便在应用程序关闭时接收Firebase通知。
public class MyFirebaseMessagingService extends FirebaseMessagingService {
LocalBroadcastManager broadcaster;
@Override
public void onCreate() {
broadcaster = LocalBroadcastManager.getInstance(this);
}
@Override
public void onNewToken(@NonNull String token) {
Log.d(TAG, "Refreshed token: " + token);
Const.FireBaseTokenID=token;
Log.e(TAG, "onComplete:Service "+Const.FireBaseTokenID );
}
public MyFirebaseMessagingService() {
getFireBaseID();
}
public static void getFireBaseID() {
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if(!task.isSuccessful()){
Log.w(TAG, "getInstance ID Failed "+task.getException() );
return;
}
String token = task.getResult().getToken();
Log.e(TAG, "onComplete:Service Method "+token );
}
});
}
@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String call_api=remoteMessage.getData().get("callapi");
String play_id=remoteMessage.getData().get("play_id");
String clue_number=remoteMessage.getData().get("clue_number");
String title=remoteMessage.getData().toString();
Log.e(TAG, "onMessageReceived: callapi "+call_api );
Log.e(TAG, "onMessageReceived: play_id "+play_id );
Log.e(TAG, "onMessageReceived: clue number "+clue_number );
Log.e(TAG, "onMessageReceived: title "+title );
Intent intent= new Intent("remoteMessage");
intent.putExtra("call_api", call_api);
intent.putExtra("play_id", play_id);
intent.putExtra("clue_number", clue_number);
intent.putExtra("title", title);
broadcaster.sendBroadcast(intent);
}
公共类MyFirebaseMessagingService扩展了FirebaseMessagingService{
本地广播经理;
@凌驾
public void onCreate(){
broadcaster=LocalBroadcastManager.getInstance(this);
}
@凌驾
public void onNewToken(@NonNull字符串标记){
Log.d(标记,“刷新令牌:”+令牌);
常量firebaseTokeId=令牌;
Log.e(标记“onComplete:Service”+Const.FireBaseTokenID);
}
公共MyFirebaseMessagingService(){
getFireBaseID();
}
公共静态void getFireBaseID(){
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
如果(!task.issusccessful()){
w(标记“getInstance ID Failed”+task.getException());
返回;
}
字符串标记=task.getResult().getToken();
Log.e(标记“onComplete:服务方法”+令牌);
}
});
}
@凌驾
已接收消息(@NonNull RemoteMessage RemoteMessage)时公共无效{
super.onMessageReceived(remoteMessage);
字符串call_api=remoteMessage.getData().get(“callapi”);
字符串play_id=remoteMessage.getData().get(“play_id”);
字符串clue_number=remoteMessage.getData().get(“clue_number”);
字符串标题=remoteMessage.getData().toString();
Log.e(标记“onMessageReceived:callapi”+调用api);
Log.e(标记“onMessageReceived:play_id”+play_id);
Log.e(标签,“onMessageReceived:线索编号”+线索编号);
Log.e(标记“onMessageReceived:title”+title);
意向意向=新意向(“远程消息”);
putExtra(“调用api”,调用api);
意图。putExtra(“播放id”,播放id);
意向。额外(“线索编号”,线索编号);
意向。额外(“标题”,标题);
广播者。发送广播(意图);
}
}