指尖世界

分享的乐趣

利用KeyChain共享数据(唯一标示) 利用KeyChain共享数据(唯一标示)

类别: 动态 更新时间: 2017-09-14

利用KeyChain共享数据(唯一标示)

下载KeychainItemWrapper

  • 官方demo
    https://developer.apple.com/library/ios/samplecode/GenericKeychain/GenericKeychain.zip

  • 导入KeychainItemWrapper
    在项目中导入KeychainItemWrapper,添加Security.framework库。

  • 设置KeychainItemWrapper为非arc
    TARGETS —> Build Phases —> Compile Sources
    标记KeychainItemWrapper为:-fno-objc-arc


添加配置

添加配置有两种,可以添加plist文件或者添加entitlements文件。

  • 添加plist文件

以下为官方demo的plist详情:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict>     <key>keychain-access-groups</key>     <array>         <string>YOUR_APP_ID_HERE.com.yourcompany.GenericKeychain</string>         <string>YOUR_APP_ID_HERE.com.yourcompany.GenericKeychainSuite</string>     </array> </dict> </plist>

可从官方demo中看出内容格式为
YOUR_APP_ID_HERE.com.yourcompany.GenericKeychain
例如:$(AppIdentifierPrefix)com.yourcompany.xxx
配置多个可在这些APP中共享数据。

TARGETS —> Build Settings —> Code Signing Entitlements
配置Entitlements:$(SRCROOT)/plist在项目中绝对位置/xxxx.plist
例如:$(SRCROOT)/keychain/KeychainAccessGroups.plist

  • 添加entitlements文件
    TARGETS —> Capabilities —> Keychain Sharing
    设置Keychain Sharing状态为on
    添加Keychain Groups:com.yourcompany.xxx

设置唯一标示

假设以IDFV作为标示,利用KeyChain可以保证卸载以后仍是原IDFV,实现唯一标示。
可以实现多APP使用统一唯一标示。

+(NSString *)getIDFV {     KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"IDFV" accessGroup:nil];     NSString *strIDFV = [keychainItem objectForKey:(id)CFBridgingRelease(kSecValueData)];     if (strIDFV.length == 0)     {         strIDFV = [[[UIDevice currentDevice] identifierForVendor] UUIDString];         [keychainItem setObject:strIDFV forKey:(id)CFBridgingRelease(kSecValueData)];     }     return strIDFV; }