我正面临着使用GCM的严重问题。之前我们曾经使用UrbanAirship发送推送通知,UrbanAirship使用GCM发送推送消息。现在我们在客户端和服务器上实现了我们自己的GCM,并希望仅使用GCM发送推送通知。由于某些用户将使用旧版本的应用程序并且可能没有更新到新版本,我们必须继续使用UrbanAirship向他们发送通知。更新应用程序的用户将仅通过gcm获取推送消息。这是在调试模式下测试的并且工作正常。当推送消息通过UrbanAirship发送时,安装新版本的设备没有收到它。
但是在实时服务器上,当我们尝试发送推送消息时,更新应用程序并且从一开始就与我们在一起的用户(曾经通过UrbanAirship接收推送消息的用户)收到来自GCM和UrbanAirship的推送消息。通过GCM发送的推送消息包含消息,但通过UrbanAirship发送的消息为空白。在第一次安装应用程序的设备上也没有发生同样的事情。这些用户仅通过GCM收到推送消息。
我认为原因是UrbanAirship仍然拥有那些曾经通过UrbanAirship接收推送消息的设备的device_ids。现在,处理GCM和UrbanAirship广播的活动使用的权限是相同的,它们都响应intent-filter中的相同操作。因此,即使从清单文件中删除了UrbanAirship的活动,该消息也由处理GCM Push消息的活动处理。
有没有办法阻止UrbanAirship向那些用于通过UrbanAirship接收通知的设备发送推送消息?或从UrbanAirship取消注册这些设备?或者我可以通过传递额外的参数来修改GCM的接收器,如果在应用程序中无法识别,则不会创建推送通知吗?
答案 0 :(得分:1)
您可以通过以下方式为您的设备发送散列ID来注册您的设备:
UAirship.shared().getPushManager().getNamedUser().setId(msisdn)
并通过设置指定的user = null:
取消注册UAirship.shared().getPushManager().getNamedUser().setId(null);