注册URL Scheme步骤以及打开其他App

一 注册 URL Scheme

1.设置URL Scheme

这里写图片描述

  • 在safari地址栏中输入:URL Schemes://identifier (例如:iOSEnterURL://com.Demo.www)就可以打开注册了URL Schemes的APP的。

  • 其中URL Schemes是必填的,identifier是选填

  • 一般情况下,是会调用先安装的app。但是iOS的系统app的URL Scheme肯定是最高的。所以我们定义URL Scheme的时候,尽量避开系统app已经定义过的URL Scheme
2. 在appdelegate中编写代码
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
   //打开链接会走这个方法
    return YES;
}

#else

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{
    //打开链接会走这个方法
    return YES;
}


#endif

二 打开其他应用

2.1 应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。否则报错:

This app is not allowed to query for scheme…

这里写图片描述

2.2 相关API
// iOS10 以及以后
- (void)openURL:(NSURL*)url options:(NSDictionary *)options
  completionHandler:(void (^ __nullable)(BOOL success))completion;
  // iOS10 以前
- (void)openURL:(NSURL*)url;
  • url:打开APP的URL

  • options:可选字典参数。参数可以为空,也可以下边的参数

    • 空字典:可以达到openURL:一样的行为
      • @{}
    • UIApplicationOpenURLOptionUniversalLinksOnly:如果这个要打开的URL有效,并且在应用中配置它布尔值为true(YES)时才可以打开,否则打不开。
      • 例如:@{UIApplicationOpenURLOptionUniversalLinksOnly : @YES}
  • completion:执行成功后completionhandler在主队列中回调。如果你并不关心它的返回状态也可以传空。

相关代码
//[self openScheme:@"iOSEnterURL://"];
- (void)openScheme:(NSString *)scheme {
    UIApplication *application = [UIApplication sharedApplication];
    NSURL *URL = [NSURL URLWithString:scheme];
    //iOS 10 以后
    if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
    //1 如果这个要打开的URL有效,并且在应用中配置它布尔值为true(YES)时才可以打开,否则打不开
                NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
         //2 此时与openURL功能相似
//        NSDictionary *options  =@{}
        [application openURL:URL options:options
           completionHandler:^(BOOL success) {
               NSLog(@"Open %@: %d",scheme,success);
           }];
    } else {
        if ([application canOpenURL:URL]) {
            BOOL success = [application openURL:URL];
            NSLog(@"Open %@: %d",scheme,success);
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值