2017-10-18 101 views
0

好像我發現的所有其他信息都過時了。 考慮一名擁有iPhone和iPad的用戶,並且每臺設備上都安裝了相同的應用程序。首次從每個設備登錄時,唯一設備令牌將被放置在數據庫中以用於將來的通知。下面是我用的AppDelegate獲得設備令牌的方法:當同一用戶使用多個設備時APNs設備令牌更新

- (void)application:(UIApplication*)application 
didRegisterForRemoteNotificationsWithDeviceToken(NSData*)deviceToken 
    { 
    [[NSUserDefaults standardUserDefaults] setValue:deviceToken forKey:@"token"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 

...這樣以後我可以在登錄過程中使用它。

現在,如果由於某種原因應用程序被卸載並重新安裝,或者iOS更新後,設備令牌將會不同,我必須更新數據庫中的記錄。

如果我不得不處理每個用戶只有一個設備,那麼我會按用戶ID去刪除以前的記錄並插入新的記錄。但是,如果有多個設備......我如何確定要更新哪個數據庫記錄,哪個令牌不再被使用?

是否有一些獨特的設備ID永遠不會改變?

回答

0

每次啓動應用程序時,更新的設備令牌都將採用您用來存儲設備令牌的相同方法。所以你可以只使用邏輯來保存和更新令牌。

您將當前令牌存儲在UserDefaults中,因此只需從數據庫中首先刪除該令牌,然後更新新令牌。 您可以使用您保存令牌的相同方法執行此操作。爲此,每次必須檢查當前設備令牌是否在數據庫中?如果是,則將其刪除並更新爲用戶標識。如果不是,只需將這一個保存在用戶ID的數據庫中。

+0

不,如果我卸載並重新安裝應用程序,它不會以這種方式工作。 UserDefaults將爲空。但舊的令牌仍然在數據庫中。 – ekashking

+0

您可以嘗試在用戶第一次登錄時刪除每個令牌,並且每次啓動應用時都應更新其他設備的令牌。雖然有一個問題,但在設備令牌被刪除並且設備仍處於活動狀態的短時間內,您將無法在短時間內發送通知。 –