我们一直致力于GCM实施,并注意到即使卸载了应用程序,分配给应用程序安装的设备地址也可以继续使用.
因此,我们安装了一个应用程序,获得令牌A,设备订阅了特定的警报类型1,消息令牌A非常成功.然后我们卸载应用程序.
不,我们重新安装,接收令牌B,并且设备订阅了特定的警报类型2,我们向令牌B发送消息非常成功.
现在,由于我们在卸载和重新安装应用程序之间没有向令牌A发送消息,因此我们仍然可以向两个令牌发送消息,并且应用程序同时接收它们.
如果我们尝试在卸载应用程序时向令牌A发送消息,我们可以从谷歌的响应中清除它.
有没有办法知道令牌A在技术上不再有效?
我在GCM中使用GoogleCloudMessaging.getInstance(context)注册; 并将收到的令牌保存在设备上.然后将其发送到服务器,它与用户帐户相关联.如果我卸载我的应用程序而没有注销并再次安装并与其他用户一起登录,我会收到新令牌并将其发送到服务器.当推送发送给第一个用户时,我在第二个用户登录时看到它们.
为什么GCM会向我发送不同的令牌,我该如何处理?
我有一个GCM注册用户列表及其在数据库表中的相应注册ID,我实际上想要在从表中删除用户时取消注册用户.我在Stackoverflow中找到了很多示例,但其中大多数都基于旧的GCMRegistrar API,现在已弃用.我正在使用GoogleCloudMessaging API并通过以下方法注册用户:
private void registerUser(){
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext());
String regId = "";
try {
regId = gcm.register(getString(R.string.project_number));
Log.i("registrationId", regId);
}
catch (IOException e) {
Log.i("Registration Error", e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个管理员应用程序,它充当第三方应用程序服务器,因为它将通知推送给所有用户.我想通过以下方法从此管理员应用中取消注册特定用户:
private void unRegister(String regId) {
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext());
try {
gcm.unregister();
}
catch (IOException e) {
System.out.println("Error Message: " + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
但令我困惑的是,unregister()方法没有将注册ID作为参数,这使得无法注销特定设备.有没有办法通过注册ID从GCM取消注册特定设备?
android push-notification google-cloud-messaging google-play-services
我正在尝试向一些Android设备发送推送更新.他们中的一些人同时拥有一个新的身份证,所以我谷歌告诉我有规范的ID.从我阅读的文档中:
如果设置了message_id,请检查registration_id:
我错过了一个部分,或者如果您向Google发送超过1个注册ID,这是否含糊不清?
我的请求(替换ID为可读性):
"{"data":{"favorite":1},"registration_ids":["1","2","3","4","5","6"]}"
Run Code Online (Sandbox Code Playgroud)
Google的回复是:
{
"multicast_id":7917175795873320166,
"success":6,
"failure":0,
"canonical_ids":4,
"results":[
{"registration_id":"3","message_id":"m1"},
{"message_id":"m1"},
{"message_id":"m1"},
{"registration_id":"3","message_id":"m1"},
{"registration_id":"3","message_id":"m1"},
{"registration_id":"3","message_id":"m1"}
]
}
Run Code Online (Sandbox Code Playgroud)
从这里,我知道id 3是正确的,但是我应该用3替换哪些原始id?为每个注册的ID发送每条消息都是浪费.我在这里阅读了一篇关于Stackoverflow(GCM和id处理)的文章,为Java服务器解决了这个问题,但我的不是(RoR).
关于如何解决这个问题的任何想法?
我目前正在尝试使用GCM向用户发送通知,目前我还在研究如何最大化它.现在我只使用此处文档中提供的示例项目,并使用gcm-client示例来处理它.
现在使用Git中的这个项目我尝试使用应用程序创建的注册ID来推送消息,是的,它成功传递了消息.
现在问题是我卸载应用程序后.重新安装后,它将生成一个新的注册ID,其中我将它与前一个一起存储在服务器上,但我无法将之前的注册ID标记为不接收任何进一步的消息,因为当用户没有互联网时可能会发生卸载连接.之后,我发送消息到两个注册ID,这是卸载应用程序之前的ID和重新安装应用程序后的ID.发生了什么事情,我收到两个推送消息,尽管我预计它只会得到一个,因为应用程序已经更改了注册ID.
我希望应用程序可能会收到两个或更多重复的应用程序,如果我还更新了应用程序,因为正如文档中所述,注册ID可能会在更新时更改.
我可以做任何解决方法来处理这些重复的消息?
我发现当GCM无法发送下一个推送通知时,GCM会将注册ID标记为删除.
但在我的情况下,我的用户发生了以下情况.
场景:
1)我的用户安装了应用程序,他的设备已在GCM注册.
2)同一用户卸载并立即再次安装应用程序.第二次生成新的注册ID.
3)这两个注册ID存储在我的数据库中.
4)现在这个特定用户正在获得两个推送通知.
现在我有以下问题:
问题: