iPhoneアプリからSafariを起動するにはどうすればよいですか?


127

これはかなり明白な質問かもしれませんが、iPhoneアプリからSafariブラウザを起動できますか?

回答:


200

以下でなければなりません:

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com"];

if (![[UIApplication sharedApplication] openURL:url]) {
    NSLog(@"%@%@",@"Failed to open url:",[url description]);
}

これはアプリのメモリ使用量にカウントされますか?また、アプリに戻るための良い方法はありますか(ソーシャルネットワーキングサイトのログイン機能など)?
ブレンダン2012年

1
@brendan私の推測は、「webview」がサファリアプリケーションで起動され、そのプロセスに該当することを想定しているため、ノーとなるでしょう
surtyaar

12
以前の5/9/09の回答のデュープ
バレット

2
@Barett:未まさに実際、ので、それは9/21/09の答えだ
Bergi

4
IMO API呼び出しは十分に似ているため、この回答は、以前の回答の編集またはコメントとしてより適切に適用されます。
Barett、

52

UIApplicationには、openURLというメソッドがあります。

例:

NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com"];

if (![[UIApplication sharedApplication] openURL:url]) {
  NSLog(@"%@%@",@"Failed to open url:",[url description]);
}

16

あなたはこれでサファリでURLを開くことができます:

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

4

iOS 10では、完了ハンドラーを備えた1つの異なるメソッドがあります。

ObjectiveC:

NSDictionary *options = [NSDictionary new];
//options can be empty
NSURL *url = [NSURL URLWithString:@"http://www.stackoverflow.com"];
[[UIApplication sharedApplication] openURL:url options:options completionHandler:^(BOOL success){
}];

迅速:

let url = URL(string: "http://www.stackoverflow.com")
UIApplication.shared.open(url, options: [:]) { (success) in
}

2

たぶん誰かがSwiftバージョンを使うことができます:

Swift 2.2では:

UIApplication.sharedApplication().openURL(NSURL(string: "https://www.google.com")!)

そして3.0:

UIApplication.shared().openURL(URL(string: "https://www.google.com")!)

2

Swift 4および5では、OpenURLが廃止されているため、簡単な方法は

if let url = URL(string: "https://stackoverflow.com") {
    UIApplication.shared.open(url, options: [:]) 
}

も使用できますSafariServices。アプリ内のSafariウィンドウのようなもの。

import SafariServices

...

if let url = URL(string: "https://stackoverflow.com") {
    let safariViewController = SFSafariViewController(url: url)        
    self.present(safariViewController, animated: true)
}

このコードスニペットは質問を解決する可能性がありますが、説明含めると、応答の質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
Stefan Crain

1

Swift 3.0では、このクラスを使用して通信を支援できます。フレームワークのメンテナは以前の回答を非推奨または削除しました。

UIKitをインポートする

クラスInterAppCommunication {
    static func openURI(_ URI:String){
        UIApplication.shared.open(URL(string:URI)!, options:[:]、completionHandler:{(succ:Bool)in print( "Complete!Success?\(succ)")})
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.