web-dev-qa-db-ja.com

openURL:iOS 10で非推奨

IOS 10を搭載したAppleは、openURL:を廃止しました。openURL:option:completionHandlerの場合:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"]];

どのようになりますか? options:<#(nonnull NSDictionary *)#>詳細

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"] options:<#(nonnull NSDictionary<NSString *,id> *)#> completionHandler:nil];

ありがとう

更新オプション:@ {}キーと値のない空の辞書の場合 http://useyourloaf.com/blog/querying-url-schemes-with-canopenurl/

34
Joannes

このように書きます。

Handle completionHandler

UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"http://www.google.com"];
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
    if (success) {
         NSLog(@"Opened url");
    }
}];

completionHandlerの処理なし

[application openURL:URL options:@{} completionHandler:nil];
82
Nirav D

// Objective-C

 UIApplication *application = [UIApplication sharedApplication];
 [application openURL:URL options:@{} completionHandler:nil];

//スイフト

  UIApplication.shared.open(url, options: [:], completionHandler: nil)
7
zeeshan Dar

Appleは、iOS 2で外部リンクを開く方法としてopenURL:メソッドを導入しました。関連する関数canOpenURL:は、インストールされたアプリについてデバイスを照会することを止めるためにiOS 9でプライバシーコントロールを取得しました。 iOS 10では、AppleはopenURL:options:completionHandler:の単純な古いopenURLを廃止しました。

IOS 10で外部リンクを開くために知っておくべきことのクイックガイドを次に示します。

廃止されたメソッドには、開くURLのパラメーターが1つあり、成功または失敗を報告するブール値が返されます。

// Objective-C
    - (BOOL)openURL:(NSURL*)url

// Swift
    open func canOpenURL(_ url: URL) -> Bool

IOS 10の新しい方法:

// Objective-C  
    - (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options
  completionHandler:(void (^ __nullable)(BOOL success))completion

// Swift  
    open func open(_ url: URL, options: [String : Any] = [:],
        completionHandler completion: (@escaping (Bool) -> Swift.Void)? = nil)

現在、3つのパラメーターがあります。

  • 開くURL
  • オプション辞書(有効なエントリについては以下を参照)。 openURL:と同じ動作に空の辞書を使用します。
  • 成功すると、メインキューで完了ハンドラが呼び出されました。ステータスに興味がない場合はNullable。

iOS 10でURLを開く

IOS 10専用アプリを使用していて、オプションや完了ステータスを気にせず、Xcodeの苦情を止めたい場合、これはどういう意味ですか?

// Objective-C  
UIApplication *application = [UIApplication sharedApplication];
    [application openURL:URL options:@{} completionHandler:nil];

// Swift  
UIApplication.shared.open(url, options: [:], completionHandler: nil)

実際には、iOS 9以前をまだサポートしている限り、従来のopenURLメソッドにフォールバックすることができます。それを行う例を見てみましょう。また、完了ハンドラーを使用してオープンのステータスを確認します。

最初にObjective-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"];

オプションに空のディクショナリを渡します。成功をログに記録する以外、完了ハンドラーで有用なことは何もしません。 Swiftバージョン:

func open(scheme: String) {
        if let 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")

オプション
UIApplicationヘッダーファイルには、オプション辞書の単一のキーがリストされます。

  • UIApplicationOpenURLOptionUniversalLinksOnly:true(YES)に設定されたブール値を使用して、URLを開くように構成されたアプリケーションとの有効なユニバーサルリンクである場合にのみURLを開きます。アプリケーションが構成されていない場合、またはユーザーがそれを使用してリンクを開くことを無効にしている場合、完了ハンドラーはfalse(NO)で呼び出されます。

デフォルトの動作をオーバーライドするには、キーをtrue(YES)に設定して辞書を作成し、optionsパラメーターとして渡します。

// 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 Safariでリンクを開く代わりにTwitterアプリをインストールしていないと失敗します。

RefrenceopenURL:iOS 10で廃止予定

4
Disha
 // In Xcode 9 and iOS 11

  UIApplication *application = [UIApplication sharedApplication];
    NSURL *URL = [NSURL URLWithString:@"http://facebook.com"];
    [application openURL:URL options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened url");
        }
    }];
2