2015-06-19 89 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] --> 

在我的情况下,它正在工作......可能会对你有所帮助。最好的运气