1

我正在使用GCM面临严重的问题。早些时候,我们使用UrbanAirship发送推送通知,该通知使用GCM发送推送消息。现在我们在客户端和服务器上实现了我们自己的GCM,并希望仅使用GCM发送推送通知。由于部分用户将使用旧版本的应用程序,可能尚未更新为新版本,因此我们必须继续使用UrbanAhiphip向他们发送通知。已更新应用程序的用户将只通过gcm获得推送消息。这在调试模式下进行了测试并且工作正常。当通过UrbanAirship发送推送消息时,未安装新版本的设备收到该消息。UrbanAirship vs GCM通知

但是在实时服务器上,当我们尝试发送推送消息时,那些已更新应用程序并自成立以来一直与我们在一起的用户(曾经通过UrbanAirship接收推送消息)从GCM以及UrbanAhiphip接收到推送消息。通过GCM发送的推送消息包含该消息,但通过UrbanAirship发送的消息是空白的。第一次安装应用程序的设备上也没有发生同样的情况。这些用户只能通过GCM收到推送消息。

我认为这是因为UrbanAirship对于那些曾经通过UrbanAirship接收推送消息的设备仍然有device_ids。现在,处理GCM和UrbanAirship广播的活动使用的许可权是相同的,它们都对意图过滤器中的同一行为作出响应。因此,即使UrbanAirship的活动已从清单文件中删除,该消息也由处理GCM推送消息的活动处理。

有没有办法阻止UrbanAirship向那些通过UrbanAirship接收通知的设备发送推送消息?或从UrbanAirship取消注册这些设备?或者我可以通过传递一个额外的参数来修改GCM的接收器,如果该应用程序未被识别,将不会创建推送通知?

+1

是否UrbanAirship API提供注销方法从UrbanAirship注册数据库中删除设备? – mjn 2014-12-19 09:32:42

回答

1

您可以通过发送哈希ID为您设备的设备注册:

UAirship.shared().getPushManager().getNamedUser().setId(msisdn) 

,并通过设置指定的用户= NULL注销:

UAirship.shared().getPushManager().getNamedUser().setId(null);