2015-06-19 4 views
8

io chiamo RegistrationIntentService:Android - non ottenere GCM gettone

if (checkPlayServices()) { 
     Log.i("udazzT", "check servicies"); 
     // Start IntentService to register this application with GCM. 
     Intent intent2 = new Intent(this, RegistrationIntentService.class); 
     startService(intent2); 
    } 

ma non riesco a vedere uno dei ceppi in RegistrationIntentService:

public class RegistrationIntentService extends IntentService { 

    private static final String TAG = "RegIntentService"; 
    private static final String[] TOPICS = {"global"}; 

    public RegistrationIntentService() { 
     super(TAG); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.i("udazzT", "setting token"); 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

     try { 
      // In the (unlikely) event that multiple refresh operations occur simultaneously, 
      // ensure that they are processed sequentially. 
      synchronized (TAG) { 
       // [START register_for_gcm] 
       // Initially this call goes out to the network to retrieve the token, subsequent calls 
       // are local. 
       // [START get_token] 
       Log.i("udazzT", "setting token 2"); 
       InstanceID instanceID = InstanceID.getInstance(this); 
       String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
         GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
       // [END get_token] 
       Log.i(TAG, "GCM Registration Token: " + token); 

       // TODO: Implement this method to send any registration to your app's servers. 
       sendRegistrationToServer(token); 

       // Subscribe to topic channels 
       subscribeTopics(token); 

       // You should store a boolean that indicates whether the generated token has been 
       // sent to your server. If the boolean is false, send the token to your server, 
       // otherwise your server should have already received the token. 
       sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, true).apply(); 
       // [END register_for_gcm] 
      } 
     } catch (Exception e) { 
      Log.d(TAG, "Failed to complete token refresh", e); 
      // If an exception happens while fetching the new token or updating our registration data 
      // on a third-party server, this ensures that we'll attempt the update at a later time. 
      sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, false).apply(); 
     } 
     // Notify UI that registration has completed, so the progress indicator can be hidden. 
     Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete); 
    } 

    /** 
    * Persist registration to third-party servers. 
    * 
    * Modify this method to associate the user's GCM registration token with any server-side account 
    * maintained by your application. 
    * 
    * @param token The new token. 
    */ 
    private void sendRegistrationToServer(String token) { 
     // Add custom implementation, as needed. 
    } 

    /** 
    * Subscribe to any GCM topics of interest, as defined by the TOPICS constant. 
    * 
    * @param token GCM token 
    * @throws IOException if unable to reach the GCM PubSub service 
    */ 
    // [START subscribe_topics] 
    private void subscribeTopics(String token) throws IOException { 
     for (String topic : TOPICS) { 
      GcmPubSub pubSub = GcmPubSub.getInstance(this); 
      pubSub.subscribe(token, "/topics/" + topic, null); 
     } 
    } 
    // [END subscribe_topics] 

} 
+0

Avere di leggere questa domanda: http://stackoverflow.com/questions/11713363/i-can-not-get-registration-id-from- android-g centimetro? –

+0

Il metodo di registrazione in questo esempio è deprecato –

risposta

17

Assicurarsi che è stato registrato nel vostro manifesto.

<service android:name=".RegistrationIntentService" 
      android:exported="false" /> 
+0

Non ho funzionato. Devo inserire un filtro intent? –

+0

@ MarianoPelizzari vedi l'output del registro prima dell'intenzione? 'Log.i (" udazzT "," controlla servizi ");' – mattfred

+0

Sì, ho visto che uno –

2

hai pensato di aggiungere tutti che serve come qui googlesamples

+0

L'ho fatto e l'ho rivisto più volte –

+0

ok perché ho dimenticato alcuni metodi, ma ora funziona per me con googlesamples. –

0

Basta aggiungere questo

<intent-filter> 
<action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
<category android:name="<PACKAGE-NAME>" /> 
</intent-filter> 

in manifest.xml di "GcmReceiver" & "MyGcmListenerService" nel mio codice è sguardi come sotto

<receiver 
     android:name="com.google.android.gms.gcm.GcmReceiver" 
     android:exported="true" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="<PACKAGE-NAME>" /> 
     </intent-filter> 
    </receiver> 
    <!-- [END gcm_receiver] --> 

    <!-- [START gcm_listener] --> 
    <service 
     android:name="<PACKAGE-NAME>.MyGcmListenerService" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="<PACKAGE-NAME>" /> 
     </intent-filter> 
    </service> 
    <!-- [END gcm_listener] --> 
    <!-- [START instanceId_listener] --> 

Nel mio caso funziona ... Potrebbe essere utile a voi. Buona fortuna