我正在使用用于Firebase Cloud Messaging 的Java SDK,并希望发送一批(或多播(消息。如果我发送 100 条消息,我会返回 100SendResponse
。但我不明白我如何将这些与代币/订阅者联系起来。成功的messageId
中有一个,但我不能用它来将其与代币联系起来。
我错过了什么?或者这是 API/SDK 的限制?
您必须手动管理设备令牌到用户的映射。 设备令牌仅标识设备,而不是用户。 用户可能使用多个设备,因此它实际上是一对多映射。 但是,无法避免自己跟踪此映射。
根据服务器环境文档关于向多个设备发送消息,SendResponse
s列表的顺序对应于输入令牌的顺序:
返回值是一个批处理响应,其响应列表对应于输入标记的顺序。当您想要检查哪些令牌导致错误时,这很有用。
您可以使用此事实来确定token -> SendResponse
映射,如该页面上的示例代码所示:
// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
"YOUR_REGISTRATION_TOKEN_1",
// ...
"YOUR_REGISTRATION_TOKEN_n"
);
MulticastMessage message = MulticastMessage.builder()
.putData("score", "850")
.putData("time", "2:45")
.addAllTokens(registrationTokens)
.build();
BatchResponse response = FirebaseMessaging.getInstance().sendMulticast(message);
if (response.getFailureCount() > 0) {
List<SendResponse> responses = response.getResponses();
List<String> failedTokens = new ArrayList<>();
for (int i = 0; i < responses.size(); i++) {
if (!responses.get(i).isSuccessful()) {
// The order of responses corresponds to the order of the registration tokens.
failedTokens.add(registrationTokens.get(i));
}
}
System.out.println("List of tokens that caused failures: " + failedTokens);
}
正如 Doug 在他的回答中提到的,将输入令牌关联到用户是您需要自己管理的事情。在关系数据库中,您可能有一个包含User
表外键的FCM_Token
表。