読者です 読者をやめる 読者になる 読者になる

【ios】Universal Linksを実装する - 概要とか

ios swift objective-c iPhoneアプリ開発

はじめに

今回やりたかったことは、あるurlへアクセスした際に
・未インストールならAppStoreへ誘導
・インストール済であればアプリを起動(起動時の画面も指定したい)

ios8以下では、ココとかの記事の通り、
アプリにカスタムurlスキームを設定して、htmlのiframeで強制的に遷移。アプリがインストールされていなければAppStoreへリダイレクトみたいな実装が一般的のようでした。

で、ios9でも上記の形で実装してみたのですがアプリが起動せず、、、
理由としては、ios9からはセキュリティポリシーが変更されてiframeでの強制的に画面遷移させるというのがダメになったようでした

そこでたどり着いたのがuniversal linksというものです。
urlとアプリをマッピングして、「http://***.com/app/」とかへアクセスすると
・アプリインストール済であればアプリが起動
・未インストールであればHTML(Webページ)を表示
のような挙動になってくれるようです

なので、未インストール用のHTMLを用意しておいてそこでAppStoreへ誘導すればやりたいことができるということでした

完成のイメージ

たとえば「http://***.com/app.html?id=12345」とかにアクセスされた際に上記のようになるような処理をHTMLで実装します

app.html

<html lang="ja">
  <meta charset="UTF-8">
  <body>

    <!-- ios8以下の場合 ココから -->
    <?php if (ios8以下の場合) { ?>
    <div style="width:0; height:0; overflow:hidden;">
      <iframe id="launch_frame" name="launch_frame">
      </iframe>
    </div>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.js"></script>
    <script type="text/javascript">
      $(function() {
      launch_frame.location.href="myapp://"; <!-- ★パラメータとかあればここで指定★ -->
        setTimeout(function() {
          location.href= "itmss://itunes.apple.com/us/app/myapp/id99999999?ls=1&mt=8"; <!-- ★ダウンロード画面へ★ -->
        }, 500);
      });
    </script>
    <?php } ?>
    <!-- ios8以下の場合 ココまで -->

    <!-- ios9の場合 ココから -->
    <?php if (ios9の場合) { ?>
    <a href="itmss://itunes.apple.com/us/app/myapp/id99999999?ls=1&mt=8">アプリをインストール</a>
    <?php } ?>
    <!-- ios9の場合 ここまで -->

  </body>
</html>

実際には、iosのバージョンをphpとかjavascriptとかで判定してHTMLを出し分ける形になるかと思います。
で、ios9でアプリがインストール済の端末の場合にはこのHTMLが表示されずにアプリが起動されるのでやりたいことができるということになります

さいごに

ちょっと長くなったので次回、実際にUniversal Linksを実装する手順をまとめたいと思います。
といっても以下のページによくまとまっているのですが、実際にやってみてハマった箇所とかもあったのでメモしてみようと思います
WWDC - URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現 - Qiita


具体的な実装方法まとめましたkimagureneet.hatenablog.com

以上です