Url Schemes应用之间跳转

url schemes在app中使用范围很广,比如:支付,分享,app之间互相跳转,app打开系统设置,拨打电话,发送短信等

  • 使用这么频繁的话,那么url schemes究竟该怎么用?
- (void)jumpAction{
    NSURL *url = [NSURL URLWithString:@"wisher://QTWeb"];
    if ([[UIApplication sharedApplication] canOpenURL:url]){
        [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
            if (success) {
                NSLog(@"跳转成功");
            }else{
                NSLog(@"跳转失败");
            }
        }];
    }else{
        NSLog(@"不能打开app");
    }
}
复制代码

最主要的就是openURL: options: completionHandler:这个方法

在iOS10之前调用的是openURL:这个方法,如果app兼容iOS10以下的话需要进行系统版本判断

  • 如何配置app之间跳转url schemes?



第一个url types是我们自身app的identifier和url schemes

第二个是我们需要跳转到的app的配置,如果不设置将跳转不了链接

通过这张图片我们有些问题:

  • identifier是什么?

The identifier you supply with your scheme distinguishes your app from others that might declare support for the same scheme. To ensure uniqueness, specify a reverse DNS string that incorporates your company’s domain name and app name.

您的方案提供的标识符将您的应用程序与其他可能支持同一方案的应用程序区分开来。为了确保唯一性,指定一个包含您公司域名和应用程序名称的反向DNS字符串。

  • url schemes是什么?

url schemes是我们app需要跳转到目的app,目的app给的回调路径,比如跳转其它页面,拷贝app字符串打开词典等检测app能否进行目的app对应规则的回调(类似目的app打开当前app这样的过程)

  • 支付宝没有我们的url schemes为什么也能返回我们的app?

在我们配置支付宝的url schemes的时候identifier的时候会把identifier写成alipay,url schemes写成ap+appid, 支付宝可以通过这个appid返回到我们的app

  • role是什么?

URL schemes offer a potential attack vector into your app, so validate all URL parameters and discard any malformed URLs. It is also recommended that you limit the available actions to those that do not risk the user’s data. For example, do not allow other apps to delete content or access sensitive information about the user. Thoroughly test your URL handling code, and make sure your test cases include improperly formatted URLs.

也就是说通过设置role可以赋予其它app对你app进行操作的权限. 如果微信的app把role设置为None我们就不能对微信进行分享功能,viewer表示只可对app进行查看不能操作app, editor为可读写操作,设置这个之后三方软件就可以调起微信分享功能.

跳转链接的则是需要传递的url,如果调用系统设置的话比较简单,不需要进行其它配置

  • 常用跳转链接

tips:跳转链接不生效可能因为app没有当前权限,比如说app中没有用到定位服务,在打开定位url的时候不会跳转到定位的偏好设置页面

要跳转的设置页面

URL

WIFI

App-Prefs:root=WIFI

Bluetooth

App-Prefs:root=Bluetooth

蜂窝移动网络

App-Prefs:root=MOBILE_DATA_SETTINGS_ID

个人热点

App-Prefs:root=INTERNET_TETHERING

定位服务

App-Prefs:root=Privacy&path=LOCATION

键盘

App-Prefs:root=General&path=Keyboard

语言和地区

App-Prefs:root=General&path=INTERNATIONAL

隐私

App-Prefs:root=Privacy

照相与相机

App-Prefs:root=Photos

电池电量

App-Prefs:root=BATTERY_USAGE

存储空间

Prefs:root=General&path=STORAGE_ICLOUD_USAGE/DEVICE_STORAGE

打10086

tel://10086

App Store

itms-apps://

地图

maps://

信息

sms://

邮箱

mailto://

常用app跳转

url schemes可能不对(原因:文章最后有解释)

QQ

mqq://

微信

weixin://

淘宝

taobao://

支付宝

alipay://

新浪微博

sinaweibo://

知乎

zhihu://

结尾:如果你的应用使用了如SSO授权登录或跳转到第三方分享功能,在iOS9/10下就需要增加一个可跳转的白名单,即LSApplicationQueriesSchemes,否则将在SDK判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败。在项目中的info.plist中加入应用白名单,右键info.plist选择source code打开(plist具体设置在Build Setting -> Packaging -> Info.plist File可获取plist路径)请根据选择的平台进行设置

如果那里不对希望能给予指正,多谢大佬不吝赐教