使用 Amazon SNS 处理 android 应用程序卸载
Handling android app uninstallation with Amazon SNS
我们已经完成 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 注册调用 returns 一个单独的注册 ID 并将其发送到后端。后端将其检测为新设备并将其注册到 SNS,即使设备是相同的,用户最终也会拥有多个 SNS 端点。为该用户向主题推送通知时,同一台设备收到两条推送通知。可能是因为旧的端点仍然存在,它应该被禁用。
所以,我的问题是:如何确保在提到的测试用例中,只有一个推送通知被发送到 android 设备。
这是我为我的问题找到的解决方案。
在重新安装的情况下,注册 ID 会发生变化,并且稍后会使用相同的注册 ID 来检测设备是否已注册 SNS 推送。但是还有一个实体是设备独有的,在重新安装的情况下不会改变,即设备 ID。
我更改了对我们服务器的后端调用并向其添加了一个参数,即设备 ID。此 Id 现在用于检测现有的 SNS 注册。如果 Id 已经存在并且注册 Id 是新的,那么我将删除旧端点及其对该用户主题的订阅,然后继续注册过程的其余部分。这将保持 SNS 上的数据以及我们自己的数据清洁。
我们已经完成 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 注册调用 returns 一个单独的注册 ID 并将其发送到后端。后端将其检测为新设备并将其注册到 SNS,即使设备是相同的,用户最终也会拥有多个 SNS 端点。为该用户向主题推送通知时,同一台设备收到两条推送通知。可能是因为旧的端点仍然存在,它应该被禁用。
所以,我的问题是:如何确保在提到的测试用例中,只有一个推送通知被发送到 android 设备。
这是我为我的问题找到的解决方案。
在重新安装的情况下,注册 ID 会发生变化,并且稍后会使用相同的注册 ID 来检测设备是否已注册 SNS 推送。但是还有一个实体是设备独有的,在重新安装的情况下不会改变,即设备 ID。
我更改了对我们服务器的后端调用并向其添加了一个参数,即设备 ID。此 Id 现在用于检测现有的 SNS 注册。如果 Id 已经存在并且注册 Id 是新的,那么我将删除旧端点及其对该用户主题的订阅,然后继续注册过程的其余部分。这将保持 SNS 上的数据以及我们自己的数据清洁。