热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS应用程序之间数据共享

iOS应用程序间共享数据我们知道由于iOS有安全沙盒机制,应用之间是不能直接访问,但是Apple友好的提供了四种访问机制它们分别是:1.粘

iOS应用程序间共享数据



我们知道由于iOS有安全沙盒机制,应用之间是不能直接访问,但是Apple友好的提供了四种访问机制

它们分别是:

1. 粘贴板             UIPasteboard

2. 自定义URL Scheme      

3. App Groups

4. 钥匙串




以下,就详细的说说它们的原理和具体怎么使用。




首先,创建两个项目, 它们分别是:PSharedData1,PSharedData2




1. 粘贴板    UIPasteboard

    例如:有道词典,在搜索词的文本框里点击时

               百度浏览器,QQ浏览器,在搜索关键词时,

               会把从别处复制到剪切板的内容给自动显示出来

    出于这样的功能,在PSharedData1里,我们把数据通过UIPasteboard设置进去,然后启动PSharedData2,读取UIPasteboard里的内容




详细代码:

PSharedData1项目里

 

- (void)viewDidLoad {[super viewDidLoad];UIImage *im1 = [UIImage imageNamed:@"2.png"];UIImage *im2 = [UIImage imageNamed:@"2.png"];UIImage *im3 = [UIImage imageNamed:@"2.png"];UIColor *c1 = [UIColor redColor];UIColor *c2 = [UIColor redColor];UIColor *c3 = [UIColor redColor];UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"com.xiaoruigege.pasteboard" create:YES];pasteboard.strings = @[@"aa",@"bb",@"cc",@"dd"];pasteboard.images = @[ im1, im2, im3];pasteboard.colors = @[c1, c2, c3];}


PSharedData2项目里

- (void)viewDidLoad {[super viewDidLoad];UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"

com.xiaoruigege.pasteboard
" create:NO]; NSArray *strings = pasteboard.strings; NSArray *images = pasteboard.images; NSArray *colors = pasteboard.colors; NSLog(@"string: %@, colors : %@, images: %@", strings, colors, images);}

注意:UIPasteboard可以存放NSString, UIImage, UIColor,  但是每次设值,只能存放一种数据类型,以最后一次赋值为主




比如:我在PSharedData1项目里,同时设置了三种数据类型和数据

pasteboard.strings = @[@"aa",@"bb",@"cc",@"dd"];pasteboard.images = @[ im1, im2, im3];pasteboard.colors = @[c1, c2, c3];但是,从PSharedData2项目里,取出值,仅仅只有colors有值,因为colors在设值时,是最后一个


NSArray *strings = pasteboard.strings;NSArray *images = pasteboard.images;NSArray *colors = pasteboard.colors;












2.自定义URL  Scheme

   例如:我们分享微博时,第三方应用使用QQ, 微信等登陆时

             从我们自己的客户端跳转到到微博,QQ客户端时,使用的就是自定义URL

   当然,也可以作为我们从一个客户端跳转另一个客户端时通过制定URL,并且可以传参数,且参数是不可见的




详细代码:

PSharedData1项目中的info.plist文件中配置如下







URL identifier   一般可以取公司域名倒置

URL Schemes  是关键,它是一个Array,表示可以用多种方式打开,我这里定义xiaoruigege, 即表示其他项目可以通过 xiaoruigege://就可以打开PSharedData1项目(就是自己)

但是在iOS9中,必须要在打开的项目里配置白名单(被打开项目的URL Scheme)




PSharedData2项目里,配置白名单,适用于iOS9.0及以上,iOS8.0及以下不用配置,也可以打开

info.plist配置是







通过PSharedData2项目,打开PSharedData1项目的调用代码

NSURL *url = [NSURL URLWithString:@"xiaoruigege://param=1&m=2"];[[UIApplication sharedApplication] openURL:url];





自定义URL  xiaoruigege://param=1&m=2  

param=1&m=2   这是参数列表





PSharedData1项目打开后,会执行如下appDelegate中的代理函数

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{if ([[url scheme] hasPrefix:@"xiaoruigege://"]) {//解析URL获取数据return YES;}return NO;
}






















3. App Groups




iOS8之后苹果加入了App Groups功能,应用程序之间可以通过同一个group来共享资源,app group可以通过NSUserDefaults进行小量数据的共享,

如果需要共享较大的文件可以通过NSFileCoordinator、NSFilePresenter等方式。
开启app groups,需要添加一个group name,app之间通过这个group共享数据:





步骤:点击项目  -> 选择相应的Target  -> 选择Capabilities项  ->  点开App Groups   ->  点击下面的加号,添加一个字符串作为标识 ,group.xiaoruigege.shareddata  是我自己写的标识










PSharedData1项目和PSharedData2项目的这块设置成一致,就OKAY了




设值

NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.xiaoruigege.shareddata"];[myDefaults setObject:@"group.xiaoruigege.shareddata" forKey:@"mykey"];


取值

NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.xiaoruigege.shareddata"];NSString *content = [myDefaults objectForKey:@"mykey"];NSLog(@"AppGroups: %@", content);















4. KeyChain 钥匙串




iOS的keychain提供一种安全保存信息的方式,可以保存密码等数据,而且keychain中的数据不会因为你删除app而丢失,你可以在重新安装后继续读取keychain中的数据。通常每个应用程序只允许访问自己在keychain中保存的数据,不过假如你使用同一个证书的话,不同的app也可以通过keychain来实现应用间的数据共享




为了实现keychain共享数据,我们需要开启Keychain Sharing,开启方法如下,然后添加设置相同的Keychain Group,不过别忘记了添加Security.framework。



将项目和项目的这里设置成一样,就可以达到两个项目互相设值并且访问




这里的代码以开源库https://github.com/VictorZhang2014/ZRKeyChain

来举个例子,详细使用,请点击该链接



















 




推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
lantshirt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有