3

我正在玩FCM設備組中添加和刪除設備令牌的遊戲,並且我注意到如果我從組中刪除設備,並且即使存在其他設備在該組中,FCM取消notification_key(通過嘗試重新使用相同的密鑰添加新設備來檢測)。這對我來說非常糟糕,因爲這意味着我無法將新設備添加到刪除設備的同一組中,但其他設備仍然存在Firebase雲消息傳遞:Notification_key在多個設備中刪除一個設備時無效

下面是一些代碼以確認此(請填充適當的值):

1.與一個設備創建設備組。

curl -X POST \ 
    https://android.googleapis.com/gcm/notification \ 
    -H 'authorization: key=YOUR_KEY' \ 
    -H 'cache-control: no-cache' \ 
    -H 'content-type: application/json' \ 
    -H 'project_id: YOUR_PROJECT_ID' \ 
    -d '{ 
    "operation": "create", 
    "notification_key_name": "some-group-identifier", 
    "registration_ids": ["device-token-1"] 
}' 

這將返回通知密鑰,我必須將此通知密鑰提供給添加新設備的下一個呼叫。

{ 
    "notification_key": "my-new-notification-key" 
} 

2.將新設備添加到現有組。

curl -X POST \ 
    https://android.googleapis.com/gcm/notification \ 
    -H 'authorization: key=YOUR_KEY' \ 
    -H 'cache-control: no-cache' \ 
    -H 'content-type: application/json' \ 
    -H 'project_id: YOUR_PROJECT_ID' \ 
    -d '{ 
    "operation": "add", 
    "notification_key_name": "some-group-identifier", 
    "notification_key": "my-new-notification-key", 
    "registration_ids": ["device-token-2"] 
}' 

響應與(1)相同。

3.從組中刪除最後一個設備。

curl -X POST \ 
    https://android.googleapis.com/gcm/notification \ 
    -H 'authorization: key=YOUR_KEY' \ 
    -H 'cache-control: no-cache' \ 
    -H 'content-type: application/json' \ 
    -H 'project_id: YOUR_PROJECT_ID' \ 
    -d '{ 
    "operation": "remove", 
    "notification_key_name": "some-group-identifier", 
    "notification_key": "my-new-notification-key", 
    "registration_ids": ["device-token-2"] 
}' 

成功。與(1)和(2)相同。

4.嘗試將新設備添加到同一組。

curl -X POST \ 
    https://android.googleapis.com/gcm/notification \ 
    -H 'authorization: key=YOUR_KEY' \ 
    -H 'cache-control: no-cache' \ 
    -H 'content-type: application/json' \ 
    -H 'project_id: YOUR_PROJECT_ID' \ 
    -d '{ 
    "operation": "add", 
    "notification_key_name": "some-group-identifier", 
    "notification_key": "my-new-notification-key", 
    "registration_ids": ["device-token-3"] 
}' 

失敗。迴應是400,與{"error": "notification_key not found"}。我不禁想到這是一個錯誤?否則,我們預計如何動態調整一組設備的大小?

+0

我試過了你的cURL,一切都按預期工作。請在每次操作之後使用'curl -X POST -H「授權:key = your_key」-H「Content-Type:application/json」-d'{「notification」:{「title」:「Portugal vs. Denmark」 ,「body」:「5:1」,「icon」:「firebase-logo.png」,「click_action」:「http:// localhost:8081」},「to」:「notification_key」}'「https: //fcm.googleapis.com/fcm/send「'以確保令牌已被正確添加/刪除。我用你的cURL命令減去'-H'緩存控制:no-cache''部分。 ps:現在我可以發表評論^^ – MaX

+0

很好,你可以發表評論。 :)爲什麼你認爲需要'https:// fcm.googleapis.com/fcm/send'?這對我來說不是一個很好的選擇,因爲系統是實時的並且可能處理許多設備,所以這是我不想做的額外網絡旅行。 –

+0

而緩存控制應該不會對此產生任何影響,如果確實如此,那我認爲這是一個全新的問題。 –

回答

0

事實證明,我使用的registration_ids來自同一個chrome應用程序,即使我改變了chrome應用程序的代碼時,也認爲這會使它看起來像一個新應用程序。

只有在創建了三次chrome擴展併爲每個FCM生成了一個registration_id之後,纔開始將它們作爲單獨的應用程序處理。之後,這一切都完美。

感謝@MaX的幫助。

+0

很高興你解決!雖然我仍然很好奇你會在添加兩個標記後通知組,如果是1或2,那麼成功的次數。儘管如此,乾杯 – MaX

+0

我得到1當它的一個設備,然後2當它的兩個設備,然後再一個我刪除一個。都很好。 :d –

相關問題