2016-01-20 38 views
1

即時得到了相同的應用程序的多個通知所述設備標識的變化..是,如果卸載/重新安裝應用程序的同一設備

如果它改變如何刪除舊的形成我們的服務器..

這裏是我的觀察在IOS 9設備

1.有在DB APPID和設備令牌兩個字段如果我解除停止該應用,然後在同一設備中再次安裝它的設備令牌變化..

2.I測試其他應用在同一個設備中設備令牌不同即使是相同的設備

我得到3通知到同一設備即使如果我刪除了第一個設備令牌之一從我的數據庫...。我還不明白多次通知的原因..

可能的原因是什麼?

+0

@Krishna你能告訴我在簡短你的問題的信息?所以我爲你提供確切的解決方案。 –

+0

@PavanGandhi比方說第一次安裝應用程序(設備令牌插入我們的數據庫)。如果用戶卸載了應用程序,並再次安裝。設備令牌是否更改?如果它的變化如何從我的數據庫中刪除舊的? –

+0

只需按照我提供給您的解決方案,如果遇到任何問題,請通知我 –

回答

0

爲註銷會話創建新的Web服務,並在註銷時調用此服務,並且此服務告訴您的後端開發人員將您的設備令牌從數據庫中移除。

+0

我們可以關閉應用程序內部的自我推送(在註銷時),而不是從服務器中刪除設備令牌。 – Hemang

+0

@Akshay Patel登錄/退出時沒問題。我需要在卸載的情況下,並再次重新安裝應用程序? –

+0

在登錄時覆蓋您的設備令牌.... –

0

@Krishna:設備令牌保持與第一次安裝應用程序並卸載並再次在同一設備上安裝此應用程序相同。

如果您再次使用新設備,則設備令牌將會不同。

注:只需告知後端開發者做以下的事情:

  1. 您使用在數據庫中插入設備的原因,因爲他需要檢查,如果設備令牌是diff和更新新的API。否則只需使用任何通過Web服務。

它的工作很好。

+0

v如何知道它的不同或相同... –

+0

首先需要檢查用戶設備的設備令牌是否存在。 如果不存在,則添加該用戶的設備令牌。 如果存在,則獲取詳細信息並更新其設備標記 –

+0

我們沒有使用UserId進行檢查(即使用戶未登錄,我們需要設備的設備標識)。我只是在我的數據庫檢查 數據庫APPId和設備令牌有兩個字段如果我取消了應用程序的安裝,並且如果再次安裝在同一設備中,設備令牌更改.. –

0

iOS9 and later,設備令牌可能會在每次重新安裝應用程序時更改。所以最好的方法是在每次啓動時存儲(更新或插入數據庫)設備令牌。

0

Device token是在以下條件的變更。

  • 如果用戶將備份數據恢復到新設備。
  • 重新安裝應用程序

所以我的建議是更新與新的令牌服務器。

當每次應用程序在didRegisterForRemoteNotificationsWithDeviceToken中啓動時,如果發生更改,您必須調用更新設備令牌的API。

在您的數據庫中創建另外兩個字段device tokenAPPId所以更新device token相對於APPId

獲取從設備鑰匙扣APPId或唯一的設備ID,並將其與device token對於發送到您的服務器,以便在服務器更新device tokenAPPId

keychain在上述以下條件下,價值永遠不會改變。

爲了得到鑰匙扣值遵循 Keychain

// MARK: - Push Notification Delegate Methods. 
    func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 

     //send this device token to server 

     let token = String(data: deviceToken.base64EncodedData(), encoding: .utf8)?.trimmingCharacters(in: CharacterSet.whitespaces).trimmingCharacters(in: CharacterSet(charactersIn: "<>")) 

     //Save device to UserDefaults 
     let defaults = UserDefaults.standard 
     defaults.set(token, forKey: "DeviceToken") 
     defaults.synchronize() 

     print("token is ---\(token)") 

     print("AppId ----\(getUniqueDeviceIdentifierAsString)") 

     //Send token value and AppId to server 

    } 

    var getUniqueDeviceIdentifierAsString : String { 

     let appname = Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String 

     var strApplicationUUID: String? = KeychainWrapper.standard.string(forKey: appname) 
     if strApplicationUUID == nil { 
      strApplicationUUID = UIDevice.current.identifierForVendor?.uuidString 
      _ = KeychainWrapper.standard.set(strApplicationUUID!, forKey: appname) 
     } 

     return strApplicationUUID! 
    } 
相關問題