iOS-初识Scheme

什么是Scheme?

简单的说,由于苹果选择沙盒来保障用户的隐私和安全,App只能访问自己的沙盒,但同时也阻碍了应用间合理的信息共享。所以苹果提供了一个可以在App之间跳转的方法:URL Scheme。

在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能,而定位这个应用的标识,也就是Scheme。

例如,多数app会跳转到支付宝或微信去支付,此时就是通过支付宝或微信里设定好的Scheme直接跳转到支付宝或微信的支付功能。

URL的基本格式

protocol(Scheme) :// hostname[:port] / path / [;parameters][?query]#fragment

protocol(Scheme) :协议名称,例如 http、https,和你自己定义的 Scheme。

hostname:域名系统主机名或ip地址,例如 www.baidu.com 就是域名主机号。

port:端口号,例如 www.baidu.com:80后面的80就是端口号,如果省略就使用默认的。

path:路径,表示主机上的目录或文件路径,主机号后由零个或多个 / 隔开。例如:https://fanyi.baidu.com/translate

query:可选项,用于传递参数,由?符号开始,&符号隔开,参数名和值用=符号相连。例如:https://www.baidu.com/s?ie=utf-8&wd=ios

fragment:指定网络资源中的片断,一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。例如:https://baike.baidu.com/item/URL/10056474#2 

URL Scheme的应用场景

常用iOS URL Scheme附录 

1.使用iOS系统预设的URL Scheme调用系统App:iOS系统内置的App,如mail,电话等等,都有相应的URL Scheme供其他的App调用.例如:tel://13636363636 就是调用系统电话给13636363636打电话。其他就不再赘述。

2.打开第三方app或使用第三方app的功能,可以使用第三方定义好的Scheme来访问。

3.定义Scheme,让别的应用或网页可以打开自己的app。

4.跨App间的一些交互:这个其实与第二条类似,但是分开说是因为,假如你们公司有2个以上的App或者你自己开发的多款App,要进行进程间的数据共享或者其他操作,完全可以使用URL Scheme进行一些具有想象力的操作。

URL Scheme的简单使用

首先先为自己的app定义一个Scheme,在info.plist里添加URL Types。

蓝色箭头指向是URL identifier,它是URL scheme的名字,为了避免与其他App的重复,一般使用翻转域名来定义。

蓝色箭头指向是你需要自定义的URL scheme,不区分大小写,URL Schemes是一个数组,这意味着你可以定义多个URL Scheme。

然后在AppDelegate.h里面实现一下代码。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    //打印一些信息
    NSLog(@"从哪个app跳转而来 Bundle ID: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);
    NSLog(@"URL host: %@", [url host]);
    NSLog(@"URL port: %@", [url path]);
    
    // 提示并展示query
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打开URL Scheme成功"
                                                        message:[url query]
                                                       delegate:nil
                                              cancelButtonTitle:@"确定"
                                              otherButtonTitles:nil];
    [alertView show];
    
    return YES;
}

此时用Safari,在在地址栏像输入地址一样输入我们定义的Scheme://

点击open就会打开或跳转到你的app。

还可以输入更复杂的Scheme,例如 mztapp://cn.mymzt.pay/order/detail?order=1&expires=2 像网址一样也同样可以打开。

打印信息: 

所以要输入这么复杂的Scheme,第一个可以用不同的路径,在- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;去跳转不同的功能模块;第二个可以通过参数进行传值。

猜你喜欢

转载自blog.csdn.net/qq_36557133/article/details/82715516