2013-01-11 10 views
6
private void registerClient() { 
    try { 
     GCMRegistrar.checkDevice(this); 
     GCMRegistrar.checkManifest(this); 
     regId = GCMRegistrar.getRegistrationId(this); 
     if (regId.equals("")) { 
      registrationStatus = "Registering..."; 
      GCMRegistrar.register(this, "1074338555805"); 
      regId = GCMRegistrar.getRegistrationId(this); 
      registrationStatus = "Registration Acquired"; 
      sendRegistrationToServer(); 
     } else { 
      registrationStatus = "Already registered"; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     registrationStatus = e.getMessage(); 
    } 
} 

ID di registrazione è nullo da gcm in Android 2.3.3, 2.3 .5 ma non è nullo e funziona in Android 2.3.4, 4.0.4.è nullo da gcm in Android 2.3.3, 2.3.5 ma non è nullo e funziona in Android 2.3.4, 4.0.4

+1

Fa questo aiuto? http://stackoverflow.com/questions/11713363/i-can-not-get-registration-id-from-android-gcm – trojanfoe

+0

Ho lo stesso problema –

+1

La risposta più alta nel commento di @ trojanfoe contiene la soluzione. 'GCMRegistrar.register' è asincrono e quindi chiamare' getRegistrationId' immediatamente dopo è inaffidabile. Gestisci la trasmissione che i Servizi Google ti inviano con l'ID. – tophyr

risposta

0

Come indicato in modo chiaro nella guida all'impostazione dei servizi di Google Play.

https://developer.android.com/google/gcm/client.html

Applicazione OnCreate:

// Check device for Play Services APK. If check succeeds, proceed with 
    // GCM registration. 
    if (checkPlayServices()) { 
     gcm = GoogleCloudMessaging.getInstance(this); 
     regid = getRegistrationId(context); 

     if (regid.isEmpty()) { 
      registerInBackground(); 
     } 
    } else { 
     Log.i(TAG, "No valid Google Play Services APK found."); 
    } 

registro nel codice di fondo:

/** 
* Registers the application with GCM servers asynchronously. 
* <p> 
* Stores the registration ID and app versionCode in the application's 
* shared preferences. 
*/ 
private void registerInBackground() { 
    new AsyncTask() { 
    @Override 
    protected String doInBackground(Void... params) { 
     String msg = ""; 
     try { 
      if (gcm == null) { 
       gcm = GoogleCloudMessaging.getInstance(context); 
      } 
      regid = gcm.register(SENDER_ID); 
      msg = "Device registered, registration ID=" + regid; 

      // You should send the registration ID to your server over HTTP, 
      // so it can use GCM/HTTP or CCS to send messages to your app. 
      // The request to your server should be authenticated if your app 
      // is using accounts. 
      sendRegistrationIdToBackend(); 

      // For this demo: we don't need to send it because the device 
      // will send upstream messages to a server that echo back the 
      // message using the 'from' address in the message. 

      // Persist the regID - no need to register again. 
      storeRegistrationId(context, regid); 
     } catch (IOException ex) { 
      msg = "Error :" + ex.getMessage(); 
      // If there is an error, don't just keep trying to register. 
      // Require the user to click a button again, or perform 
      // exponential back-off. 
     } 
     return msg; 
    } 

    @Override 
    protected void onPostExecute(String msg) { 
     mDisplay.append(msg + "\n"); 
    } 
    }.execute(null, null, null); 
    ... 
} 
Problemi correlati