回答
GCM響應Not Registered
意味着「如果是NotRegistered
,您應該從服務器數據庫中刪除註冊ID,因爲應用程序是從設備上卸載的,或者它沒有配置接收com.google.android的廣播接收器。 c2dm.intent.RECEIVE意圖「。從documentation。檢查您遇到此錯誤的情況,從設備上卸載應用或在AndroidManifest中描述不正確的廣播接收器。您可以使用my test GCM server來測試您的GCM功能。希望,這可以幫助你。
你能告訴我如何知道哪些id在服務器端未註冊,以便我可以從我的數據庫中刪除它們。 – 2015-09-10 19:29:42
@DB當然,只有一種方法可以知道何時需要從服務器上的數據庫中刪除**註冊ID **。從GCM服務器獲取「NotRegistered」錯誤意味着您嘗試使用的registration_id無效,應該刪除。此外,您的服務器應該準備好處理來自GCM的** cannonical_id **響應。我解釋了** cannonical_id **的含義是什麼http://stackoverflow.com/questions/26826869/regarding-canonical-ids-in-gcm-google-cloud-messaging/26827470#26827470 – Samik 2015-09-10 19:35:17
@DB你也可以診斷你的** registration_id **通過我的測試推送服務器http://1-dot-sigma-freedom-752.appspot.com/gcmpusher.jsp – Samik 2015-09-10 19:43:23
Google帳戶是運行Android 4.0.4或更低版本的設備上的要求。 http://developer.android.com/google/gcm/gcm.html
您還應該在您的清單文件中添加<uses-permission android:name="android.permission.GET_ACCOUNTS" />
。
我已經有... – LKM 2014-11-03 18:12:36
當我在清單文件中的應用程序之外擁有gcm接收器時,發生此錯誤。將接收器移入應用程序範圍,並且一切正常。現在是一個非常快樂的兔子。
<application>
...
<receiver>
...
</receiver>
...
</application>
我使用GCM舊的過時的代碼:
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(this);
}
String regId = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regId;
,並嘗試切換到新的途徑時:
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
我得到了同樣的錯誤,這是讓我堅持了兩天。
在嘗試了本書中的所有內容之後,修正了在開發者控制檯中禁用GCM,重新啓用它,然後轉到:https://developers.google.com/mobile/add爲我的Android應用程序生成新的google-services.json
文件。
另請注意,RegistrationIntentService
必須位於您的包裝的根部,否則不起作用! (請參閱此示例以適用於Android的gcm實施:https://github.com/google/gcm)
希望這可以幫助某人,因爲我在此失去了日子! > <
如果您正在使用設備進行測試,您需要在獲取令牌和重新測試之前刪除InstanceID,因爲一旦覆蓋APK,它將取消註冊該InstanceId並獲得該NotRegistered錯誤。因此,在您RegisterIntentService類,在onHandleIntent功能做到以下幾點:
InstanceID instanceID = InstanceID.getInstance(this);
try
{
instanceID.deleteInstanceID();
} catch(IOException e)
{
e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
如果你真的覺得你的代碼是正確的,仍然得到錯誤
{"error": "NotRegistered"}
嘗試未安裝的應用程序從手機和手動運行它再次(您的設備將獲得新的註冊ID)。
至少在我的情況下,問題解決了!
在我的情況下,問題也解決了!我嘗試刪除InstanceID並嘗試再次發送請求。但我只卸載應用程序時成功了(並且我沒有像以前一樣嘗試刪除實例ID) – 2017-01-30 23:38:49
當GCM認爲設備無法處理該消息時,會出現Not Registered
。如果發生這種情況的應用被卸載或配置不當處理消息:基於@Samik和@ O'Rilla答案我建議以下步驟
:
- 卸載當前安裝的Android設備
- 確保您有
<receiver>
和<sender>
在<application>
節點AndroidManifest.xml
中定義。 - 請確保您有正確的
<category android:name="COM.COMPANY.YOURAPP" />
在<receiver>
- 確保接收器的實現是正確的
步驟2修復了我的問題 - 這是一個愚蠢的疏忽,但是您的回答是在嘗試幾天後節省時間找到根本原因。謝謝@Roozbeh – 2017-07-14 18:37:16
這意味着只需您都給人一種錯誤的註冊ID。 因此,首先運行您的移動應用程序,您的註冊ID將作爲標記。 將此令牌作爲註冊ID加入您的應用服務器代碼。 對於App ID,提供服務器ID,您可以從Google開發者控制檯,項目和憑據中獲取該ID。 對於發件人ID,請設置您的項目ID,該項目ID可能來自項目,開發者控制檯中的設置。
- 1. Google Android GCM未註冊錯誤
- 2. 錯誤:未註冊 - GCM推送通知
- 3. Android GCM註冊ID錯誤
- 4. GCM'沒有註冊'錯誤
- 5. Android GCM錯誤未註冊多次註冊
- 6. Android GCM錯誤。當客戶端註冊
- 7. 在GCM註冊時出現INVALID_SENDER錯誤
- 8. GCM(Android)和PhoneGap無效註冊錯誤
- 9. GCM返回缺少註冊錯誤
- 10. Android GCM註冊
- 11. GCM註冊ID
- 12. 類未註冊HRESULT錯誤
- 13. Android GCM某些設備未註冊
- 14. Android GCM - 未獲取註冊令牌
- 15. Android GCM註冊ID
- 16. 自動GCM註冊?
- 17. Android GCM註冊ID
- 18. GCM註冊失敗
- 19. GCM註冊令牌是否等於GCM註冊ID?
- 20. 如何註冊gcm從gcm獲得註冊ID
- 21. GCM框架參數和GCM註冊ID
- 22. GCM IOS錯誤 - 註冊到GCM失敗,出現錯誤:操作無法完成。 (com.google.iid錯誤7)
- 23. 什麼是GCM註冊ID?
- 24. 管理GCM註冊ID的
- 25. GCM註冊ID爲空
- 26. Android GCM:空註冊ID
- 27. Android GCM註冊失敗
- 28. Android的GCM註冊設備
- 29. GCM:註冊ID或令牌
- 30. 在後臺註冊到GCM
幾乎不可能幫助你解釋不足。 – 2015-07-22 20:10:04
@ T-D我很抱歉...我已經修復了這個問題,謝謝你的誠意! – LKM 2015-07-25 12:08:07