[iOS]如何使用Keychain

由於蘋果對於使用者的隱私像當重視, 因此iOS 5以後對於許多用來取得裝置的唯一值的API例如:IP_Address, Mac, IMEI等等都漸漸列為禁止使用, 直到iOS9問世後對於安全機制的設計也更加嚴謹.


於是 當我們需要取得這些資料時, iOS的限制簡直讓人抓狂呀!!為什麼在Android平台可以輕易取得的資料到了iOS竟然像是在破解金庫密碼一樣的困難重重呀!!

米羅我為此頭疼不已的時候, 偶然發現了一線曙光, 原來蘋果還替我們留了一條唯一的生路這個東西叫做UUID, 這個數值在每支手機上取得的資料都不一樣.(PS:有消息指出未來可能連UUID都會封殺掉!NO~)


話不多說了先來貼上取得UUID的程式碼唄




透過這樣簡單的一行程式碼我們就可以簡單取得UUID的資料, 正當米羅以為一切問題終於迎刃而解的時候, 卻發現了一件事情讓米羅猶如五雷轟頂般的驚嚇不已!!!


原來UUID雖然是唯一值但是卻不是手機的唯一值, 而是APP創建時所產的一組認證編碼, 也就是說一般來講只要使用者更新或刪除APP那麼每一次取得的UUID就是不相同的, 登愣~~這是什麼鬼呀!?竟然還有這個坑爹的玩意是想摔死所有開發者是吧, 瞬間髒話全部梗在喉嚨(在公司還是要注重形象的...汗)差點呼嘯而出呀, 可惡的蘋果呀!!老子跟你拼了

於是米羅我不死心再次拜請萬能的谷歌大神出來助陣, 在廣闊無邊的資訊苦海中, 經過了幾天的尋訪終於知道了一個秘密的終極武器他就是 KeyChain!!! 為什麼要使用KeyChain不是有NSUserDefault可以用嗎!?這個問題...問得好 米羅在此簡單地告訴你 所謂NSUserDefault他是類似Android的SharedPreferences, 專門用來儲存我們想透過程式存放在手機的資料, BUT!!!它只是儲存而已, 一旦使用者手癢還是手指頭扭到將我們辛苦撰寫的APP抹掉!!它就GG惹(不要問我什麼意思 乖~自己去查嘿) 也就是說NSUserDefault不是一個可靠的存在呀.


說了一堆廢話(不要扁我), 接下來米羅就要告訴大家為什麼要使用KeyChain來儲存資料了
所謂 KeyChain 顧名思義就是鑰匙圈的意思, 身為iOS的開發者應該對這個名詞都不陌生
沒錯!!這是我們要成為iOS的初心者之前一定會遇上的一個功能, 其實不止開發者會用到很多使用者其實也常常在無意之間被它或多或少的騷擾了好幾次, 這裡就不費心解釋了

總之它的功能基本上就是蘋果系統用來儲存一些加密資料用的, 在iOS上當然也不會少了它嚕
而且還有好心的使用者將它寫成一個套件, 也就是說登愣~可以不用自己慢慢刻 OH~YEH

這個套件的名字就叫做SwiftKeyChainWrapper 現在已更新支援到Swift 2.0 不囉唆立即奉上連結給大家 https://github.com/jrendel/SwiftKeychainWrapper

使用方法如下首先創建一個專案

























接下來點擊上方Github連結並將下載下來的檔案解壓縮會看到長這樣














將裡面的SwiftKeyChainWrapper.swift拖拉到你的專案底下 像這樣















































接下來我們就開始寫程式碼嚕, 一樣不囉唆立即貼上吧 像這樣

























經過測試只要註解掉儲存UUID的程式碼, 不管是刪除還是更新APP都可以從KeyChain裡面重新取得資料哦

要刪除的話請用 這一行程式碼






嘿嘿 看到了 終於!!米羅心中的大石頭放下了 分享給大家

如要轉載請註明出處

以上程式碼相關資料參考來源
http://swiftdeveloperblog.com/ios-keychain-example-in-swift/
https://github.com/jrendel/SwiftKeychainWrapper




































留言

這個網誌中的熱門文章

[Android] Android Studio 修改PackageName 和專案資料結構

[Kotlin筆記]Java和Kotlin語法比較(打印訊息print、Log、變數宣告)

[Android]ADB指令大全-錯誤排解-could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: