自從公司使用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的主要原因啊

真的是大坑

至於怎麼處理, 之後再補上囉

文章標籤
全站熱搜
創作者介紹
創作者 Owen Chen 的頭像
Owen Chen

歐文的BLOG

Owen Chen 發表在 痞客邦 留言(0) 人氣(1,204)