(翻訳)openURLはiOS10で非推奨になりました



Openurl Has Been Deprecated Ios10



翻訳元: openURLはiOS10で非推奨
翻訳者:Haley_Wong

AppleはiOS2でローンチしましたopenURL:外部リンクを開く方法としての方法。および関連するメソッドcanOpenURL: iOS9プライバシーコントロールのデバイスにインストールされているアプリを照会することも禁止されています。 AppleはiOS10で非推奨になりましたopenURL:この古い方法では、openURL:options:completionHandler:を使用して置き換えます。このクイックガイドは、iOS10で外部リンクを開く方法を説明する記事です。
(Haley_Wong注:canOpenURL:iOS 3に追加されました。オープン外部リンクは通常、通話、メール、QQ、WeChat、Alipayなどの他のアプリを呼び出すために使用されます。)



iOS10でのアップデート

UIKit関連のApple iOSの新機能 ドキュメントに記載されています:

The new UIApplication method openURL:options:completionHandler:, which is executed asynchronously and calls the specified completion handler on the main queue (this method replaces openURL:).

翻訳は次のとおりです。



The new UIApplication method `openURL:options:completionHandler:` will execute asynchronously and call this specified `completion handler` callback in the main queue.

この非推奨のメソッドには、開くためのURLパラメーターがあり、成功または失敗を示すブール値を返します。

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

iOS 10の新しい方法:

// Objective-C - (void)openURL:(NSURL*)url options:(NSDictionary *)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: Consistentです。
  • 成功または失敗パラメーターを持つ完了ハンドラー(クロージャーまたはブロックと見なすことができます)。この状態に興味がない場合は、Nullを渡すことができます。

iOS10で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以前をサポートする必要がある限り、おそらくそれを元に戻したいと思うでしょう。| ​​_ + _ |古い方法。
完了ハンドラーを使用してリンクのオープンステータスを確認する例を見てみましょう。

Objective-Cコードの表示:

openURL:

オプションパラメータとして空のディクショナリを渡し、完了ハンドラに成功値を出力しましたが、何も役に立ちませんでした。コードのSwiftバージョンは次のとおりです。

- (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']

オプションパラメータ

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:ブール値を設定できます。 true(YES)に設定すると、アプリケーションで構成されている有効なユニバーサルリンクのみを開くことができます。アプリケーションが構成されていない場合、またはリンクを無効にするために使用されている場合、完了ハンドラーコールバックの成功はfalse(NO)です。

プログラムのデフォルトアクション(このキーのデフォルト値はNO)をオーバーライドするには、ディクショナリを作成し、対応するキーをtrue(YES)に設定してから、ディクショナリをオプションパラメータに渡す必要があります。

UIApplicationOpenURLOptionUniversalLinksOnly

たとえば、この値を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) Twitterアプリがインストールされていない場合、Safariでリンクを開く代わりに、失敗します。
(翻訳者注:openURL:メソッドを使用してiOS 9でこのリンクを開くと、最初にSafariが呼び出され、次にこのリンクがSafariで開かれます)

続きを読む

翻訳ミスがありましたら、批判して訂正してください、ありがとうございます!