当应用程序关闭时,Firebase推送通知不会在Android上触发onMessageReceive

当应用程序关闭时,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

当我没有将JSON请求中的通知对象发送到Firebase API时,onMessageReceive会正常触发,我的通知会按预期工作,但是,当我使用JSON中作为参数发送的通知android对象时,当应用程序处于后台时,不会触发onMessageReceive

我一直在试着调试这个,但我想不出来

我的服务器中有一个简单的类,它使用Firebase API发送推送通知

在我发送给服务器的参数中,我发送了以下属性

"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);
意向。额外(“线索编号”,线索编号);
意向。额外(“标题”,标题);
广播者。发送广播(意图);
}
}