天天看點

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

keychain的作用:

keychain,相當于MAC OS中的鑰匙串,但在iOS中相對于功能非常簡單.在iOS開發中如果寫資料到手機沙盒中,但不管是Caches 還是NSUserDefaults 當應用删除時所有資料都會清除.如果你想在應用删除後還儲存一些資訊在手機裡,這時就要用過keychain了.#import //keychain 管理的類

keychain的使用一(原生):

如果使用apple自帶操作有以下四個 (增删改查)方法 C語言的OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result);

OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef *result);

KeyChain中的ItemOSStatus SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate);

KeyChain中的ItemOSStatus SecItemDelete(CFDictionaryRef query)

keychain的使用二(三方架構 KeychainItemWrapper):

KeychainItemWrapper  就兩個檔案(KeychainItemWrapper.h  KeychainItemWrapper.m) 蘋果開發者中心可以下載下傳

下載下傳位址:KeychainItemWrapper 封裝好的OC面向對象.但是代碼是MRC的,搞起來不友善,是以沒有仔細研究.有興趣的可以自已去研究下功能還是挺多的.

keychain的使用三(三方架構 SFHFKeychainUtils)

相對于 KeychainItemWrapper 使用起來很友善 ,而且還是ARC的

如下提供四個方法:+ (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;

+ (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;

+ (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;

+ (BOOL) purgeItemsForServiceName:(NSString *) serviceName error: (NSError **) error;

儲存:

通過.userName serviceName 儲存一個密碼self.userName = @"[email protected]";

self.userPassword = @"1234567890";

self.serviceName = @"space.kylin.www";

NSError *error;

BOOL saved = [SFHFKeychainUtils storeUsername:self.userName andPassword:self.userPassword

forServiceName:self.serviceName updateExisting:YES error:&error];

讀取:

通過.userName serviceName 讀取一個密碼_label.text = [SFHFKeychainUtils getPasswordForUsername:self.userName andServiceName:self.serviceName error:nil];

删除:

userName serviceName 删除一個密碼[SFHFKeychainUtils deleteItemForUsername:self.userName andServiceName:self.serviceName error:nil];

清空:

通過一個serviceName清空裡面所有資料[SFHFKeychainUtils purgeItemsForServiceName:self.serviceName error:nil];

通過keychain我們可以做到儲存一資料到手機,不管手機是否删除了該應用.或者系統更新了.我們儲存的資料都不會丢失

APP之間如何共享keychain資料

以下操作   請在真機上進行調試

之前檢視了網上相關的資料,發現并沒有完整且簡單的方法.有些就文字描述了下,有些配了圖.但方法是舊的現在也用不了.搞了半天也沒有搞定.後天自已看了蘋果的開發文檔,蘋果開發文檔寫的也比較簡單.并沒有一步一步列舉出來.結合了之前網上一些資料加入蘋果開發文檔内容,再通過自己的驗證終于成功了!

首先他建一個工程 :saveKeyChain 打開target

在keychain Groups 裡添加你要分享的另一個APP的bundle ID

格式為 XXXXX.com.kylin610.www.另一個工程名  其中 XXXXX 是的你開發者ID (不是apple ID的登陸名哦) 如:123456RVYVD

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

實際上當你打開keychain Sharing 裡project會多出一下檔案

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

打開一看如下 實作就是一個PLIST檔案 這裡儲存你你需要分享APP的bundle ID 也就是上面keychain Groups 裡面的資訊.兩個地方都可以管理,是以你有多個APP裡隻要在這裡進行設定添加就可以了.

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

運作工程寫入一個密碼 1234567890 到keychain裡

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

點選删除與清空後可清除相關内容  點選讀取來檢查是否删除成功!

如果運作出錯如下圖:

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

這是因為你的在keychain groups裡填寫其它的APP bundle ID格式有誤  或者 開發者ID填錯了

其它APP怎麼使用keychain裡面的資料:

首先建立一個工程 getKeyChain 為 :bundle ID為之前工程 keychain Groups 裡的添加的當然開發者ID還是同一個

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

在新工程使用SFHFKeychainUtils 讀取和删除 keychain 裡面資料self.userName = @"[email protected]";

self.serviceName = @"space.kylin.www";

_label.text = [SFHFKeychainUtils getPasswordForUsername:self.userName andServiceName:self.serviceName error:nil];

這裡的serviceName ,userName 要與之前儲存是一緻的

如果要删除可執行[SFHFKeychainUtils deleteItemForUsername:self.userName andServiceName:self.serviceName error:nil];

讀取結果:

安卓設定keychain_iOS 開發keychain 使用與多個APP之間共享keychain資料的使用

最新更新代碼 相容 xcode 7打開工程