Custom URL Schemeでアプリを開く
はじめに
androidのintentの様にiosでもCustom URL Schemeで共有したURLを開くことでアプリ間の遷移が可能になります。
もともとShare Extensionでアプリの起動を行いたいと思い調べたCustom URL Schemeでしたが、Share Extensionからはアプリの起動はできませんでした。
せっかく調べたのでCustom URL Schemeについてまとめようと思います。
Custom URL Schemeの作成
info.plistにURL Schemesを追加します。
画像の赤枠で囲んである部分を新規に追加します。同じ様に設定してください。
info.plistをソースコードで見ると追加部分はこんな感じです。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string></string>
<key>CFBundleURLSchemes</key>
<array>
<string>sample</string>
</array>
</dict>
</array>
URL Schemeにsampleと値を設定したので開くときはsample://で開きます。URL Schemeは複数指定可能です。
URLでの画面遷移
以下のコードでにURLを開くとAppDelegateのメソッドが呼ばれます。
let urlscheme = "sample://"
if let url = URL(string: urlscheme) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}
}
application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Boolメソッドに処理が飛んできます。
その中でrootViewControllerを設定してあげれば遷移させることが可能です。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
print("呼ばれたよ")
self.window?.rootViewController = HogeViewController()
return true
}
Share Extensionで遷移
初めに書きましたが本当にやりたかったのはShare Extensionでの画面遷移です。ファイルがPostされた時にdidSelectPost()の中でCustom URL Schemeを使い遷移しようとしましたがダメでした。
URLを開く3つの方法(ダメでした)
Custom URL Schemeを使用するにはURLをどうにかして開く必要があります。
UIApplication
上記でまとめた様にURLを開くのはUIApplicationを使って行うのが一般的です。しかしShare ExtensionではUIApplicationを使用することができません。
NSExtensionContext
SLComposeServiceViewControllerにはNSEctensionContextという型のextensionContextというURLを開くためのプロパティが用意されていますが、extensionContextでURL開くことができるのはToday Extensionの時だけの様です。
WKWebView
こちらの記事にWebViewでOpenURLができると書いてあったので試してみたのですがなぜか開かずでした。
調べてみると同じ問題にぶち当たっている記事がありました。WebViewを使ってい開いていた記事もiOS8をもとに書かれており、iOS9からはセキュリティの関係上load開くことができない様に修正が入ったみたいです。