android - 用户重新安装适用于 Amazon SNS 的 Android 应用程序后,如何获取端点 ARN?

标签 android amazon-web-services google-cloud-messaging amazon-sns

目前我正在使用 Amazon SNS 来管理 google GCM ,即推送通知。

问题是,我只能在这样创建端点后获取端点 ARN,

但是如何查看用户之前是否注册过呢?所以我不需要再创建一条记录

然后只使用那个旧记录。谢谢

下面的代码是用户打开(注册)/关闭(删除)亚马逊SNS的按钮

notify.setOnClickListener(new OnClickListener() {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public void onClick(View v) {
        if (prefs.getString("endpoint_arn", "").equals("")) {
            new AsyncTask() {
                @Override
                protected Object doInBackground(final Object... params) {                                       
                    try {
                        ((Activity) ctx).runOnUiThread(new Runnable() {
                              public void run() {
                                  if (!pDialog.isShowing())
                                        pDialog.show();
                              }
                        });

                        String token = gcm.register(Constant.projectID);

                        CreatePlatformEndpointRequest per = new CreatePlatformEndpointRequest();
                        per.setToken(token);
                        per.setPlatformApplicationArn(Constant.platformARN);

                        CreatePlatformEndpointResult result = asnsc.createPlatformEndpoint(per);

                        editor.putString("endpoint_arn", result.getEndpointArn());
                        editor.commit();

                        ((Activity) ctx).runOnUiThread(new Runnable() {
                              public void run() {
                                  notify_txt.setText(ctx.getResources().getString(R.string.on));
                                  if (pDialog.isShowing())
                                      pDialog.dismiss();
                              }
                        });

                    } catch (final Exception e) {
                        ((Activity) ctx).runOnUiThread(new Runnable() {
                              public void run() {
                                  Log.d("test1","Registration Error:" + e.getMessage());
                                  Toast.makeText(ctx, getResources().getString(R.string.error),  Toast.LENGTH_LONG).show();
                                  if (pDialog.isShowing())
                                      pDialog.dismiss();
                              }
                        });
                    }
                    return true;
                }
            }.execute(null, null, null);

        } else {

            new AsyncTask() {
                @Override
                protected Object doInBackground(final Object... params) {                                       
                    try {
                        ((Activity) ctx).runOnUiThread(new Runnable() {
                              public void run() {
                                  if (!pDialog.isShowing())
                                        pDialog.show();
                              }
                        });

                        DeleteEndpointRequest dPer = new DeleteEndpointRequest();
                        dPer.setEndpointArn(prefs.getString("endpoint_arn", ""));
                        asnsc.deleteEndpoint(dPer);
                        gcm.unregister();
                        editor.remove("endpoint_arn").commit();

                        ((Activity) ctx).runOnUiThread(new Runnable() {
                              public void run() {
                                  notify_txt.setText(ctx.getResources().getString(R.string.off));
                                  if (pDialog.isShowing())
                                      pDialog.dismiss();
                              }
                        });

                    } catch (final Exception e) {
                        ((Activity) ctx).runOnUiThread(new Runnable() {
                              public void run() {
                                  Log.d("test1","Delete Error:" + e.getMessage());
                                  Toast.makeText(ctx, getResources().getString(R.string.error),  Toast.LENGTH_LONG).show();
                                  if (pDialog.isShowing())
                                      pDialog.dismiss();
                              }
                        });
                    }
                    return true;
                }


            }.execute(null, null, null);

        }

    }
});

最佳答案

据我所知,即使用户在同一台​​设备上重新安装应用程序,GCM 生成的设备 token 也是相同的。如果您已经使用 token 注册了设备,则 SNS 不会插入另一条记录,而是引用相同的记录。因此无需担心使用设备 token 再次将用户注册到 SNS。

关于android - 用户重新安装适用于 Amazon SNS 的 Android 应用程序后,如何获取端点 ARN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26985104/

相关文章:

android - Google Cloud Messaging 不适用于公司网络上的 4.1.2 设备

android - 应用程序未在 native react 中注册

python-3.x - 将 Picked 或 Joblib 预训练的 ML 模型加载到 Sagemaker 并作为端点托管

android - 使用 google-play 服务时出现 Multidex 错误

android - gcm 可以用于在 android 设备之间发送和接收消息吗?

android - 带有android Lollipop 工具栏的快速返回操作栏

.net - Android 模拟器未连接到 .Net Web 服务

amazon-web-services - 启用 InstanceMetadataTags 时权限不足 `run-instance`

python - 使用 ElasticBeanstalk 在 AWS 上部署在 Python 3.6 上运行的 Django 项目

android - 捕获推送通知android