Службы Google Play обрабатывают автономное устройство для регистрации токена GCM?

Я использую код ниже для регистрации токена приложения:

    public class RegistrationIntentService extends IntentService {

    private static final String TAG = "RegIntentService";
    private static final String[] TOPICS = {"global"};
    public static final String TOKEN_ID = "registration_id";
    private final static int MAX_ATTEMPTS = 5;
    private final static int BACKOFF_MILLI_SECONDS = 2000;
    private String token = null;
    public RegistrationIntentService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        try {
            synchronized (TAG) {
                Random random = new Random();

                InstanceID instanceID = InstanceID.getInstance(this);
                long backoff = BACKOFF_MILLI_SECONDS + random.nextInt(1000);
                for (int i = 1; i <= MAX_ATTEMPTS; i++) {
                    try {
                        token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

                        sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, true).apply();
                    } catch (IOException e) {
                        if (i == MAX_ATTEMPTS) {
                            break;
                        }
                        try {
                            Thread.sleep(backoff);
                        } catch (InterruptedException e1) {
                            break;
                        }
                    }
                    // increase backoff exponentially
                    backoff *= 2;
                }
                // further processing for token goes here
            }

            sendRegistrationToServer(token);
            subscribeTopics(token);
} catch (Exception e) {
            Log.d(TAG, "Failed to complete token refresh", e);
           // sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, false).apply();
        }
Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE);
        LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
}
}

Но если бы устройство было отключено, оно не зарегистрировало бы токен на сервере приложений. И когда устройство подключается, у него нет зарегистрированного токена в БД сервера приложений, и я не могу отправить ему push-уведомления.

Как мне управлять приложением, чтобы оно отправляло свой токен на сервер приложений при подключении?

Я пытался добавить что-то вроде:

    try {
            token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
RegisterTOServer(token);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

метод onResume() в основной деятельности, но это делает приложение слишком медленным.

0 ответов

Другие вопросы по тегам