Android之GCMRegistrar拋錯:retry receiver class not set yet

最近要透過GCM作推播,Server推我想先暫時寫死~直接指定訊息到我的emulator,因此要先取得該emulator的Registration Id

無論是取得Sender Id或App裡的Mainfest.xml設定...等,都按照官方作法。
無奈一值拋錯internal error: retry receiver class not set yet
(PS:該錯誤可藉由LogCat的 by Log Tag為"GCMRegistrar,快速找到)

後來找到一篇篇幅雖短卻很有用的文章,解決了我的問題
參考文章:Android GCM, Retry Receiver Class Not Set Yet
文章主要是說~~這是gcm.jar的bug,Google方面雖已解決,但還沒release為正式版本讓user直接安裝,所以要使用較新的gcm.jar要自己去下載

1.開啟下列網址,點右側的"gcm.jar"連結

2.點擊右下角的""View raw file"",下載最新的gcm.jar

3.把下載回來的gcm.jar放到你的App專案下的libs

4.重Build一次,錯誤retry receiver class not set yet不再出現,也成功取得emulator的RegistrationId

12 則留言:

  1. 大大您好:
    我也出現了
    internal error: retry receiver class not set yet
    的問題,可是您分享的連結已找不到gcm.jar這檔可下載,請問還有其他的解法嗎?

    回覆刪除
  2. @welltend: 應該是這個gcm範例專案不再用gcm.jar了,我看他改放在這個路徑Download Link 你試試看,不行的話,我上傳一版我測過OK的給你用

    回覆刪除
  3. piggy大大:
    我剛試了還是不行耶@@
    可否麻煩您分享你測過OK的~"~?
    我的mail: annlin1989@gmail.com
    感謝您

    回覆刪除
  4. @welltend:包好了,去這個路徑下載吧 Download Link

    回覆刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. piggy大大:
    不好意思,我想請教一下
    我是使用C:\...\extras\google\gcm\samples\gcm-demo-client 這個google的Demo檔
    之前第一次用模擬器run的起來,可以接收到web service,但再一次測試時,沒更改任何code卻run不起來,不曉得您說的 應該是這個gcm範例專案不再用gcm.jar了 ,那請問是GCM本身又換個方式了嗎?
    抱歉...我算個新手...無suport的摸索這個...
    懇請賜教>"<謝謝

    回覆刪除
  7. @welltend:web service的部分是你自己架設的嗎? 如果不是,那就有可能是service端不在提供你推播的服務。
    如果是你自己架設的,但service和client都沒改code的話,有種可能會讓你的模擬器接收不到~~就是Regid過期了

    回覆刪除
  8. 好像是Regid過期了~"~
    因為我用上星期申請的去試就不會跳出internal error: retry receiver class not set yet

    web service的部分
    是想用C# .net寫,但去找到一些大大寫的,看了還是不解~"~
    寫的2266的....
    請問大大可否給個參考點,讓我試試看>"<

    回覆刪除
  9. 我的模擬器出現

    trying(attempt1/5)to register device on Demo Server.
    trying(attempt2/5)to register device on Demo Server.
    .
    .
    .
    trying(attempt5/5)to register device on Demo Server.
    Could not register device on Demo Server after5attempts.
    From GCM:device successfully unregistered

    以上這些訊息,官方的試用tomcat,但我不會用~"~
    去找到1.2個web service,但都無法照著試成功,他們都用的有點複雜...不然就是PO上去的code非常簡略...對於新手的我很難懂....

    回覆刪除
  10. @welltend:看你的錯誤訊息,應該是有照gogole的demo來寫,一旦RegId過期就重新向Server註冊,這邊是對的。

    但你之前說Server不是你架設的,那我可能就建議你使用網路上一套好用的推播【PushSharp】,是個外國人寫的,網路上也有些教學文章,你可以search看看,這個推播的專案是用C#寫的,適合你使用。
    PushSharp的專案路徑https://github.com/Redth/PushSharp

    回覆刪除
  11. 抱歉,剛看了一下,
    這個連結的檔案好多,想請問例如 PushSharp / PushSharp.Android /這樣就表示同一專案嗎?
    是指關於GCM他全都是用C#寫的而沒寫到android app部分嗎?還是這是server端而已??

    真是抱歉~"~
    看著看著有點搞糊塗了.....
    感謝您耐心回復我>"<

    回覆刪除
  12. @welltend:你用這個應該就夠了https://github.com/Redth/PushSharp/tree/master/PushSharp.Sample
    PushSharp裡面有很多專案,我並沒有都試過,當然他也是有client端的,建議你用上述的Sample專案(都是C# Code),即可自己架設一個推播中心,client則使用你本來就寫好的android專案來收訊息

    回覆刪除