FCM Android - 空消息ID

Spa*_*son 5 android firebase-cloud-messaging

我已经实现了我的FirebaseMessagingService的子类,并且我成功地接收了下游消息FirebaseMessagingService.onMessageReceived(RemoteMessage).我的问题是RemoteMessage.getMessageId()总是回归null.根据我的理解,消息ID是强制性的,应由FCM服务器自动生成.实际上,调用https://fcm.googleapis.com/fcm/send 返回消息ID,我无法在应用程序端访问它.

有什么我想念的吗?

这是我的FCM消息服务类:

public class FcmMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FcmMessagingService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Logg.d(TAG, "Received message; id: " + remoteMessage.getMessageId());
        Map<String, String> data = remoteMessage.getData();
        Logg.d(TAG, "Data: " + data);

        String message = data.get("message");
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

Spa*_*son 12

自Firebase Android SDK 9.4起,此问题已得到解决

发行说明:

FIXED RemoteMessage#getMessageId()现在为收到的消息返回正确的消息ID.以前,它回来了null.

com.google.firebase:firebase-messaging依赖项更新为版本9.4.0确实解决了问题.


更新2.07.2016:我被告知这确实是一个错误,修复程序将包含在最近的版本中.


事实证明,我们无法在应用程序端获取消息ID.我已经向Firebase支持人员寻求帮助,这就是他们告诉我的:

当FCM成功收到请求后,它将尝试传递给所有订阅的设备,FCM将向您的服务器返回包含messageID的响应.您无法在客户端(Android设备)直接获取MessageID.MessageID是响应有效负载中的参数.

作为一种解决方法,我在服务器上生成自定义消息标识符并将其传递到有效负载中.

RemoteMessage.getMessageId()实际上做了什么仍然是个谜.