😎
[iOS14]他アプリを開く機能の挙動
調べたこと
UIApplicationで他アプリを開く機能について、通常ですとInfo.plistに他アプリのスキームを書く必要があることが公式ドキュメントには書いてあります。
しかし、現時点(2021/06)ではInfo.plistにスキームを書かなくても開けるようです。ドキュメントをみる限り非推奨なので、今後のアップデートで使えなくなる可能性はあります。
環境
- iOS14.5-14.6
- Xcode12.5
公式ドキュメントの方法
使用するメソッドは下記の2つです。
//URLを開けるかどうか
func canOpenURL(_ url: URL) -> Bool
//URLを開く
func open(_ url: URL,
options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:],
completionHandler completion: ((Bool) -> Void)? = nil)
1.URLが開けるかどうかを確認する
canOpenURL
を使うことで、URLが開けるかどうかを判定できます。
https
やmail
などは設定していなくても開けます。しかし、例えはline://
などはInfo.plist
に記載しないとエラーとなります。Info.plist
にLSApplicationQueriesSchemes
に配列としてline
を入れれば、LINEアプリを開くことができます。
2.URLを開く
1のcanOpenURL
の判定がYES/true
であれば、open(_ url: URL)
を使えると、ドキュメントには書いてあります。
現状の仕様
現状ですと、canOpenURL
のみLSApplicationQueriesSchemes
の中を見て判定しているようです。
LSApplicationQueriesSchemes
に記載していなくても、open(_ url: URL)
で開けてしまいます。
おそらく、この辺りの仕様は今後変更になるはずです。
その上で、現在できる実装方法は下記になります。
func openAnotherApp(url: URL) {
UIApplication.shared.open(url, options: [:]) { result in
if !result { //アプリが開けなかった場合
/*メッセージを表示*/
}
}
}
参考
canOpenURL
openURL
Discussion
記事拝見させていただきました。
最近webアプリを作成しており、あるサイトを踏むと自動的に他のアプリ(例えば写真)が開くような挙動を実現したいです。
その際はどのようなものを使用するのが適しているかご存知でしたら教えていただきたいです!