通过URLSchemes建立应用间通信机制(例:支付宝)


导语

大家都知道,应用间无法直接通信,所以即使是同公司的应用也无法直接在设备端直接通信和共享数据。
但是通过URLSchemes可以调起其它应用,他的官方格式为"标识符://",这个标识符就是你给应用定义的URLSchemes,在"//"后面,可以通过类似于http链接的参数传递方式来在应用间传递少量数据进行交互,话不多说,撸代码。

1.建立两个应用并互相调用

1.1 首先建立应用bradley和johnson,bradley是我们的被调用应用,johnson则是我们的主动调用应用。


通过URLSchemes建立应用间通信机制(例:支付宝)_第1张图片
建立应用

1.2 在bradley应用中找到TARGETS-Info-URL Types,新增一项,将其URL Schemes填写为bradley,同理也在johnson应用中找到TARGETS-Info-URL Types,新增一项,将其URL Schemes填写为johnson。


通过URLSchemes建立应用间通信机制(例:支付宝)_第2张图片
bradley应用

通过URLSchemes建立应用间通信机制(例:支付宝)_第3张图片
johnson应用

1.3 在bradley的AppDelegate.m中添加如下方法及语句:

通过URLSchemes建立应用间通信机制(例:支付宝)_第4张图片
调起App回调方法

1.4 在johnson的主界面我们添加一个按钮,并执行跳转代码,但是为了严谨(参照微信支付),我们必须判断当前设备是否安装目标App,所以我们需要在info.plist文件中添加URL Schemes白名单:

通过URLSchemes建立应用间通信机制(例:支付宝)_第5张图片
URL Schemes白名单

只需将绿色框框内的信息加入即可。
跳转代码如下:

通过URLSchemes建立应用间通信机制(例:支付宝)_第6张图片
跳转代码

1.5 运行调试,我们先运行bradley应用,再运行johnson应用,在johnson应用中点击按钮调起bradley应用,查看log信息:

通过URLSchemes建立应用间通信机制(例:支付宝)_第7张图片
log信息

很明显我们成功的在johnson中调起了bradley应用,并打印出了日志,可以看到我们通过打开一个"bradley://"的url即可调起bradley应用。
那么我们可以在safari中调起bradley么?
答案是可以的:

通过URLSchemes建立应用间通信机制(例:支付宝)_第8张图片
输入braley://
通过URLSchemes建立应用间通信机制(例:支付宝)_第9张图片
询问打开
通过URLSchemes建立应用间通信机制(例:支付宝)_第10张图片
log日志

所以在某种程度上,我们并不能阻止别人打开我们的应用,只能尽量避免自己应用URL Schemes的泄露,并在回调方法中做出一些判断取舍。



2.应用间的信息传递

2.1 大家都上过网,都知道上网需要网址,如:


https://ww.baidu.com?ceo=liyanhong&yewu=kengqian


在这里,"https://" 就类似于我们的标识符"bradley://",我们通过在"//"后面加键值对来传递我们的参数,以达到应用间信息传递的目的。
下面我们来尝试传递一下几个参数:

通过URLSchemes建立应用间通信机制(例:支付宝)_第11张图片
参数传递

可见我们成功的将参数传递了过来,通过一些简单字符串处理我们就能组装成完整的参数字典。那么问题又来了,这个参数字符串能够经受的最大长度是多少呢?
起码1K的length是经得起的:

通过URLSchemes建立应用间通信机制(例:支付宝)_第12张图片
1000字符串传递
通过URLSchemes建立应用间通信机制(例:支付宝)_第13张图片
1000字符串传递成功

而且即使到1W也是OK的,所以大家可以放心使用。



3.应用间的信息传递处理完成后并跳转回来

3.1 信息传递是为了处理,处理完成后总有个结果,并需要把结果回传回来,这就是支付宝和微信支付的处理逻辑。
如何回调回来呢?
答:被调起的应用并不知道调起它的应用的URL Schemes,所以我们需要把自身应用的URL Schemes也传递过去,由被调起应用处理完成,重新调回来并将处理结果作为参数回传回来。
如下:

通过URLSchemes建立应用间通信机制(例:支付宝)_第14张图片
johnson点击传递参数
通过URLSchemes建立应用间通信机制(例:支付宝)_第15张图片
bradley模拟处理后并回调
通过URLSchemes建立应用间通信机制(例:支付宝)_第16张图片
bradley打印log
通过URLSchemes建立应用间通信机制(例:支付宝)_第17张图片
johnson打印log




4.模拟支付宝案例(仅思路及简易代码)

小Demo链接

你可能感兴趣的:(通过URLSchemes建立应用间通信机制(例:支付宝))