我已经实现了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");
/* ... */
}
}
答案 0 :(得分: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()实际上做了什么仍然是个谜。