gpt4 book ai didi

android - 为同一用户处理多个设备的 GCM 注册 ID

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:20:55 27 4
gpt4 key购买 nike

这是许多应用面临的常见情况,但我正在努力了解如何实现:

假设我的应用程序是一个具有当前登录用户的社交网络。我想向该用户发送 GCM 消息,用于他当前使用我的应用登录的所有设备。

这意味着我的服务器为每个用户保存了一个包含他所有注册 ID 的列表 - 每个设备一个。

问题:我如何才能唯一地跟踪他的每一台设备? seems there is no reliable way to get specific device identifier

不存储每个唯一设备的注册 ID - 我不知道如何管理它。

当用户卸载/注销并在之后获取新的注册 ID 时,事情会变得一团糟,这应该会替换现有的已知 ID 之一,但究竟是哪一个呢??

如果我只想向特定设备而不是所有设备发送消息,事情会变得更加麻烦......

请帮助我了解我遗漏了什么,以及为同一用户处理多个设备注册 ID 的正确方法是什么。

最佳答案

在使用 GCM 时,Google 会为您处理几乎所有繁重的工作。他们提供了一种简单的方法来始终使注册 ID 保持最新。每条发送的消息都有一个额外的字段,称为 canonicalRegistrationId。如果该字段中有 id,则注册 id 已更改并且需要更新。该字段存在于每条消息中,每次发送消息时,您都必须检查该字段。如果有新的 canonicalRegistrationId,那么您应该尽快更新 registrationId。旧的可能会继续工作一段时间,但不知道什么时候失效。

例如,在 Google App Engine 后端,处理不断变化的注册 ID 的代码看起来像这样:

// We want to send a message to some devices
// Get registered devices and then loop through them
List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(10).list();
for(RegistrationRecord record : records) {

// Send the message to one device
Result result = sender.send(msg, record.getRegId(), 5);

// If the messageId is not null, then the message has been sent successfully
if (result.getMessageId() != null) {
log.info("Message sent to " + record.getRegId());

// Check for canonical message id
// If it is not null, then the registrationId has changed
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {

// The registrationId has changed! We need to update it in the database
log.info("Registration Id changed for " + record.getRegId() + " updating to " + canonicalRegId);
record.setRegId(canonicalRegId);
ofy().save().entity(record).now();
}
} else {
... // Irrelevant error handling
}
}

所以您要做的非常简单:每次发送消息时,检查是否有 canonicalRegistrationId,如果有,则用规范的更新旧的 registrationId。

关于android - 为同一用户处理多个设备的 GCM 注册 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25139865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com