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/
このように書きます。
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];
// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];
//スイフト
UIApplication.shared.open(url, options: [:], completionHandler: nil)
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つのパラメーターがあります。
openURL:
と同じ動作に空の辞書を使用します。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アプリをインストールしていないと失敗します。
Refrence: openURL:iOS 10で廃止予定
// 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");
}
}];