深入浅出话iOS URL Scheme(二)实战上

实战篇(上)

注册自定义URL Scheme

  • 首先注册一个自定义的URL Scheme,在工程中找到 info.plist 文件添加URL Types。
深入浅出话iOS URL Scheme(二)实战上_第1张图片
添加URL Types.png
  • 展开URL Types,有一行URL identifier,它是你URL scheme的名字,为了避免与其他App的重复,一般使用翻转域名来定义。
深入浅出话iOS URL Scheme(二)实战上_第2张图片
定义URL identifier.png
  • 在URL identifier的同级目录添加一条URL Schemes,这里值得注意的地方有两点:
  • 被创建出的URL Schemes是一个Array,这意味着你可以定义多个URL Scheme;
  • URL Scheme其实是对大小写不敏感的,也就是说schemeDemoschemedemo的效果其实是一致的,这个后面是可以验证的。
深入浅出话iOS URL Scheme(二)实战上_第3张图片
添加URL Schemes.png
深入浅出话iOS URL Scheme(二)实战上_第4张图片
定义scheme.png
  • 整体效果应该是这个样子:


    深入浅出话iOS URL Scheme(二)实战上_第5张图片
    整体效果.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和://
驼峰写法.png

你可以尝试一下②中的写法,效果是一样的。这也就是我上面说的Scheme对大小写并不敏感。


非驼峰写法.png
  • 点击确定键,系统会弹出提示框
深入浅出话iOS URL Scheme(二)实战上_第6张图片
提示是否打开该链接.png
  • 点击打开,便会跳转到我们的App中,并执行我们写好的- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;方法

更复杂的Scheme

  • 事实上来说,我们可以将我们的Scheme写的更复杂一些,可以带一些我们需要参数过来,像是这样


    带参数的Scheme.png
  • 进入App后的效果如下,显示我们打开成功,并将?之后的字符串全部显示了出来,也就是[url query]中取到的内容,如果我们需要把相应的参数解析成OC的属性或者变量,那么就需要自己写好对应的解析方法。关于这一点我会在下一篇中详细讲解。

    深入浅出话iOS URL Scheme(二)实战上_第7张图片
    效果图.png

控制台的输出


控制台输出.png

在代码中直接打开Scheme

  • 当然我们还可以不局限于在Safari中打开Scheme,我们还可以在App中借助openURL方法直接打开Scheme。我们在demo中的VC里加一个按钮。它的点击事件执行如下代码
NSString *scheme = @"schemedemo://?parameter2=openScheme";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:scheme]];

效果与在Safari中打开一致


深入浅出话iOS URL Scheme(二)实战上_第8张图片
直接打开Scheme.png

你可能感兴趣的:(深入浅出话iOS URL Scheme(二)实战上)