使用Amazon SNS处理android应用程序卸载
我们已经完成SNS设置,为我们的Android应用发送推送通知。 逐步过程如下:
无论何时启动应用程序,它都会通过register
呼叫来生成GCM注册ID。 代码片段如下:
private String registerOnGCM(){ try { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext()); String token = gcm.register(Globals.GCM_TOKEN); return token; } catch (IOException e) { Log.e(TAG, "failed to complete token refresh process"); } return null; }
Globals.GCM_TOKEN是在为应用程序进行FCM注册时获得的应用程序ID。
应用程序打电话给我们的后端服务器并通过此注册ID。
后端服务器检查这个注册ID是否是新的。 如果是新的,则使用该注册ID创建新的SNS端点,然后将新的端点订阅给为该用户创建的主题。 它将所有这些数据保存在我们的数据库中以供将来参考。
向用户发送推送通知给所有设备时,我们只需将消息广播到为该用户创建的主题,并将消息发送到用户拥有的所有设备。 这工作得很好,涉及多个设备的情况下,我们的应用程序安装在所有设备上。 这个问题出现在卸载和重新安装上。
重新安装后,GCM注册调用将返回一个单独的注册ID并将其发送到后端。 后端将其检测为新设备,并将其注册为SNS,即使设备相同,用户也会收到多个SNS端点。 当为该用户推送通知给该主题时,同一设备会收到两个推送通知。 可能是因为旧的端点仍然存在,它应该已被禁用。
所以,我的问题:如何确保在提到的测试案例中,只有一个推送通知被发送到Android设备。
所以这里是我为我的问题找到的解决方案。
在重新安装的情况下,注册ID正在改变,并且相同的注册ID稍后被用于检测设备是否已经被注册用于SNS推送。 但是还有一个实体对设备是唯一的,并且在重新安装的情况下不会改变,即设备ID。
我改变了后台调用我们的服务器,并增加了一个参数,设备ID。 此ID现在用于检测已经存在的SNS注册。 如果Id已经存在,并且注册ID是新的,那么我将删除旧的端点及其订阅该用户的主题,然后继续注册过程的其余部分。 这将保持SNS数据以及我们自己的数据清洁。
链接地址: http://www.djcxy.com/p/32251.html上一篇: Handling android app uninstallation with Amazon SNS
下一篇: AWS Mobile Push with users that may be logged into multiple devices