2015-06-07 35 views
25

可能有人請幫助我瞭解gcm_defaultSenderId是在下面的代碼(在RegistrationIntentService.java在onHandleIntent發現)什麼:GCM defaultSenderID

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); 

這是從谷歌示例應用程序執行的GCM到您的應用程序,它甚至不會在他們的應用程序中編譯!我確定這是每個應用程序特定的內容。我已經將GCM API添加到我的應用程序,只是不知道這個字符串應該是什麼!謝謝!

+0

獲得這一問題的進一步瞭解後,我意識到,你必須創建配置文件(谷歌services.json)和導入。然後該項目根據@Kroikie提到的插件解決senderID請讓我知道如果您需要更多的澄清 – Brandon

回答

9

引用THIS文件,在這裏你可以找到有關實施細節:

String authorizedEntity = PROJECT_ID; // Project id from Google Developers Console 
String scope = 「GCM」; // e.g. communicating using GCM, but you can use any 
         // URL-safe characters up to a maximum of 1000, or 
         // you can also leave it blank. 
String token = InstanceID.getInstance().getToken(authorizedEntity,scope); 

因此,大家可以看到,你應該傳遞給getToken()的第一個參數是authorizedEntity,這應該是從谷歌項目編號開發人員:)

即使GitHub中的項目具有該字符串,它也不會爲您提供任何好處,因爲此authorizedEntity對於每個應用程序都是唯一的。

+0

是的,我知道它是每個應用程序都是獨一無二的(見上面我的問題,tehe),但謝謝!這是我最終找到[這裏]的答案(http://stackoverflow.com/questions/11294602/android-gcm-sender-id)。我會接受你的回答,謝謝你發佈相關代碼和鏈接! – Brandon

28

gcm_defaultSenderId是一個由google-services gradle插件包含的字符串。確保你的build.gradle文件中包含:

apply plugin: 'com.google.gms.google-services' 

該插件應該在最新版本的構建工具中可用。

和Vesko一樣,這是您的發件人ID,在這種情況下,您的發件人ID是您的開發控制檯項目中的項目編號。 google-services插件從您下載的項目配置文件中提取這些內容。

+0

我已經申請了插件,但它仍然不工作任何想法爲什麼? –

+0

是否包含配置文件?如果沒有檢查https://developers.google.com/cloud-messaging/android/start生成一個。 –

+0

我確實包含了配置文件,並將其放在應用程序文件夾中,它在示例gcm應用程序中工作,但未在我的應用程序中 –

1

爲了解決這個問題,你只需要添加apply plugin: 'com.google.gms.google-services'您gradle.app模塊和classpath 'com.google.gms:google-services:1.3.0'您gradle.app項目的依賴

,當然還有,不要忘了添加compile 'com.google.android.gms:play-services-gcm:8.1.0' 您gradle這個

1

我討厭那些有問題的Gradle插件,並試圖讓Google服務插件在多種風格的項目中運行也沒有趣。

我最終的名字讓發件人ID:

InstanceID instanceID = InstanceID.getInstance(this); 
String gcmDefaultSenderId = getString(getResources().getIdentifier("gcm_defaultSenderId", "string", this.getPackageName())); 
String token = instanceID.getToken(gcmDefaultSenderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);