我在一个数据库表中有一个GCM注册用户列表及其相应的注册ID,我实际上想在用户从表中删除时注销该用户。我在Stackoverflow中发现了很多示例,但大多数示例都基于旧的GCMRegistarAPI,现在已经不推荐使用了。我正在使用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());
}
}
我有一个管理员应用程序,它充当第三方应用程序服务器,因为它向所有用户推送通知。我想注销一个特定的用户从这个管理员应用程序与以下方法:
private void unRegister(String regId) {
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext());
try {
gcm.unregister();
}
catch (IOException e) {
System.out.println("Error Message: " + e.getMessage());
}
}
但unregister()方法并没有将注册Id作为参数,这让我很困惑,这使得无法注销特定设备。有没有办法通过注册Id从GCM注销特定设备?。
现在不建议使用:
https://developers.google.com/android/reference/com/google/android/gms/gcm/GoogleCloudMessaging.html#unregister()
引用您应该调用的文档:
Instead use InstanceID.deleteToken() or InstanceID.deleteInstanceID().
此方法实现了以下功能:
gcm.unregister();
然而,gcm。unregister()现在已不推荐使用,因此,您必须使用以下选项之一:
实例ID。deleteToken()或InstanceID。deleteInstanceID()。
这些方法采用以下参数:
public void deleteToken (String authorizedEntity, String scope)
被授权实体您要删除的实体...
//以下解释仅适用于“注销”
因此,根据您的评论:
但unregister()方法并没有将注册Id作为参数,这让我很困惑,这使得无法注销特定设备。
这是因为您希望它以一种它不希望的方式工作。似乎您希望能够发出http请求,将参数传递给uregister(例如。“http://www.gcmserver.com?unregisterid=xxxx)这不是它的工作方式,这是基于谷歌文档的工作方式:
取消注册的工作原理
从设备卸载应用程序后,可以自动取消注册。然而,这个过程不会马上发生,因为Android不提供卸载回调。在这种情况下发生的事情如下:
最终用户卸载应用程序。
第三方服务器向GCM服务器发送消息。
GCM服务器将消息发送到设备。
GCM客户端接收消息,并向Package Manager查询是否有配置为接收消息的广播接收器,返回false。
GCM客户端通知GCM服务器应用程序已卸载。
GCM服务器将注册ID标记为删除。
第三方服务器向GCM发送消息。
GCM会向第三方服务器返回一条没有注册的错误消息。
第三方删除注册ID。
因此,基于这一点,什么是gcm方法。unregister()实际上是将该设备标记为删除(将其视为在不实际卸载应用程序的情况下强制执行流程的第一步),让服务器知道它不再需要获取通知,并且不将“Id”作为参数,这意味着它正在引用该特定设备。
当做
虽然我尝试了关于这个问题的其他答案,但它无法解决。发件人ID正确,权限已添加,API密钥为true。 我使用此帖子创建项目:http://developer.android.com/guide/google/gcm/gs.html#server-应用程序 它返回空字符串。
您好,我想将gcm添加到我的应用程序中。我的应用程序是一个新闻应用程序。用户可以在注册后查看新闻。应用程序询问用户兴趣(经济、运动、汽车等)并保存它们。我想从php和mysql向用户发送消息作为通知。我必须决定将哪些新闻发送给哪些用户。所以我需要注册证。 是Android设备号吗?还是Android设备谷歌账号和Android设备号的组合 还是Android设备google帐户和Android设备
我的客户机/服务器上的推送通知设备注册管理有一个小问题。 同样,这里的问题是,我有两个或更多的注册ID都可以工作(如果我旧的一个在尝试从服务器发布消息时不工作,这不会有问题,因为我可以简单地清理它)。
我尝试使用GCM发送APN。设备注册OK,GCM和IOS设备令牌被接收。当我尝试发送有效载荷没有"通知"节点: 一切正常。 但是我想处理应用程序在后台时的通知 根据文档,我将有效负载修改为: 第一次尝试: 但没有收到通知。 第二次尝试: 然后应用程序不会收到任何通知,即使我删除了通知节点。所以我必须移除它,重新安装,接收新的代币。 第二期: 我试图检查APN使用NWPusher,但得到错误:无效令
问题内容: 我知道C2DM注册会过期,并且您应该定期刷新注册ID。GCM就是这种情况吗?通过查看Android GCM指南上的以下代码(如下所示),您似乎只需要执行一次,而无需刷新,但是我看不到任何地方都明确编写了该代码,因此我只想检查一下。 问题答案: 编辑:该答案已过时,我不知道目前的行为是什么 我自己找到了答案。根据docs中的示例,您不需要每次都明确地重新注册。 此外,与以前版本的GCM和
我知道C2DM注册会过期,您应该定期刷新注册ID。GCM是这样吗?通过查看Android GCM指南(如下所示)上的以下代码,似乎你只做了一次,不需要刷新,但我没有看到任何地方明确写入,所以我只是想检查一下。