在一个公司中可能有多款产品。对于用户而言,一般使用一个帐号就可以登陆访问该公司的所有的产品。对于这种情况,如果一款手机中装了该公司的两款(或多款)产品,那么我们希望只在其中一款产品中登陆,那么另一款产品中就会获取到帐号密码,从而进行自动登陆。对于iOS端来说,我们可以借助Keychain来实现了。
1.首先是做到可以利用苹果提供的API将一些密码等敏感的数据保存到钥匙串中。

将一条或者多条信息保存到钥匙串:

OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef  _Nullable *result);

第一个参数是一个属性字典,这些字典包含一些特定的键和值等,例如:

[@{(__bridge id)kSecClass            : (__bridge id)kSecClassGenericPassword,(__bridge id)kSecAttrAccessible   : (__bridge id)kSecAttrAccessibleAfterFirstUnlock} mutableCopy];

其中kSecClass是必须包含的,是指搜索的类型,后面的Value用于指定具体的搜索类型。共有5种可选的类型。分别是:

//1.普通的密码类型
kSecClassGenericPassword
//2.互联网密码类型
kSecClassInternetPassword
//3.证书类型
kSecClassCertificate
//4.加密的键类型
kSecClassKey
//5.身份类型
kSecClassIdentity

这5种类型我们可以根据应用的不同场景进行选择。
如果想同时添加多条数据,可以kSecUseItemList作为键,以一个数组作为作为值。
如果需要多应用间共享Keychian中的数据,需要在这个属性字典中包含以kSecAttrAccessGroup 为键,值为应用程序间共享的钥匙串组名字。

2.添加和配置kSecAttrAccessGroup。
在程序中添加kSecAttrAccessGroup,其实就是配置SecItemAdd函数其中的字典参数。
代码如下:

//保存键值到钥匙串中
+ (BOOL)cacheValue:(id)value forKey:(NSString *)key {NSMutableDictionary *keychainQuery = [self getKeychainQuery:key];[keychainQuery setObject:accessGroupItem forKey:(id)kSecAttrAccessGroup];//删除之前的键值[self deleteCacheValueForKey:key];[keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:value] forKey:(__bridge id)kSecValueData];OSStatus result = SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL);return CHECK_OSSTATUS_ERROR(result);
}//该函数是配置字典属性参数
+ (NSMutableDictionary *)getKeychainQuery:(NSString *)key {return [@{(__bridge id)kSecClass            : (__bridge id)kSecClassGenericPassword,(__bridge id)kSecAttrService      : key,(__bridge id)kSecAttrAccount      : key,(__bridge id)kSecAttrAccessible   : (__bridge id)kSecAttrAccessibleAfterFirstUnlock} mutableCopy];
}

下面说一下配置。配置也非常简单。
首先新建一个plist文件。例如: keychain-access-groups.plist。该文件中的配置如下图:

其中item0中的值,需要注意以下,这里需要换成你的开发者Developer Team ID,后面可以加一些BundleID的公共部分。这个值在多个应用中名字应该是一样的,代表属于一个组。
然后,你需要在Build Settings的Code Siging Entitlements中引用这个文件。例如像下面这样。

到这里就配置好了。
完整代码可以参考下面的这个。
https://github.com/wenyc/YCKeyChainCacheTool

iOS Keychain钥匙串应用间数据共享相关推荐

  1. iOS Keychain(钥匙串)原理及使用

    Keychain介绍 Keychain Services 是 macOS 和 iOS 都提供一种安全的存储敏感信息的工具,比如,网络密码:用户访问服务器或者网站,通用密码:用来保存应用程序或者数据库密 ...

  2. uni-app KeyChain(钥匙串),保存的信息不会因App被删除而丢失(ios)

    uni-app KeyChain(钥匙串),保存的信息不会因App被删除而丢失(ios):https://ext.dcloud.net.cn/plugin?id=3708

  3. 进程间数据传递:Queue,Pipe 进程间数据共享:Manager

    进程间数据传递:Queue,Pipe 进程间数据共享:Manager 1.使用multiprocessing模块的Queue实现数据传递 ''' 进程间通讯:Queue,用法跟线程里的Queue一样, ...

  4. (0098)iOS开发之应用间的分享系列(3)

    (0096)iOS开发之应用间的分享系列(1) (0097)iOS开发之应用间的分享系列(2) 前两篇都是讲的分别是 将自己的应用添加到系统的分享面板 将图片通过分享面板分享到自己的应用中并显示. 这 ...

  5. (0097)iOS开发之应用间的分享系列(2)

    (0096)iOS开发之应用间的分享系列(1) (0097)iOS开发之应用间的分享系列(3) Share Extension将应用添加到系统分享列表 怎么把自己的应用添加到系统分享面板的列表中,并打 ...

  6. (0096)iOS开发之应用间的分享系列(1)

    分享系列: (1)应用间的分享概要 (2) Share Extension将应用添加到系统分享列表 (3) 在自己的应用中调起系统分享面板分享到面板上的其他应用中 (0097)iOS开发之应用间的分享 ...

  7. Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式

    一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...

  8. 【Linux】写实拷贝、父子进程间数据共享以及僵死进程

    目录 一.写实拷贝 二.父子进程间数据共享 三.僵死进程 我们都知道fork之后,会产生子进程,那么今天就来看一下,产生的子进程与父进程之间的数据共享问题.要说这个我们必须明确写实拷贝的概念 一.写实 ...

  9. html5 ios keychain,iOS 用keychain钥匙串保存账号、设备UUID及APP间共享

    iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储.相对于NSUserDefaults.文件保存等一般方式,key ...

最新文章

  1. 数字图像处理实验(6):PROJECT 04-02,Fourier Spectrum and Average Value
  2. Java经典实例:比较浮点数
  3. 嵌入式杂谈之文件系统
  4. React Native在美团外卖客户端的实践
  5. php框架 dirname,PHP目录函数basename()与dirname()
  6. 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
  7. windows phone 切换多语言时,商店标题显示错误的问题
  8. log nginx 显示时间_【日常小知识系列01】Nginx日志简述
  9. vmware虚拟机添加物理网卡与虚拟网卡
  10. 软件包管理:rpm和yum
  11. 一个人一个微博、一个App一个故事:通过微博草根账号做英语学习App的“爱卡微口语”获晨脉创投天使投资
  12. 关于hi3516ev100调试zbar二维码和链接wifi问题
  13. matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别。
  14. gst-inspect-1.0汇总自用
  15. 这样做日程管理,让你的工作效率翻三倍!
  16. 树莓派4b+mcp2515实现CAN总线通讯和系统编程(一.配置树莓派CAN总线接口)
  17. vue实现移动端H5页面截图
  18. 我的第一个Hybrid APP的心得
  19. 【附源码】Java计算机毕业设计民宿客栈管理系统(程序+LW+部署)
  20. mootools_MooTools或jQuery的性感专辑封面

热门文章

  1. 五一带你找到最省旅游路线【dijkstra算法推导详解】
  2. 渗透测试-地基钓鱼篇-Cobalt Strike钓鱼(二十五)
  3. 计算机基础广域网,计算机网络基础计算机广域网技术.ppt
  4. video标签视频有声音无图像处理方法
  5. 337、用三角形triangle、方形square、圆形circle等“基本图形“来表示任意的 图形 如菱形 半圆
  6. apollo自动驾驶进阶学习之--如何调试Crosswalk人行道场景并避让行人
  7. Halcon 雕刻字符识别
  8. Android修改实战教程(乐影软件)
  9. 一个简易的html写的请求本地的json的小说查看
  10. Oracle 交集,差集,并集运算的学习