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

版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/u010828718/article/details/79104266

一 注册 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);
        }

    }
}

猜你喜欢

转载自blog.csdn.net/u010828718/article/details/79104266