対象:
Swift4

ブラウザを開く(Swift)

アプリからSafariを起動するのは簡単にできる。UIApplicationのopenメソッドにURLを渡すだけで良い。開きたいページがhttpかhttpsかに拘らずこの方法で開くことができる。

        let url = URL(string: "http://www.office-matsunaga.biz/ios/list.php")
        //UIApplication.shared.openURL(url!)
        // iOS 10以降利用可能
        UIApplication.shared.open(url!)

では、SafariでなくChrome for iOSでページを開きたい場合はどうすれば良いだろうか。URLスキームを使えばChromeで目的のページを開くことができる。やり方は開きたいページのURLの"http"の部分を"googlechrome"に変えてopenメソッドを呼ぶだけである。あるいは、"https"で始まるURLならば、それを"googlechromes"に書き換える。

        let url = URL(string: "googlechrome://www.office-matsunaga.biz/ios/list.php")
        if UIApplication.shared.canOpenURL(url!) {
            UIApplication.shared.open(url!)
        }

canOpenURLメソッドは、指定されたURLスキームである"googlechrome"をサポートしたアプリが端末にインストールされているか否かを判断するために使用している。ただし、これだけだとcanOpenURLメソッドを呼んだところで以下のようなエラーが出てしまうだろう。

SwiftInvokeSafari[337:182445] -canOpenURL: failed for URL: "googlechrome://www.office-matsunaga.biz/ios/list.php" - error: "This app is not allowed to query for scheme googlechrome"

使用したいURLスキームは、予めInfo.plistのLSApplicationQueriesSchemesキーに配列として登録しておかなければならない。httpのサイトならば"googlechrome"、httpsのサイトならば"googlechromes"をInfo.plistに登録しておく必要がある。

	LSApplicationQueriesSchemes
	
		googlechrome
		googlechromes
	

アプリから起動したSafariやChromeの左上には、アプリ名と矢印が表示され、起動元のアプリに戻ることも可能となっている。


尚、canOpenURLメソッドでtrueが返ってきたからと言って、そのURLがアクセス可能であることを意味するものではない。また、openメソッドの前に必ずcanOpenURLメソッドを呼ばなければならないと言うわけでもない。つまり、canOpenURLメソッドによるChromeがインストール済みか否かの確認を行わないならば、Info.plistへのURLスキームの登録も必要ない。

実は、openメソッドによるChromeの起動の仕組みは、他のアプリにも応用できる。例えば、Google Maps for iOSを起動することもできる。

(2018/01/19)

新着情報
【オープンソースソフトウェア環境構築】Amazon S3にアクセスするSparkアプリケーション
【iOS Objective-C, Swift Tips】ジオコーディング(Swift)
【iOS Objective-C, Swift Tips】HTTP GETとPOST(Swift)

Copyright© 2004-2018 モバイル開発系(K) All rights reserved.
[Home]