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

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

下载KeychainItemWrapper


添加配置

添加配置有两种,可以添加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使用统一唯一标示。
发现KeychainItemWrapper默认初始化的类型为NSDictionary,故改为使用NSDictionary。

+(NSString *)getIDFV
{
    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"IDFV" accessGroup:nil];
    id dicIDFV = [keychainItem objectForKey:(id)CFBridgingRelease(kSecValueData)];
    if (![dicIDFV isKindOfClass:[NSDictionary class]] && !dicIDFV[@"IDFV"]) {
        NSString *strIDFV = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        dicIDFV = [NSDictionary dictionaryWithObject:strIDFV forKey:@"IDFV"];
        [keychainItem setObject:dicIDFV forKey:(id)CFBridgingRelease(kSecValueData)];

    }
    return dicIDFV[@"IDFV"];
}

猜你喜欢

转载自blog.csdn.net/a184251289/article/details/50500299