我在使用GCM时遇到了严重的问题。之前我们曾经使用UrbanAirship发送推送通知,而UrbanAirship使用GCM发送推送消息。现在,我们已经在客户端和服务器上实现了自己的GCM,并希望仅使用GCM发送推送通知。由于某些用户将使用该应用程序的旧版本,并且可能尚未更新为新版本,因此我们必须继续使用UrbanAirship向他们发送通知。更新应用程序的用户将仅通过gcm获得推送消息。这在调试模式下进行了测试,并且工作正常。当通过UrbanAirship发送推送消息时,安装了新版本的设备未收到该消息。
但是在实时服务器上,当我们尝试发送推送消息时,自应用程序创建以来一直与我们保持联系的用户(曾经通过UrbanAirship接收推送消息)从GCM以及UrbanAirship接收了推送消息。通过GCM发送的推送消息包含该消息,但通过UrbanAirship发送的消息为空。在首次安装该应用的设备上没有发生相同的事情。这些用户仅通过GCM收到推送消息。
我相信这是因为UrbanAirship仍然具有那些曾经通过UrbanAirship接收推送消息的设备的device_id。现在,处理GCM和UrbanAirship广播的活动所使用的许可是相同的,它们都在意图过滤器中响应相同的动作。因此,即使从清单文件中删除了UrbanAirship的活动,该消息仍由处理GCM Push消息的活动处理。
有没有一种方法可以防止UrbanAirship向那些曾经通过UrbanAirship接收通知的设备发送推送消息?或从UrbanAirship注销这些设备?还是可以通过传递一个额外的参数来修改GCM的接收器,如果在应用程序中无法识别该参数,则不会创建推送通知?
最佳答案
您可以通过以下方式发送设备的哈希ID来注册设备:
UAirship.shared().getPushManager().getNamedUser().setId(msisdn)
并通过设置命名用户= null来注销:
UAirship.shared().getPushManager().getNamedUser().setId(null);
关于android - UrbanAirship vs GCM通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27563015/