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 則留言:

welltend 提到...

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

piggy 提到...

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

welltend 提到...

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

piggy 提到...

@welltend:包好了,去這個路徑下載吧 Download Link

Unknown 提到...
作者已經移除這則留言。
welltend 提到...

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

piggy 提到...

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

welltend 提到...

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

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

welltend 提到...

我的模擬器出現

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非常簡略...對於新手的我很難懂....

piggy 提到...

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

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

welltend 提到...

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

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

piggy 提到...

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