利用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"];
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值