iOS scheme跳转机制

简介

苹果手机中的APP都有一个沙盒,APP就是一个单独个体,信息独立,相互是不可以进行通信的.但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便App之间相互调用而设计的.我们可以通过系统的openURL来打开该APP,并可以传递一些参数,URL Scheme必须能唯一表示一个APP,如果你设置的URL Scheme和逼得APP的URL Scheme冲突时,你的APP不一定会被启动起来.因为当你的APP在安装的时候,系统里面已经注册了你的URL Scheme.一般情况下,是会调用先安装的APP.但是iOS的系统APP的URL Scheme肯定是最高的,所以我们定义URL Scheme的时候,尽量避开系统APP已经定义过的URL Scheme

URL Scheme的命名应该是只能纯英文字符,而不能含有下划线或者数字

注册URL Scheme

方法一

在 TARGETS -> Info -> URL Types 点击添加
在这里插入图片描述

方法二

在info.plist中右击,选中
在这里插入图片描述
Add Row选项,然后输入URL types,类型为 Array

URL Identifier是自定义的 URL scheme 的名字,一般采用反转域名的方法保证该名字的唯一性,比如 com.DemoB.www,不过在iOS中打开一个应用程序只需要拿到这个应用程序的协议头(URL Scheme)即可,所以我们只需配置应用程序的协议头即可。一个应用是可以有多个URL Schemes的

使用

1. 应用A跳转到应用B

这里创建了两个应用:DemoA 和DemoB,DemoB注册了Scheme为"DemoBScheme",下面来实现DemoA→DemoB的跳转

#pragma mark - DemoA -> DemoB
- (IBAction)jumpToDemoB:(id)sender {
    NSString *urlString = @"DemoBScheme://";//没有参数
    NSURL *url = [NSURL URLWithString:urlString];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
        }];
    }
    else {
        [self showMessage:@"没有该应用"];
    }
}

分别运行两个应用,然后在DemoA中点击相应的按钮跳转到DemoB,会发现并不能跳转,因为在iOS9以后,如果使用canOpenURL:方法,改方法所涉及的URL Scheme必须在Info.plist中将它们列为白名单,否则不能使用

在info.plist中添加LSApplicationQueriesSchemes

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值