<br />
导语
大家都知道,应用间无法直接通信,所以即使是同公司的应用也无法直接在设备端直接通信和共享数据。
但是通过URLSchemes可以调起其它应用,他的官方格式为"标识符://",这个标识符就是你给应用定义的URLSchemes,在"//"后面,可以通过类似于http链接的参数传递方式来在应用间传递少量数据进行交互,话不多说,撸代码。
<br />
1.建立两个应用并互相调用
1.1 首先建立应用bradley和johnson,bradley是我们的被调用应用,johnson则是我们的主动调用应用。
1.2 在bradley应用中找到TARGETS-Info-URL Types,新增一项,将其URL Schemes填写为bradley,同理也在johnson应用中找到TARGETS-Info-URL Types,新增一项,将其URL Schemes填写为johnson。
1.3 在bradley的AppDelegate.m中添加如下方法及语句:
1.4 在johnson的主界面我们添加一个按钮,并执行跳转代码,但是为了严谨(参照微信支付),我们必须判断当前设备是否安装目标App,所以我们需要在info.plist文件中添加URL Schemes白名单:
只需将绿色框框内的信息加入即可。
跳转代码如下:
1.5 运行调试,我们先运行bradley应用,再运行johnson应用,在johnson应用中点击按钮调起bradley应用,查看log信息:
很明显我们成功的在johnson中调起了bradley应用,并打印出了日志,可以看到我们通过打开一个"bradley://"的url即可调起bradley应用。
那么我们可以在safari中调起bradley么?
答案是可以的:
所以在某种程度上,我们并不能阻止别人打开我们的应用,只能尽量避免自己应用URL Schemes的泄露,并在回调方法中做出一些判断取舍。
<br />
<br />
2.应用间的信息传递
2.1 大家都上过网,都知道上网需要网址,如:
<br />
https://ww.baidu.com?ceo=liyanhong&yewu=kengqian
<br />
在这里,"https://" 就类似于我们的标识符"bradley://",我们通过在"//"后面加键值对来传递我们的参数,以达到应用间信息传递的目的。
下面我们来尝试传递一下几个参数:
可见我们成功的将参数传递了过来,通过一些简单字符串处理我们就能组装成完整的参数字典。那么问题又来了,这个参数字符串能够经受的最大长度是多少呢?
起码1K的length是经得起的:
而且即使到1W也是OK的,所以大家可以放心使用。
<br />
<br />
3.应用间的信息传递处理完成后并跳转回来
3.1 信息传递是为了处理,处理完成后总有个结果,并需要把结果回传回来,这就是支付宝和微信支付的处理逻辑。
如何回调回来呢?
答:被调起的应用并不知道调起它的应用的URL Schemes,所以我们需要把自身应用的URL Schemes也传递过去,由被调起应用处理完成,重新调回来并将处理结果作为参数回传回来。
如下:
<br />
<br />