private void HandleRegistration(Context context, Intent intent) { var registrationId = intent.GetStringExtra(Constants.ExtraRegistrationId); var error = intent.GetStringExtra(Constants.ExtraError); var unregistered = intent.GetStringExtra(Constants.ExtraUnregistered); //Logger.Debug("handleRegistration: registrationId = " + registrationId + ", error = " + error + ", unregistered = " + unregistered); // registration succeeded if (registrationId != null) { GcmClient.ResetBackoff(context); GcmClient.SetRegistrationId(context, registrationId); OnRegistered(context, registrationId); return; } // unregistration succeeded if (unregistered != null) { // Remember we are unregistered GcmClient.ResetBackoff(context); var oldRegistrationId = GcmClient.ClearRegistrationId(context); OnUnRegistered(context, oldRegistrationId); return; } // last operation (registration or unregistration) returned an error; //Logger.Debug("Registration error: " + error); // Registration failed if (Constants.ErrorServiceNotAvailable.Equals(error)) { var retry = OnRecoverableError(context, error); if (retry) { var backoffTimeMs = GcmClient.GetBackoff(context); var nextAttempt = backoffTimeMs / 2 + sRandom.Next(backoffTimeMs); //Logger.Debug("Scheduling registration retry, backoff = " + nextAttempt + " (" + backoffTimeMs + ")"); var retryIntent = new Intent(Constants.IntentFromGcmLibraryRetry); retryIntent.PutExtra(ExtraToken, token); var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot); var am = AlarmManager.FromContext(context); am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent); // Next retry should wait longer. if (backoffTimeMs < MaxBackoffMs) { GcmClient.SetBackoff(context, backoffTimeMs * 2); } } } else { // Unrecoverable error, notify app OnError(context, error); } }
private void handleRegistration(Context context, Intent intent) { var registrationId = intent.GetStringExtra(Constants.EXTRA_REGISTRATION_ID); var error = intent.GetStringExtra(Constants.EXTRA_ERROR); var unregistered = intent.GetStringExtra(Constants.EXTRA_UNREGISTERED); Logger.Debug("handleRegistration: registrationId = " + registrationId + ", error = " + error + ", unregistered = " + unregistered); // registration succeeded if (registrationId != null) { GcmClient.ResetBackoff(context); GcmClient.SetRegistrationId(context, registrationId); OnRegistered(context, registrationId); return; } // unregistration succeeded if (unregistered != null) { // Remember we are unregistered GcmClient.ResetBackoff(context); var oldRegistrationId = GcmClient.ClearRegistrationId(context); OnUnRegistered(context, oldRegistrationId); return; } // last operation (registration or unregistration) returned an error; Logger.Debug("Registration error: " + error); // Registration failed if (Constants.ERROR_SERVICE_NOT_AVAILABLE.Equals(error)) { var retry = OnRecoverableError(context, error); if (retry) { int backoffTimeMs = GcmClient.GetBackoff(context); int nextAttempt = backoffTimeMs / 2 + sRandom.Next(backoffTimeMs); Logger.Debug("Scheduling registration retry, backoff = " + nextAttempt + " (" + backoffTimeMs + ")"); var retryIntent = new Intent(Constants.INTENT_FROM_GCM_LIBRARY_RETRY); retryIntent.PutExtra(EXTRA_TOKEN, TOKEN); var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot); var am = AlarmManager.FromContext(context); am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent); // Next retry should wait longer. if (backoffTimeMs < MAX_BACKOFF_MS) { GcmClient.SetBackoff(context, backoffTimeMs * 2); } } else { Logger.Debug("Not retrying failed operation"); } } else { // Unrecoverable error, notify app OnError(context, error); } }