Службы 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() в основной деятельности, но это делает приложение слишком медленным.