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¶m2=yyy
设置Scheme的留意点
-
URL Scheme必须能唯一标识一个APP。
- 如果你设置的URL Scheme与其他APP的URL Scheme抵触时,你的APP不一定会被启动起来。
注册URL Scheme
-
翻开工程,点击项目称号,找到
info
条目,在info
条目下,找到URL Types
image
-
在
URL Types
处点击“+”号,新增一个URLTypes
,然后填写identifier
和URL Schemes
.-
identifier:URL Identifier是自界说的 URL scheme 的名字,一般采用回转域名的办法确保该名字的唯一性。例如:
com.xxxx.schemeUse
。 -
URL Schemes:为自己的app界说的schemes。运用别的的app调起自己的app时,运用这个参数,其格局为:
schemeUseApp://
image
-
验证App的调起
运用上述所说的schemeUseApp://
在浏览器中进行测试。本文运用的是模拟器,在浏览器中输入schemeUseApp://
,点击查找。
-
如果手机上没有还没有装置app,是找不到的,safari提示的时候是以网址的方式进行提醒,“Safari浏览器打不开该网页,因为网址无效。”
image
-
手机上现已装置了App的情况下,是可能正常调起。
image
不同使用之间,带参数的跳转
在跳转的URL scheme
中能够增加参数,比方:shemeUseApp://ipOrYuming:8080/path?param1=xxx¶m2=yyy
。
在工程的AppDelegate.m
文件中,重写办法- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
,并在办法中进行URL的分析拆解,就能够得到相关的参数。
image
其程序体现如下:
image
AppDelegation.m
中的openURL
办法中的打印结果为:
2022-05-09 15:04:35.544398+0800 schemeUse[6268:326999] url : shemeuseapp://ipOrYuming:8080/path?param1=xxx¶m2=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¶m2=yyy