Scheme的理解

咱们都知道,苹果系统运用沙盒机制来确保用户的隐私和安全,一个App只能访问自己的沙盒,不能访问其他app的信息。这样确保了app的用户的信息的同时,也阻碍了不同的App 之间的信息交流。所以苹果提供了一个能够在App之间跳转的办法:URL Scheme。一个App能够设置自己的URL Scheme,别的的App能够运用这个URL Scheme,然后经过系统的OpenURL来翻开该App。就像网页相同,经过一个网址来跳转到另一个网址。

URL的样式

protocol://hostname[:port]/path/[;parameters][?query]#fragment
  • protocol(Scheme) :协议称号,例如 http、https,和你自己界说的 Scheme。
  • hostname:域名或ip地址,例如www.baidu.com便是域名;110.242.68.3便是IP地址。
  • port:端口号,例如www.baidu.com:80后边的80便是端口号,80是默许端口号,一般不显现。
  • path:途径,表示主机上的目录或文件途径。例如:fanyi.baidu.com/translate。
  • query:可选项,用于传递参数,由?符号开端,&符号隔开,参数名和值用=符号相连。例如:www.baidu.com/s?ie=utf-8&…。

举例如下:
shemeUseApp://ipOrYuming:8080/path?param1=xxx&param2=yyy

设置Scheme的留意点

  1. URL Scheme必须能唯一标识一个APP。

    • 如果你设置的URL Scheme与其他APP的URL Scheme抵触时,你的APP不一定会被启动起来。

注册URL Scheme

  1. 翻开工程,点击项目称号,找到info条目,在info条目下,找到URL Types

    URL Types

    image

  2. URL Types处点击“+”号,新增一个URLTypes,然后填写identifierURL Schemes.

    • identifier:URL Identifier是自界说的 URL scheme 的名字,一般采用回转域名的办法确保该名字的唯一性。例如:com.xxxx.schemeUse

    • URL Schemes:为自己的app界说的schemes。运用别的的app调起自己的app时,运用这个参数,其格局为:schemeUseApp://

      URL Types

      image

验证App的调起

运用上述所说的schemeUseApp://在浏览器中进行测试。本文运用的是模拟器,在浏览器中输入schemeUseApp://,点击查找。

  1. 如果手机上没有还没有装置app,是找不到的,safari提示的时候是以网址的方式进行提醒,“Safari浏览器打不开该网页,因为网址无效。”

    URL Types

    image

  2. 手机上现已装置了App的情况下,是可能正常调起。

    URL Types

    image

不同使用之间,带参数的跳转

在跳转的URL scheme中能够增加参数,比方:shemeUseApp://ipOrYuming:8080/path?param1=xxx&param2=yyy
在工程的AppDelegate.m文件中,重写办法- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options,并在办法中进行URL的分析拆解,就能够得到相关的参数。

URL Types

image

其程序体现如下:

URL Types

image

AppDelegation.m中的openURL办法中的打印结果为:

2022-05-09 15:04:35.544398+0800 schemeUse[6268:326999] url : shemeuseapp://ipOrYuming:8080/path?param1=xxx&param2=yyy
2022-05-09 15:04:35.544524+0800 schemeUse[6268:326999] URL scheme:shemeuseapp
2022-05-09 15:04:35.544580+0800 schemeUse[6268:326999] URL host: ipOrYuming
2022-05-09 15:04:35.544632+0800 schemeUse[6268:326999] URL port: 8080
2022-05-09 15:04:35.544695+0800 schemeUse[6268:326999] URL path: /path
2022-05-09 15:04:35.544739+0800 schemeUse[6268:326999] URL query: param1=xxx&param2=yyy