iOS11下 能够实现两个APP间跳转

转自:https://www.cnblogs.com/xuan52rock/p/6525549.html

平常我们做iOS开发,会经常遇到打开其他的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。我们的目标是:
  • 打开别人的APP
  • 让别人打开我们的APP
  • iOS9的适配问题
  • 使用URL Schemes传递数据

  • 建立一个名为OpenApp的工作空间,用来存放我们的两个工程
    建立这个工作空间主要是为了让我们后面建立的两个工程能在一个Xcode页面上管理,方便讲解和管理。挺简单的,不清楚的可以看我之前的文章【iOS开发】在一个Xcode页面建立多个工程
  • 建立一个名为WXApp的iOS工程。这个工程是我们模拟的“微信APP”,是被人打开的那个APP。
    为了区分两个应用,我们在Main.storyboard上加一个label,“我是微信App”。

    好了,准备工作就这么简单。

    想要打开别人的APP或者让别人打开我们的APP,那就需要通过URL Schemes了。

    URL Schemes是苹果给出的用来跳转到系统应用或者跳转到别人的应用的一种机制。同时还可以在应用之间传数据。

    通过对比 页链接来理解 iOS 上的 URL Schemes,应该就容易多了。
    URL Schemes 有两个单词:

    • URL,我们都很清楚,http://www.apple.com
      就是个 URL,我们也叫它链接或 址;
    • Schemes,表示的是一个 URL 中的一个位置——最初始的位置,即 ://
      之前的那段字符。比如 http://www.apple.com
      这个 址的 Schemes是 http。
      根据我们上面对 URL Schemes 的使用,我们可以很轻易地理解,在以本地应用为主的 iOS 上,我们可以像定位一个 页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该是这个应用的 URL 的 Schemes 部分,也就是开头儿那部分。

    为了能让别的App(包括我们刚才创建的MyApp)能够打开WXApp,我们需要为WXApp添加一个URL Schemes。
    步骤:选中WXApp工程->Info->URL Types->点击“+”->在URL Schemes栏填上 

    然后我们run一下WXApp。(注意一下你run的target是哪个)

    运行了之后点击“打开微信”button,会弹出提示框,点确认之后就可以跳转到WXApp了。

    iOS9之后,在一个应用跳转到了另一个应用之后,左上角会有个返回到上一个应用的按钮。这样,我们在MyApp里面点击“打开微信”按钮,跳转到WXApp之后,再点击“Back to MyApp”,又回到MyApp了。闲着无聊就可以反复点击这两个按钮来两个应用间跳转了,哈哈。

    值得一说的是,这个URL Schemes并不是唯一的。也就是说,多个应用之间设置的URL Schemes是可以相同的。
    那么问题来了,假如两个应用的URL Schemes相同的话,使用方法会打开哪个应用呢r> 楼主亲自用手机试了一下。
    步骤是:

    • 将MyApp安装到手机上,点击“打开微信”button,微信打开了。
    • 然后将WXApp也安装到手机上。再次点击MyApp的“打开微信”button,结果打开的是WXApp。
      结论:如果两个应用有URL Schemes是相同的,后安装的应用的URL Schemes会把早安装的应用的URL Schems覆盖掉。

    没错,注册了URL Schemes的应用,用safari浏览器也是可以打开的。我就经常用这个来验证应用是否设置了我想要的URL Schemes
    在safari打开WXApp,直接在safari的地址栏输入,enter就可以打开了

  • 配置URL Schemes白名单
    其实在打开WXApp的时候,正常情况下,我们应该是先用方法先判断能否打开这个url,然后再用方法打开该URL的。这样可以带来更好的用户体验。因为用户不一定安装了WXApp。假如用户没有安装的话点击“打开微信”button是没有任何反应的。这时候我们应该先判断是否能够打开这个url(也就是判断用户有没有安装WXApp),没有安装的话就给个温馨提示,比如:“U四不四洒,没安装WXApp,怎么打开啊!”。
    更重要的是,假如点击之后没效果,很有可能被苹果拒绝哦。
  • 但是我们发现用了方法之后,并没有如我们想像中打开了WXApp。一看,Xcode控制台提示:

    完整的url信息都传过来了,我们就可以利用这个url里面的路径和参数等信息了,想干嘛就干嘛。这就实现了从MyApp向WXApp传递数据了。

    备注:
    苹果一共给了3个openURL的回调。
    分别是:

    为什么会有3个呢个回调又有什么区别方面讲解,分别设置ABC3个回调)

    • 3个回调的功能基本一样,都是在别人通过URL Schemes打开应用的时候会执行的。
      不同之处:
    • A回调是在iOS2.0的时候推出的,参数只有。
    • B回到是在iOS4.2的时候推出的,参数有  .
    • C回调是iOS9.0的时候推出的,参数有 。有下面几个key
    • 这几个回调是有优先级的。C>B>A。也就是说,如果你3个回调都实现了,那么程序只会执行C回调。其他回调是不会执行的。(当然,iOS9以下只会执行B回调)。

    本篇文章的Demo已经上传到GitHub上了https://github.com/shixueqian/OpenApp

    欢迎观看我的另一篇文章,是这篇文章的进阶版。
    【iOS开发】仿微信分享功能

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2017年11月25日
    下一篇 2017年11月25日

    相关推荐