美文网首页iOS 移动端开发
iOS10适配:被弃用的openURL

iOS10适配:被弃用的openURL

作者: ArchLL | 来源:发表于2016-10-26 14:29 被阅读614次
    1.jpg

    原文:openURL Deprecated in iOS 10
    作者:@kharrison
    译者:deqiutseng

    苹果在iOS 2中引入了openURL:方法来进行APP间的跳转。不过在iOS 9中,隐私控制已禁止开发者通过openURL:方法查询设备上是否安装了哪些APP应用。苹果禁止开发者查询设备上是否安装了某款APP。在iOS 10中,苹果弃用了openURL,转而用openURL:options:completionHandler:替代。
    本文简单介绍如何在iOS 10中进行APP之间的跳转。

    iOS 10中的新功能

    苹果在What's New in iOS文档的UIKit部分中指出:
    新的UIApplication方法openURL:options:completionHandler:可以异步执行并在主队列中执行完成后进行回调(此方法替换原来的openURL:)。
    现在被废弃的方法必须传入启动APP的URL并返回布尔值来标识成功或是失败。

    // Objective-C
    - (BOOL)openURL:(NSURL*)url
    // Swift
    open func canOpenURL(_ url: URL) -> Bool
    

    在项目实践中,如果你仍然兼容iOS9及更早的版本,你肯定会想用回以前的openURL 老方法。下面来看一段代码是如何使用completionHandler来检查APP打开状态。先上一段Object-C代码:

    - (void)openScheme:(NSString *)scheme {
    UIApplication *application = [UIApplication sharedApplication];
    NSURL *URL = [NSURL URLWithString:scheme];
    if([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
    [application openURL:URL options:@{}
    completionHandler:^(BOOL success) {
    NSLog(@"Open %@: %d",scheme,success);
    }];
    }else{
    BOOL success = [application openURL:URL];
    NSLog(@"Open %@: %d",scheme,success);
    }
    }
    // Typical usage
    [self openScheme:@"[tweetbot://timeline](tweetbot://timeline)"];
    

    我为option参数传入一个空的字典,除了只是在成功回调方法里只是打印了一下日志以外,并没有写任何有用的代码。以下是Swift版本:

    func open(scheme: String) {
    iflet url = URL(string: scheme) {
    if#available(iOS 10, *) {
    UIApplication.shared.open(url, options: [:],
    completionHandler: {
    (success)in
    print("Open \(scheme): \(success)")
    })
    }else{
    let success = UIApplication.shared.openURL(url)
    print("Open \(scheme): \(success)")
    }
    }
    }
    // Typical usage
    open(scheme:"[tweetbot://timeline](tweetbot://timeline)")
    

    Options 参数

    UIApplication 头文件为options字典列出了一个key:
    UIApplicationOpenURLOptionUniversalLinksOnly:如果这个要打开的URL有效,并且在应用中配置它布尔值为true(YES)时才可以打开,否则打不开。
    为了覆盖默认行为,创建一个设置key值了True的字典作为参数传入:

    // Objective-C
    NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
    [application openURL:URL options:options completionHandler:nil];
    // Swift
    let options = [UIApplicationOpenURLOptionUniversalLinksOnly :true]
    UIApplication.shared.open(url, options: options, completionHandler: nil)
    

    以上面示例,如果我设置它为true并打开URL:https://twitter.com/kharrison 时, 如果我并没有安装Twitter app那它就会失败,同时会调用safari来打开这个链接。

    相关文章

      网友评论

        本文标题:iOS10适配:被弃用的openURL

        本文链接:https://www.haomeiwen.com/subject/spwduttx.html