传统密钥

时间:2016-12-19 07:05:49

标签: android push-notification firebase-cloud-messaging firebase-notifications

我从版本8.0开始使用FCM,根据文档,仅当应用程序位于notification的前台时,才会收到FCMMessagingService中的数据,但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代码/类。

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());
        }
    }
}
  

编译'com.google.firebase:firebase-messaging:10.0.1'

showiest中的插件,类路径和服务已按要求添加

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>

问题

当应用程序位于前台时,数据有效负载和通知有效负载都会显示日志,当应用程序处于后台时,不会显示任何日志。

旧版项目工作正常,我们创建新的Firebase应用时就会出现问题,即提供新的 LEGACY SERVER KEY 来发送通知。

1 个答案:

答案 0 :(得分:2)

您必须在json上仅使用data个对象。见this。 所以你的json必须像这样

 $fields = array(
            'to' => $token,
            'data' => array('message' => $message, 'title' => 'Title', 'body' => $message,'vibrate'=>"1",'sound'=>"mySound")
        );