FCM Android - 空消息ID

时间:2016-06-24 07:28:35

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

1 个答案:

答案 0 :(得分:12)

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

来自release notes

  

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()实际上做了什么仍然是个谜。