回答
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. 錯誤:未註冊 - GCM推送通知
- 2. GCM返回缺少註冊錯誤
- 3. GCM(Android)和PhoneGap無效註冊錯誤
- 4. GCM註冊ID
- 5. Android GCM某些設備未註冊
- 6. Android GCM - 未獲取註冊令牌
- 7. GCM註冊失敗
- 8. 如何註冊gcm從gcm獲得註冊ID
- 9. GCM註冊令牌是否等於GCM註冊ID?
- 10. GCM框架參數和GCM註冊ID
- 11. GCM IOS錯誤 - 註冊到GCM失敗,出現錯誤:操作無法完成。 (com.google.iid錯誤7)
- 12. GCM:註冊ID或令牌
- 13. 什麼是GCM註冊ID?
- 14. GCM註冊ID爲空
- 15. Android GCM:空註冊ID
- 16. 錯誤:使用asp.net在GCM中丟失註冊
- 17. AngularJS錯誤:[$ controller:ctrlreg]控制器未註冊
- 18. Microsoft.ACE.OLEDB.12.0尚未註冊「錯誤
- 19. OpenDDS錯誤transport_type = TCP未註冊:(
- 20. 類未註冊錯誤VB.NET 2008
- 21. Parse.com Rest Api - 註冊 - 錯誤:「未授權」
- 22. AxAcroPDF - Vista64類未註冊錯誤
- 23. ffmpeginterop.uwp庫給錯誤的未註冊
- 24. `QuickPDFAX0726.PDFLibrary':未註冊的類'錯誤
- 25. 「觀察家......未註冊」的錯誤
- 26. Erlang註冊錯誤
- 27. PERL錯誤:的Win32 :: OLE 0.1709)0x80040154錯誤: 「未註冊的類」
- 28. 註冊 - 從Android GCM取消註冊設備
- 29. Android GCM「未註冊」雖然getRegistrationId返回ID
- 30. Android GCM註冊失敗。爲什麼?
幾乎不可能幫助你解釋不足。 – 2015-07-22 20:10:04
@ T-D我很抱歉...我已經修復了這個問題,謝謝你的誠意! – LKM 2015-07-25 12:08:07