1. 程式人生 > >iOS的Keychain可以實現App間的資料共享

iOS的Keychain可以實現App間的資料共享

百度的移動端產品,有一點體驗做的非常好。比如你手機裡面新裝了百度雲和百度貼吧,現在登入百度雲,再開啟百度貼吧,會發現雖然之前你從沒登入過貼吧,但這時候竟然用你登入百度雲的賬號自動登入了,省去了你再去登入的步驟。這裡有兩個關鍵點,一是,百度的賬號是全平臺打通的,你的百度雲賬號和貼吧賬號是同一個;二是,iOS平臺的百度雲和貼吧兩個App之間進行了使用者資料共享。第一點不說了,百度的事,跟我們沒關係。想討論的是第二點,我們知道iOS上,利用沙盒機制,App之間是互相隔離的,這保證了安全性,但也很封閉。那如何能實現,在這樣的封閉環境下“翻牆”去連線別的App的資料呢?iOS也考慮到了這點,提供了Keychain!

iOS裝置中的Keychain是一個安全的儲存容器,可以用來為不同應用儲存敏感資訊比如使用者名稱,密碼,網路密碼,認證令牌。蘋果自己用keychain來儲存Wi-Fi網路密碼,VPN憑證等等。它是一個在所有app之外的sqlite資料庫。

Keychain的特點

  1. Keychain會對儲存在其中的資料進行加密(但可能也不絕對安全,越獄手機或許能拿到其中資料);
  2. Keychain是存在與沙盒之外的,當應用刪除之後,app儲存的資料並沒有被刪掉,第二次安裝時只要讀取Keychain裡的資料,即可得到以前儲存的資訊;
  3. 相同Team Id的App可以通過Keychain來共享資料
  4. 獲取裝置唯一標識目前最佳的辦法是IDFV+Keychain組合。IDFV是裝置區別應用提供商的,可以作為應用唯一標示符。但是IDFV缺陷就是當裝置刪除了該所有應用提供商的app之後,IDFV值會發生變化。利用Keychain上面的第2個特點可以解決這個問題。

看到Keychain的第三個特點,也就清楚iOS上如何實現App間的資料共享了。當然了,為了安全考慮,還是有些限制。