Как получить конечную точку ARN после переустановки пользователем приложения Android для Amazon SNS?

В настоящее время я использую Amazon SNS для управления Google GCM, который должен отправлять уведомления.

Проблема в том, что я могу получить конечную точку ARN только после создания конечной точки, подобной этой,

но как я могу проверить, зарегистрировался ли пользователь раньше? Так что мне не нужно создавать еще одну запись

и просто используйте эту старую запись. Спасибо

Приведенный ниже код представляет собой кнопку, с помощью которой пользователь может включить (зарегистрироваться)/выключить (удалить) SNS в amazon.

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);

        }

    }
});

person user3538235    schedule 18.11.2014    source источник
comment
Скорее всего, это логическая проблема, приводящая к дублированию конечных точек.   -  person Kevin Crain    schedule 22.03.2015


Ответы (1)


Насколько мне известно, даже когда пользователь повторно устанавливает приложение на то же устройство, токен устройства, сгенерированный GCM, останется прежним. Если вы уже зарегистрировали устройство с помощью токена, SNS не будет вставлять другую запись, вместо этого она ссылается на то же самое. Так что не нужно беспокоиться о повторной регистрации пользователя в SNS с токеном устройства.

person Sailesh Jaiswal    schedule 13.01.2015
comment
Он не такой розовый. Мои тестировщики получают каждое нажатие 40 раз, так как они часто переустанавливают приложение. - person xenteros; 30.06.2016