1

我在FCM(或之前的GCM)中生成的令牌存在問題。從GCM遷移到FCM。在設備上生成的新令牌似乎仍然有效

我們剛剛從GCM遷移到我們的Android應用中的FCM,並且所有用戶在更新後似乎都會在應用啓動時生成新令牌。 這會導致som麻煩,因爲我們將服務器上的令牌存儲在服務器上供用戶使用所有設備,並且由於我們在遷移時獲得了新令牌,因此將該令牌存儲爲特定用戶的新設備。

的問題是,舊的GCM令牌似乎仍然是工作,現在所有的用戶都得到雙重推送通知到同一個設備..

下面是一個使用案例:

  1. 用戶安裝的應用程序1個手機和1片(應用的GCM版本) 服務器現在包含這些令牌用戶:

片劑:evWLQAq2yXw:APA91bH4GlHPSi [...]

電話:fnLVyZy_ICE:APA91bHopxcL1ckHl [...]

  • 用戶升級到新的版本在電話(FCM版本應用程序,其生成新的令牌的) 服務器現在包含這些標記爲用戶:
  • 片劑:evWLQAq2yXw:APA91bH4GlHPSi [...]

    電話:fnLVyZy_ICE:APA91bHopxcL1ckHl [...]

    電話:fnLVyZy_ICE:CTVj02MDxjZq7rIYSi [...]

  • 服務器推送通知和用戶現在得到1平板電腦通知和手機通話2。
  • 應該如何來處理呢?我不能是唯一一個與此問題

    從我們的服務器FCM(https://fcm.googleapis.com/fcm/send)發佈通知,當我從谷歌得到的迴應是這樣的:

    { 
        "multicast_id": 8013823232923765460, 
        "success": 1, 
        "failure": 0, 
        "canonical_ids": 0, 
        "results": [ 
        { 
         "message_id": "0:1482923896059583%2bb227d2f9fd7ecd" 
        } 
        ] 
    } 
    

    上述這種反應同時適用於舊的GCM令牌和新的FCM令牌。響應中沒有設置錯誤和canonical_ids,因此我們的服務器可能會進行相應的更新。

    +0

    我想知道爲什麼你爲一個設備保留幾個令牌。誠然,即使令牌更新,舊的令牌也會有效。但在我看來,你可以更新設備令牌而不是跟蹤令牌,對嗎? – Merka

    +0

    我們爲用戶保存多個令牌的原因是他或她可能在多個設備上擁有應用@AkramShokri。當服務器發送推送並從GCM/FCM獲取無效令牌時,它將從數據庫中刪除它。我確信GCM生成的GCM會在用戶在FCM中生成新的推送後發送的第一次推送時無效,但事實並非如此。 – korrekorre

    +0

    你有沒有解決這個問題?我們遇到同樣的問題。我們將GCM更新爲FCM,但我們也更改了google項目,現在看起來舊項目中的舊GCM令牌仍然有效。 – Xzya

    回答

    1

    您可以讓客戶端(app)的邏輯發送舊令牌和新令牌,以便在服務器數據庫中進行更新。

    FCM令牌有時會刷新,即使這樣舊的令牌也會在某個時間有效。

    我們已經實現了這個網絡通知,它工作正常。

    1

    你是不是唯一一個遇到此。我也遇到了同樣的問題,其中有1個設備有2個有效的通知ID(1個來自GCM,1個來自FCM)。用戶將得到雙重通知。

    我正在做的一種方法是通過檢查我自己的應用程序設置中的一些默認參數來檢測全新安裝。這將取決於應用程序,可能不是傻瓜。

    0

    實際上,您不必存儲gcm令牌,只需存儲fcm令牌。

    FCM仍與GCM兼容,看到這是它的核心。因此,在發送通知時切換到FCM端點(https://fcm.googleapis.com/fcm/send)應仍適用於具有GCM的應用程序版本。無需編寫單獨的程序。

    所以如果你遷移並存儲新的fcm令牌,它將起作用,它對我很有用。