web-dev-qa-db-ja.com

iOSアプリからサファリを起動してURLを開く方法

設定ページでは、3つのリンクを

  • 私のアプリサポートサイト
  • YouTubeアプリのチュートリアル
  • 私のメインサイト(つまり、 'Created by Dale Dietrich'というラベルにリンクされています。)

私はこのサイトとウェブと私の文書を検索しましたが、明白なことは何も見つかりませんでした。

注:自分のアプリ内でWebページを開きたくない場合は、Safariにリンクを送信し、そこから開いてください。それが可能でなければならないので、私は彼らの設定ページで同じことをしているアプリの数を見ました。

203
Dale Dietrich

私がしたことをヘレス:

  1. 次のように、ヘッダーの.hファイルにIBActionを作成しました。

    - (IBAction)openDaleDietrichDotCom:(id)sender;
    
  2. リンクしたいテキストを含むUIButtonをSettingsページに追加しました。

  3. ボタンをFile OwnerのIBActionに適切に接続しました。

  4. その後、以下を実装します。

Obj C

- (IBAction)openDaleDietrichDotCom:(id)sender {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.daledietrich.com"]];
}

スウィフト

(ヘッダーファイルではなく、viewControllerのIBAction)

if let link = URL(string: "https://yoursite.com") {
  UIApplication.shared.open(link) 
}
373
Dale Dietrich

スウィフト構文:

UIApplication.sharedApplication().openURL(NSURL(string:"http://www.reddit.com/")!)

iOS 9.3以前の新しいSwift構文

Swiftの新しいバージョン(おそらくSwift 2?)の時点で、UIApplication.sharedApplication()はUIApplication.sharedになりました(計算されたプロパティをよりよく活用していると思います)。さらに、URLはもはや暗黙的にNSURLに変換できないため、as!を使用して明示的に変換する必要があります。

UIApplication.sharedApplication.openURL(NSURL(string:"http://www.reddit.com/") as! URL)

iOS 10.0以降の新しいSwift構文

OpenURLメソッドは非推奨となり、iOS 10.0以降ではoptionsオブジェクトと非同期完了ハンドラを使用する、より用途の広いメソッドに置き換えられました。

UIApplication.shared.open(NSURL(string:"http://www.reddit.com/")! as URL)
161
Dustin Williams

ここでは、開く予定のURLがデバイスまたはシミュレータで開くことができるかどうかを確認する必要があります。時々(シミュレータの大多数)私はそれがクラッシュを引き起こすことがわかったので。

Objective-C

NSURL *url = [NSURL URLWithString:@"some url"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   [[UIApplication sharedApplication] openURL:url];
}

Swift 2.0

let url : NSURL = NSURL(string: "some url")!
if UIApplication.sharedApplication().canOpenURL(url) {
     UIApplication.sharedApplication().openURL(url)
}

Swift 4.2

guard let url = URL(string: "some url") else {
    return
}
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
49

UIApplicationの -openURL: メソッドを見てください。 NSURLインスタンスをシステムに渡して、どのアプリケーションでそれを開いてそのアプリケーションを起動するかを決定します。 (システムに現在インストールされているアプリケーションでURLを処理できない場合に備えて、おそらく最初に-canOpenURL:をチェックすることをお勧めします - これは普通のhttp://リンクではおそらく問題にならないでしょう。)

20
Tim

また、提供されたURL textがスキームを持っているかどうかわからない場合は、

NSString* text = @"www.Apple.com";
NSURL*    url  = [[NSURL alloc] initWithString:text];

if (url.scheme.length == 0)
{
    text = [@"http://" stringByAppendingString:text];
    url  = [[NSURL alloc] initWithString:text];
}

[[UIApplication sharedApplication] openURL:url];
17
meaning-matters

非推奨のObjective-Cバージョンは次のようになります。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://Apple.com"] options:@{} completionHandler:nil];
13
Antzi

Swift 3.0

if let url = URL(string: "https://www.reddit.com") {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:])
    } else {
        UIApplication.shared.openURL(url)
    }
}

これは、iOSの古いバージョンを実行しているデバイスもサポートします。

9
Greg T

Swift 3[完了]ボタンによる解決策

import SafariServicesを忘れないでください

if let url = URL(string: "http://www.yoururl.com/") {
            let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
            present(vc, animated: true)
        }
8
Baher A

この答えはiOS 10.0以降では推奨されていないため、より良い答えは次のようになります。

if #available(iOS 10.0, *) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}else{
    UIApplication.shared.openURL(url)
}

objective-c

[[UIApplication sharedApplication] openURL:@"url string" options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened url");
        }
    }];
5
wazowski

openURL(:)はiOS 10.0では推奨されていませんでしたが、代わりに次のインスタンスメソッドをUIApplicationで使用してください。open(:オプション:completionHandler:)

Swiftを使った例
これはSafariで " https://Apple.com "を開きます。

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

https://developer.Apple.com/reference/uikit/uiapplication/1648685-open

3
Ryan H.

Swift 3.0では

               if let url = URL(string: "https://www.google.com") {
                 UIApplication.shared.open(url, options: [:])
               }
2
Ourang-Zeb Khan

これを試して:

NSString *URL = @"xyz.com";
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:URL]])
{
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
}
1
Shubham JAin

Swift 1.2では、これを試してください。

let pth = "http://www.google.com"
    if let url = NSURL(string: pth){
        UIApplication.sharedApplication().openURL(url)
0
Dilip Tiwari