2015年10月29日 星期四

iOS 開發:取得設備唯一識別值

取得 iOS 設備唯一識別值的方式,在 iOS 7 以後只剩下三種:
  • UIDevice::identifierForVendor
  • ASIdentifierManager::advertisingIdentifier
  •  蘋果官方 APNS 訊息推送服務 (Apple Push Notification Service) 上面的 deviceToken 值
以往在 iOS 6 以前透過 WiFi / 藍芽等 API 可以取得 MAC 位置值來識別設備的方式已經被蘋果在 iOS 7 以後改為只能取得固定值 02:00:00:00:00:00:00:00 而失去了識別設備的效果。不過這三種值的取得方式都各自有它的限制在,以下先講後兩種。

要用 ASIdentifierManager::advertisingIdentifier 這個值的限制是:
  • 必須要在 App 裡面有用到廣告機制的時候才可以使用這個值,不然蘋果在審核 App 的時候是會把 App 退回的。
  • 使用者可以在 iOS 設備上強制把這個值重新設成新的值;使用者重設這個值之後,在你的 App 被關掉重啟之後這個值才會抓到這個新的值。
  • 使用者如果把 iOS 設備重置成出廠狀態的話,這個值也會變成新的值。
而第三種 蘋果官方 APNS 訊息推送服務 (Apple Push Notification Service) 上面的 deviceToken 值也是跟 ASIdentifierManager::advertisingIdentifer 一樣要有用到 App 訊息推送服務的時候才能用,沒有用到 App 訊息推送服務的話也是不能用這個值的;iOS 設備被重置成出廠狀態之後這個值也是會被重設成新的值的。

現在在 iOS App 開發上蘋果官方是建議 App 開發者使用 UIDevice::identifierForVendor 來識別使用者的設備,但是要使用這個值也是有限制的:如果你有多個 App 透過同一個開發者 Team ID 發佈並被安裝在同一台 iOS 設備上時,只要你任何一個 App 都沒有被使用者移除的話,這個 identifierForVendor 的值是不會變的;如果你的所有 App 都被使用者移除了,或是 iOS 設備被重置成出廠狀態的話,在下次使用者把你的 App 安裝回來的時候這個值就會變成新的值了。

如果有 App 開發者需要取得 iOS 設備上唯一的識別值的話,要多注意這幾項限制喔! ;)

參考資料: