Y

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);
}

アプリインストール済みの時

スクリーンショット 2016-02-12 14.31.25.png

アプリをインストールしていない時

スクリーンショット 2016-02-12 14.32.23.png

ちなみに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のサンプルリンクをクリック

IMG_2019.JPG

(2)アプリ未インストール時

Safariで地図が表示されます。

IMG_2020.JPG

(3)アプリインストール時

アプリが開き周辺の情報が表示されます。

IMG_2009.JPG

シームレスですね。なんとなくUniversal Linkのことが分かりました。

自分のアプリで試してみます

(1)設定(アプリ、サーバ側)

URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現

新規プロジェクトを作成して、上記サイトの

    1. iOSアプリでCapabilitiesの設定
    1. apple-app-site-associationというファイルをWebサイトに配置、署名

を行えば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

Universal Link Validator

iOS 9 Universal Links (apple-app-site-association) blues

TipMe

TipMe with IndieSquare