public static boolean register( final Context context, final String regId, /* optional */ final String oldId) { Log.i(TAG, "registering device"); String serverUrl = Secret.SERVER_REG_URL; Map<String, String> params = new HashMap<String, String>(); params.put(P_REGID, regId); params.put(P_USER, PrefsHelper.getUser(context)); params.put(P_PWD, PrefsHelper.getPwd(context)); if (oldId != "") { params.put(P_OLDID, oldId); } long backoff = BACKOFF_MILLI_SECONDS + random.nextInt(1000); // Once GCM returns a registration id, we need to register it in the // app server. As the server might be down, we will retry it a couple // times. for (int i = 1; i <= MAX_ATTEMPTS; i++) { if (GCMRegistrar.isRegisteredOnServer(context)) { // AsyncTask finished meanwhile, return return false; } Log.d(TAG, "Attempt #" + i + " to register"); try { String message = post(serverUrl, params); if (message.contains("Successfully added") || message.contains("already registered")) { GCMRegistrar.setRegisteredOnServer(context, true); GCMHelper.displayMessage(context, message); return true; } else { // dont backoff in case of a wrong password GCMHelper.displayMessage(context, message); return false; } } catch (IOException e) { Log.e(TAG, "Failed to register on attempt " + i, e); if (i == MAX_ATTEMPTS) { break; } try { Log.d(TAG, "Sleeping for " + backoff + " ms before retry"); Thread.sleep(backoff); } catch (InterruptedException e1) { // Activity finished before we complete - exit. Log.d(TAG, "Thread interrupted: abort remaining retries!"); Thread.currentThread().interrupt(); return false; } // increase backoff exponentially backoff *= 2; } } String message = context.getString(R.string.server_register_error, MAX_ATTEMPTS); GCMHelper.displayMessage(context, message); return false; }
/** Unregister this account/device pair within the server. */ public static void unregister(final Context context, final String regId) { Log.i(TAG, "unregistering device"); String serverUrl = Secret.SERVER_UNREG_URL; Map<String, String> params = new HashMap<String, String>(); params.put(P_REGID, regId); params.put(P_USER, PrefsHelper.getUser(context)); params.put(P_PWD, PrefsHelper.getPwd(context)); try { String message = post(serverUrl, params); GCMHelper.displayMessage(context, message); if (message.contains("Success")) { GCMRegistrar.setRegisteredOnServer(context, false); } } catch (IOException e) { String message = context.getString(R.string.server_unregister_error, e.getMessage()); e.printStackTrace(); GCMHelper.displayMessage(context, message); } }