URLスキームはダイアログが出るからUniversal Linksを試してみた
URLスキームはiOS9からダイアログが出るようになった
いまさらネタですが... URLスキームを使ってアプリを開く、またはアプリダウンロードを促す画面に遷移する。これをやるためにアレコレ実装していましたが、iOS9からできなくなりました。
これまではなんとか実装していた
iOSはURLスキーマ起動を試みて、500ms待ってもダメだったらストアに遷移するって実装をしてましたが、iOS9から確認ダイアログが表示される仕様になりました。
if (userAgent.search(/iphone|ipad|ipod/) > -1) { launch_frame.location.href = IOS_SCHEME + '://'; setTimeout(function() { location.href = IOS_STORE; }, 500); }
アプリインストール済みの時
アプリをインストールしていない時
ちなみにAndroidは問題ない
Androidは以下の設定で実現できます。(アプリが未インストールならストアが開く。簡単!)
if (userAgent.search(/android/) > -1) { document.location = 'intent://#Intent;scheme=' + ANDROID_SCHEME + ';package=' + ANDROID_PACKAGE + ';end'; }
Universal Linksなら解決できる?
iOS9の新機能Universal Linksなら解決できるかもしれないと思い、まずUniversal Linksを体験しました。
51 iOS 9 Apps That Support Universal Links (updated Dec 19th)
(1)Citymapperのサンプルリンクをクリック
(2)アプリ未インストール時
Safariで地図が表示されます。
(3)アプリインストール時
アプリが開き周辺の情報が表示されます。
シームレスですね。なんとなくUniversal Linkのことが分かりました。
自分のアプリで試してみます
(1)設定(アプリ、サーバ側)
URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現
新規プロジェクトを作成して、上記サイトの
を行えばOKです。(詳しい説明は省略します)
(2)実行
iPhoneのメモ帳にURLを書きます。
https://sample.com/hoge
URLをタップした時に、(1)で作成したアプリをインストール済みの場合はアプリが開き、未インストール時は https://sample.com/hoge のWebページがSafariで表示されますね。
まとめ
パラメータの受け取り、pathsの設定など本格的に利用するにはもっと詳しく調べる必要がありそうです。
参考
URLスキームを利用して、アプリが入ってたらアプリ起動、入ってなかったらストアへ!を実現。
URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現
iOS9でカスタムURLスキームの遷移に失敗するときの注意点
[iOS9] カスタムURLスキームで起動に失敗する(呼び出し元)
Universal Links に対応するときに考慮したいこと
URLSchemeでアプリの有無によって挙動を変える(iOS9対応版)
51 iOS 9 Apps That Support Universal Links (updated Dec 19th)
Universal Links のサーバ側の対応をやってみた
Breaking down iOS 9 Universal Links
iOS 9 Universal Links (apple-app-site-association) blues