FCM Android - 空消息 ID

FCM Android - null message ID

我已经实现了 FirebaseMessagingService 的子 class,并且在 FirebaseMessagingService.onMessageReceived(RemoteMessage) 中成功接收了下游消息。我的问题是 RemoteMessage.getMessageId() 总是 returns null。据我了解,消息 ID 是强制性的,应该由 FCM 服务器自动生成。事实上,调用https://fcm.googleapis.com/fcm/send returns一个消息ID,我只是无法在应用程序端访问它。

有没有我遗漏的东西?

这是我的 FCM 消息服务 class:

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");
        /* ... */
    }
}

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

来自release notes

FIXED RemoteMessage#getMessageId() now returns the correct message-id for received messages. Previously, it returned null.

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


2016 年 7 月更新: 我被告知这确实是一个错误,并且将在最近的版本中包含修复程序。


原来我们无法在应用端获取消息ID。我已经向 Firebase 支持寻求帮助,他们告诉我的是这样的:

When FCM has successfully receives the request, it will attempt to deliver to all subscribed devices, FCM will return a response which includes messageID to your server. You cannot directly get MessageID on your client side (Android device). MessageID is a parameter in response payload.

作为解决方法,我在服务器上生成自定义消息标识符并将它们传递到负载中。

RemoteMessage.getMessageId() 到底做了什么仍然是个谜。