iOS APP间的进程通信之URL Schemes

很多时候我们需要从一个App跳转到另一个App完成操作,比如:在淘宝中下单购物,选择微信支付后跳转到微信完成支付。

通常我们使用URL Schemes来完成这个动作,首先进程给自己定义一些scheme,表示其它进程可以通过该scheme调用自己。这个scheme就相当于一个进程协议,比如进程A给自己定义的scheme为aaaa,那么其它应用可以通过 aaaa:自定义参数 这样的格式,使用openURL去调用进程A。

在Xcode中去设置CFBundleURLType,这个参数去添加当前App的scheme,一个App可以拥有多个scheme,通常我们做支付的时候会针对支付宝微信银联,定义该App不同scheme,去回调。
URL SCHEMES

当然我们对于scheme的定义也不要过于简单,还有具有唯一性才好。如果两个进程定义了同一个scheme,为test,在另一个进程中调用test:xxxxx,这个时候不能同时调用两个进程,只能调用先安装到设备上的进程,另一个相同scheme的进程则不会被调用。

LSApplicationQueriesSchemes是从iOS9时被引入的,应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。这个参数表示当前APP允许访问的APP有哪些,即白名单,需要通信双方均设置为对方的scheme,否则当调用对方App时,系统会告诉你This app is not allowed to query for scheme。调用者和被调用者均需要设置白名单,一方想调用,另一方需要也知道将被你调用 ,更为安全。
URL TYPE
但是我们实际使用一下,你会发现我们不需要在LSApplicationQueriesSchemes进行任何设置,只要知道App声明的scheme就可以执行openURL方法调起这个App,这是怎么回事儿?

一般情况下,我们在调起一个APP的时候回检查是否安装,会调用canOpenURL,LSApplicationQueriesSchemes这个参数在这个时候起作用,如果URL不在白名单中,即使手机上安装了这个App,也会返回NO,不能调起。但你非要说你不做任何检查直接openUrl,那么白名单确实作用不大,没有对应scheme的App时,openURL方法执行无实际效果,但是用户体验不是很好。以上便是我对使用Scheme进行App间进程通信的认识,欢迎纠正和补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值