URL|URL Scheme 实战
实战篇 注册自定义URL Scheme
首先注册一个自定义的URL Scheme,在工程中找到 info.plist 文件添加URL Types。
文章图片
692407-2bca5fad2cb5b031.png
展开URL Types,有一行URL identifier,它是你URL scheme的名字,为了避免与其他App的重复,一般使用翻转域名来定义。
文章图片
692407-03a5b07eeb0ff919.png
在URL identifier的同级目录添加一条URL Schemes,这里值得注意的地方有两点:
被创建出的URL Schemes是一个Array,这意味着你可以定义多个URL Scheme;
URL Scheme其实是对大小写不敏感的,也就是说schemeDemo与schemedemo的效果其实是一致的,这个后面是可以验证的。
文章图片
![692407-dbb89c92eefb4f9f.png](https://upload-images.jianshu.io/upload_images/12184625-63acf1afd83d78b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
整体效果应该是这个样子:相应代码实现
文章图片
692407-b68e844f8134f566.png
我们需要在AppDelegate中实现这个方法:
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
以下是我的实现方式:
- (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]);
// 提示并展示query
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打开URL Scheme成功"
message:[url query]
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alertView show];
return YES;
}
这段代码其实只做了2件事:打印一些必要的信息到控制台,然后弹出一个提示框告诉你Scheme是否打开成功。其中query为查询串,里面存储着参数信息。打开Scheme
下面是验证阶段,我们打开Safari,在地址栏像输入一段普通的URL一样输入我们定义的Scheme和://更复杂的Scheme
文章图片
692407-81ee10430b4edecc.png
事实上来说,我们可以将我们的Scheme写的更复杂一些,可以带一些我们需要参数过来,像是这样
文章图片
692407-0db997b90a2295aa.png
进入App后的效果如下,显示我们打开成功,并将?之后的字符串全部显示了出来,也就是[url query]中取到的内容,如果我们需要把相应的参数解析成OC的属性或者变量,那么就需要自己写好对应的解析方法。关于这一点我会在下一篇中详细讲解。在代码中直接打开Scheme
文章图片
692407-457e60cbaebfc6e8.png
当然我们还可以不局限于在Safari中打开Scheme,我们还可以在App中借助openURL方法直接打开Scheme。我们在demo中的VC里加一个按钮。它的点击事件执行如下代码
NSString *scheme = @"schemedemo://?parameter2=openScheme";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:scheme]];
【URL|URL Scheme 实战】效果与在Safari中打开一致
文章图片
692407-ff69fdff2b0da940.png
推荐阅读
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 2020-07-29《吴军·阅读与写作50讲》24实战才能转化效能
- Python实战计划学习笔记(9)为大规模爬取准备
- 韵达基于云原生的业务中台建设 | 实战派
- 【V课会】第3季-30天小学思维导图实战营
- 【思维导图实战派】刻意练习计划“遇见……”|【思维导图实战派】刻意练习计划“遇见……” 1/300 人教版数学五下第三单元《正方体和长方体的认识》
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- 区块链FISCO|区块链FISCO BCOS实战基础篇(视频教程)