2015-06-19 88 views
8

我打電話RegistrationIntentServiceAndroid的 - 沒有得到GCM令牌

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

但我看不到任何日誌中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

你有沒有過這個問題閱讀:http://stackoverflow.com/questions/11713363/i-can-not-get-registration-id-from- Android的-G釐米? –

+0

該示例中的註冊方法已被棄用 –

回答

17

確保它在你的清單註冊。

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

我沒有工作。我必須放置一個意圖過濾器嗎? –

+0

@MarianoPelizzari你是否在意圖之前看到日誌輸出? 'Log.i(「udazzT」,「check servicies」);' – mattfred

+0

是的,我看到一個 –

2

你認爲添加所有需要像這裏googlesamples

+0

我做了,我多次檢查 –

+0

好,因爲我忘記了一些方法,但現在它適用於我的googlesamples。 –

0

只需添加這

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

在我的代碼 「GcmReceiver」 & 「MyGcmListenerService」 的manifest.xml的是長相如下所示。

<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] --> 

在我的情況下,它正在工作......可能會對你有所幫助。最好的運氣