首页 > 编程语言 >iOS应用程序之间数据共享

iOS应用程序之间数据共享

时间:2023-05-21 23:05:09浏览次数:48  
标签:pasteboard UIPasteboard URL PSharedData1 iOS 应用程序 xiaoruigege colors 数据共享


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:@"<pre name="code" class="objc">com.xiaoruigege.pasteboard
" create:NO]; NSArray<NSString *> *strings = pasteboard.strings; NSArray<UIImage *> *images = pasteboard.images; NSArray<UIColor *> *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<NSString *> *strings = pasteboard.strings;
    NSArray<UIImage *> *images = pasteboard.images;
    NSArray<UIColor *> *colors = pasteboard.colors;


2.自定义URL  Scheme


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


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


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


详细代码:


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


iOS应用程序之间数据共享_安全




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


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


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

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


info.plist配置是


iOS应用程序之间数据共享_苹果_02




通过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  是我自己写的标识




iOS应用程序之间数据共享_沙盒_03




把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。


iOS应用程序之间数据共享_苹果_04


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

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


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



 


标签:pasteboard,UIPasteboard,URL,PSharedData1,iOS,应用程序,xiaoruigege,colors,数据共享
From: https://blog.51cto.com/u_14062833/6320524

相关文章

  • iOS上的Popover
    ZRPopoverViewZRPopoverViewisapopoverviewthatpopUIViewwithalistofbuttonbycustomisingeventsandcontents.#1.IfyoulikeinvokethiseventsbyblocksothatChooseNo.1.#2.IfyoulikeinvokethiseventsbydelegatesothatChooseNo.2.Effect......
  • iOS应用通过地址(URL)安装
    目标:iOS应用通过URL地址来安装准备:1.bundleidentifier2.应用图标3.下载地址  完整的下载地址是itms-services://?action=download-manifest&url=https://www.yourdomain.cn/download/2.1.0-10637/test.116d7.56d82df.20170122.test.domain.cn.ipa.plist其中,配置test.116d7.56d8......
  • 14-Filter&Listener&Ajax&Axios&JSON
    1,Filter1.1Filter概述Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。Servlet我们之前都已经学习过了,Filter和Listener我们今天都会进行学习。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。如下图所示,浏览器可以访问服务器上的所有......
  • 是什么让你的ExtJS应用程序运行缓慢?
          本文说的“缓慢”,是只运行时的缓慢,而不是只加载资源的时间。      在过去的一年半以来,我一直与RobertBosch在Bosch软件创新公司工作,在那里我们的前端技术堆栈非常依赖ExtJS。我有机会开发VisualRulesWebModeler机器协助开发其它几个基于ExtJS的应用,因此,我......
  • OpenAI 官宣首个 ChatGPT iOS 应用
    最近,OpenAI宣布推出官方iOS应用,允许用户随时随地访问其高人气AI聊天机器人,此举也打破了近几个月内苹果AppStore上充斥似是而非的山寨服务的窘境。该应用程序是ChatGPT的首个官方移动应用程序。ChatGPT软件程序在去年推出后迅速获得了超过1亿用户,这也让技术行业火速......
  • 用ABP Suite创建Blazor Server的应用程序
    这个应用程序我们取名为BlazorOne,意思是集AuthServer、HttpApiHost和BlazorServer3个功能于一体的应用程序。因为ABPSuite支持另外一种模式,是把上述3个功能独立部署。为了由浅入深的介绍ABP的模块化开发,我们先完成BlazorOne吧!#1、#2、我们的解决方案名字叫Study.BlazorOne,其......
  • ChatGPT 推出 iOS 应用,支持语音输入,使用体验如何?
    最近,OpenAI宣布推出官方iOS应用,允许用户随时随地访问其高人气AI聊天机器人,此举也打破了近几个月内苹果AppStore上充斥似是而非的山寨服务的窘境。该应用程序是ChatGPT的首个官方移动应用程序。ChatGPT软件程序在去年推出后迅速获得了超过1亿用户,这也让技术行业火速......
  • iOS视频播放常用重点知识
    iOS视频播放常见的重要知识点如下:视频格式:iOS支持的视频格式主要有H.264、MPEG-4、H.263、Sorenson等。它们根据不同的应用场景进行使用。视频编解码:视频编解码技术是视频播放的核心,它有两部分组成,1.将原始视频数据编码为压缩格式,2.将压缩格式的数据解码成原始视频数据。在iOS中......
  • IOS证书制作教程
    ​转载:IOS证书制作教程 点击苹果证书按钮​编辑 点击新增​编辑 输入证书密码,名称这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作,所以请务必记住密码。还有为了安全起见,密码不要......
  • axios设置请求体
    方式一:json请求方式二:form表单 <template><div>{{msg}}</div></template><script>exportdefault{data:()=>({msg:'',}),created(){constaxios=require('axios......