2017年に書いた記事なのですが、いまだにこの方法しかないとのことで、完全版
やりたいことって大体以下3つですよね
【1】xxxアプリがインストールされているか知りたい
【2】(インストールされてなかったら)AppStoreのxxxアプリの詳細画面を出したい
【3】(インストールされてたら)xxxアプリを起動したい
1つ1つの単品記事はよく見かけるのですが
あっちゃこっちゃ調べて結構めんどかったのと
LSApplicationQueriesSchemes
のトラップにやっぱり引っかかったので
全人類代表して長尾が1記事にまとめます。
【1】 xxxアプリがインストールされているか知りたい = canOpenURL
ソースコードにはこう書きます。
UIApplication.shared.canOpenURL(URL(string: "xxxアプリに設定してあるスキーム://")!)
つまり
if UIApplication.shared.canOpenURL(URL(string: "xxxアプリに設定してあるスキーム://")!) {
// xxxアプリがインストールされている
} else {
// xxxアプリがインストールされていない
}
です。
しかし
(iOS9以降は)ソースコード書いただけでは動かない
のです。
info.plist
のLSApplicationQueriesSchemes
に
xxxアプリのスキームを書いてあげる必要があります。
① info.plistのLSApplicationQueriesSchemesにxxxアプリのスキームを記述する方法
1、info.plistのInformation Property Listの横の+をクリック(+が見えなかったりしますがマウスを乗せると見えます)
2、+をクリックするとこんな感じで選べみたいになりますが無視してLSApplicationQueriesSchemes
という文字をコピって
4、・貼りつけたLSApplicationQueriesSchemes
のTypeをArrayにする(❶)
・(写真では白い三角で大変見づらいですが)出てきた▶︎をクリックする(❷)
・(▶︎をクリックしても何も起こらないが)LSApplicationQueriesSchemes
の右の+をクリックする(❸)
5、item 0というのが登場するのでValueにxxxアプリのスキームを書く
(写真はxxxアプリがTwitterの場合の例です)
以上の
UIApplication.shared.canOpenURL(URL(string: "xxxアプリに設定してあるスキーム://")!)
のソースコードの記述と
info.plistのLSApplicationQueriesSchemesにxxxアプリのスキームを記述
があれば
xxxアプリがインストールされているかを知ることができます。
スキームって?
**アプリを特定するための自由に決められる文字列(名前)**のことです。
xxxアプリがTwitterとかLINEとかFacebookみたいに
他人が作ったアプリ
の場合は
スキームを知るにはxxxアプリを作った人に聞くしかないですが
有名なアプリ
であれば我々のアプリのスキームはこれですと大体公開されてます。
せっかくなのでよく使うスキームを書いておきます。
Twitter
twitter
LINE
line
Facebook
fb (特定のページを開きたいなどは別のスキームが必要みたいです)
Instagram
instagram
けっこう、まんまですね。
逆にxxxアプリが自作アプリの場合は
あらかじめxxxアプリにスキームを設定しておく必要があるので
xxxアプリにスキームを設定する方法も書いておきます。
② xxxアプリにスキームを設定する方法
1、プロジェクトが選択されている状態で、ピンクの丸がついてるinfoタブをクリックすると
下の方にURLTypesというのがあるので+をクリックします。
3、Identifierのとこには**$(PRODUCT_BUNDLE_IDENTIFIER)**というものを$マークごと入れます。
URL Schemesのとこに、自分で決めた文字列を入れます。
(世に出てる他のアプリと被らないような文字列にします。xxxとかだと被りそうなのでダメです。)
4、ちゃんと設定できたかどうかはinfo.plistに入っているかを見れば確認できます。
TwitterとかLINEのアプリには
ここにtwitterとかlineとかの文字列が設定されてるワケです。
【2】 AppStoreのxxxアプリの詳細画面を出したい = openURL
ソースコードは
guard let url = URL( string: "itms-apps://itunes.apple.com/app/id{AppleID}" ) else { return }
UIApplication.shared.openURL( url )
AppleIDっていうのは
AppStoreでアプリを表示した時のURLのidxxxxxxxxxの数字の部分と同じヤツです
実際IDを入れて書くとこんな感じです↓
guard let url = URL( string: "itms-apps://itunes.apple.com/app/id1065859705" ) else { return }
UIApplication.shared.openURL( url )
【3】 xxxアプリを起動したい = openURL
【2】と同じことです。
起動したいアプリによってURLとかスキームを変えるだけです。
xxxというスキームの自作アプリなどをシンプルに起動したい場合
guard let twitterUrl = URL(string: "xxx://") else { return }
UIApplication.shared.openURL(twitterUrl)
Twitterアプリだったらこうなりますね↓
guard let twitterUrl = URL(string: "twitter://") else { return }
UIApplication.shared.openURL(twitterUrl)
おまけで、Twitterの特定のユーザのプロフィールを起動したい場合はこうです↓
guard let twitterUrl = URL(string: "twitter://user?id=371600086") else { return }
UIApplication.shared.openURL(twitterUrl)
LSApplicationQueriesSchemesの記述が必要なのは【1】だけ
【2】【3】のopenURLやりたいだけの時はLSApplicationQueriesSchemes
の記述は必要ないです
LSApplicationQueriesSchemes
の記述なしでopenURLは動きます。
アプリ起動するんだから、絶対必要そうな感じしますよね?
いらないんだって。これが一番ややこしかった。
【1】【2】【3】など、やってみたけどできなかった方
コメントくれたらお返ししますのでお気軽にどうぞ!