自從公司使用Aws發布推播後, 一直收到重複的push
但怎麼查都找不到原因
直到2/2號那天決定跟他死嗑才找到原因
這個坑真的很大,大到悲劇啊
在SNS的application中,時常看到重複的token,
這個才是android 一直收到重複push的原因
但是,我們end端已經有做token的比對了
讓server收到的token與資料庫比對, 若無資料便會新增
但是加入此方法後,還是會出現收到重複的push.
怎麼想都覺得是 aws 與 gcm之間發生了什麼事情才會導致這樣的情況
經過測試,發現重複的token大多都發生在測試裝置上面
且還是較常出現在直接run安裝/清除資料的手機上.
從這邊想,否是因為token更新所以才造成這樣的情況嗎?
為了驗證這個,我去查了APP移除後,token是否會失效的問題.
爬了許多文Android 使用 GCM(Google Cloud Messaging) , Registering Client Apps
裡頭寫道,當APP移除時,系統會通知gcm,並把該id給註銷掉(unregister)
經過實驗,也證實id會失效
透過下列方式驗證
https://android.googleapis.com/gcm/send
其回傳值 為包含 error的json訊息,
那就剩下更新token的時機了,
我呼叫Gcm的時機為,Application的時候,也就是開啟app的瞬間,
依據內存資料判斷是否去註冊gcm並取得id
也就是說 重複token的觸發點就是,內存被清除後,再去註冊
利用這個想法,我拿舊的token去比對sns上的紀錄
sns application 的欄位如下:
token, arn, user_data, enable
我們在上傳至aws時,token與user_data內容是一樣
不過當有出現重複token的時候, 資料卻不一樣
一直想不透,後面的user_data為什麼會被更改
原來答案是
不是user_data被更改,而是token這欄位被更改才對
那就一定是因為gcm跟aws說了什麼,才會更改該欄位的!!
依照這個想法
我針對舊token發了一次push, 其結果如下:
當我設定傳給就token
"APA91bHWoGmQ4jtqgFuZwL7vheKwv9DR8IzSc8pL6PURW3a25GxUqQjKTeLTJo-Vsgg3_meLHWDat6sgdzKdiTtbNXL103xRed6wJm-DOFInSof0N1gw72k"
其GCM回傳, 該裝置最新的token
"APA91bGzX8HGlu5AOL_Ncv05mT3NJ5pahZ5IY6cD8GzEdJ5JABENcHaeEiqfPHCqYm3oKSYqQiGKpzZ9T52O_MQpcNnzH7yXS9KriEXXXXXXXXXXXXXXX"
AWS收到gcm回傳值後,便更新該筆資料中的token資料,這才是一直發生重複push的主要原因啊
真的是大坑
至於怎麼處理, 之後再補上囉
