2016-12-30 150 views
2

的情況是這樣的:如果設備令牌更改,如何將推送通知發送到多個設備(屬於一個用戶)?

  1. 用戶登錄到他們的iPhone上
  2. 用戶登錄應用程序中使用iPhone B上的相同的應用程序現在

,在數據庫,一個用戶有2個令牌,這是正確的。

+---------+-------------------+ 
| user_id | device_token | 
+---------+-------------------+ 
|  1 | 1st_device_token1 | 
|  1 | 2nd_device_token1 | 
+---------+-------------------+ 

說,該用戶刪除的應用程序,再次安裝它(在兩個設備上),這意味着,在APN的令牌改變,因此在我們的數據庫中,有4個獨特的標記。

+---------+-----------------------+ 
| user_id |  device_token  | 
+---------+-----------------------+ 
|  1 | 1st_device_token1  | 
|  1 | 2nd_device_token1  | 
|  1 | 1st_device_token1_new | 
|  1 | 2nd_device_token1_new | 
+---------+-----------------------+ 

現在,該用戶的推送通知將被髮送到4個設備(4個令牌)。 如果他們繼續刪除和安裝應用程序(可能會發生:)),我會在數據庫中爲一個用戶提供大量令牌,並認爲他們擁有如此衆多的設備,而實際上,有一個很多無效的令牌。

如何防止?

+0

來自推送服務器的反饋信息從來都不是很好,但我認爲它現在已經有了很大的改進。您是否檢查了最新文檔,瞭解當您發送推送時服務器返回的信息是否包含推送令牌是否無效或推送無法送達的信息?但無論如何,這不是一個邊緣案例。雖然它可能,誰實際上要刪除和重新安裝應用程序很多次,它會導致數據庫中的「大量」條目? – Gruntcakes

回答

0

Pushwoosh定期從無效標記中清除其數據庫(每天大約一次),因此擁有「大量」條目應該不成問題。至於發送推送到一個用戶的多個設備,這種情況下有一個特定的Push by UserID功能。

的想法是設置一個登錄事件特定的用戶名,並重新設置爲默認值在以下方法註銷:

[[PushNotificationManager pushManager] setUserId:@「external_user_1」] 

一旦用戶名設置,你可以發送你/的CreateMessage API具有「用戶」參數的請求:

{ 
    "request": { 
    "application": "APPLICATION_CODE", 
    "auth": "API_ACCESS_TOKEN", 
    "notifications": [{ 
     "send_date": "now", 
     "content": "Hello world!", 
     "users":["external_user_1"] 
    }] 
    } 
} 

此功能適用於所有付款計劃,因此應可供您訪問。

相關問題