FCM 在遗留密钥后无法进入后台
FCM not getting in background after legacy key
我从 8.0 版开始使用 FCM,根据文档,只有当应用程序在 FCMMessagingService
中处于前台时才会收到 notification
中的数据,但 data
在这两种情况下都会收到密钥,无论应用程序是在前台还是后台。
下面是服务器发送通知的PHP片段
$path_to_firebase_cm = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'to' => $token,
'notification' => array('title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound"),
'data' => array('message' => $message)
);
Android code/class 应该收到通知。
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData().get("message"));
sendNotification(remoteMessage.getData().get("message"));
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
}
}
}
compile 'com.google.firebase:firebase-messaging:10.0.1'
清单中的插件、类路径和服务已按要求添加
apply plugin: 'com.google.gms.google-services'
classpath 'com.google.gms:google-services:3.0.0'
<service android:name=".fcm.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".fcm.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
问题
当应用程序在前台时,数据有效负载和通知有效负载都会显示日志,当应用程序在后台时 none 会显示日志。
旧项目运行良好,当我们创建新的 Firebase 应用程序时出现问题,即提供新的 LEGACY SERVER KEY 用于发送通知。
您只能在 json 上使用 data
对象。参见 。
所以你的json一定是这样的
$fields = array(
'to' => $token,
'data' => array('message' => $message, 'title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound")
);
我从 8.0 版开始使用 FCM,根据文档,只有当应用程序在 FCMMessagingService
中处于前台时才会收到 notification
中的数据,但 data
在这两种情况下都会收到密钥,无论应用程序是在前台还是后台。
下面是服务器发送通知的PHP片段
$path_to_firebase_cm = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'to' => $token,
'notification' => array('title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound"),
'data' => array('message' => $message)
);
Android code/class 应该收到通知。
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData().get("message"));
sendNotification(remoteMessage.getData().get("message"));
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
sendNotification(remoteMessage.getNotification().getBody());
}
}
}
compile 'com.google.firebase:firebase-messaging:10.0.1'
清单中的插件、类路径和服务已按要求添加
apply plugin: 'com.google.gms.google-services'
classpath 'com.google.gms:google-services:3.0.0'
<service android:name=".fcm.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".fcm.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
问题
当应用程序在前台时,数据有效负载和通知有效负载都会显示日志,当应用程序在后台时 none 会显示日志。
旧项目运行良好,当我们创建新的 Firebase 应用程序时出现问题,即提供新的 LEGACY SERVER KEY 用于发送通知。
您只能在 json 上使用 data
对象。参见
$fields = array(
'to' => $token,
'data' => array('message' => $message, 'title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound")
);