AppleiOS 10iOS 11iOS 9ディープリンキングモバイルマーケティングユニバーサルリンク技術操作方法

Apple iOSでディープリンクするユニバーサルリンクを設定する方法

By 10月 30, 2017 No Comments

最新情報:本記事の初投稿は2015年7月24日ですが、最新のiOS 9.2に関する情報で更新されております。Appleがディープリンキング用の URIスキーム, をサポートしなくなったため、OSで適切にディープリンクするには開発者がユニバーサルリンクを実装しなければなりません。既にURIスキームを使用している場合は ユニバーサルリンク への移行に関する私たちのブログをお読みください。 

Branchでは、寝ても覚めてもディープリンキングという毎日です。ユーザーをあなたのアプリに移動させられるよう、私たちはプラットフォーム、デバイス、アプリストアを問わずどこでも使える単一リンクを作成しました。この単一リンクは、どのチャネル(Facebook、Twitter、Gmailなど)からでもあなたのアプリにリンクし、どの検索ポータル(Google App Indexing、Bing検索、Apple Spotlight)にもリストされるようフルに設定されています。

これはうまく動きます。事実、私たちは既に「 Google App Indexing を設定する方法」と「Google App Indexingでディープリンクする方法」というブログ投稿を残しています。

Slide1

Appleが前回のWWDCでユニバーサルリンクを発表した時、私たちはBranchのディープリンキングプラットフォームに組み込みたいと興奮しました。ただ、それをうまく動作させることがどれほど複雑なのかは思いも寄りませんでしたが。その作業に多大な時間を費やし、ドキュメンテーションの内容の乏しさを知った結果、私たちは、他の人々を救うべく、操作方法に関するガイドを共有することにしました。

iOS 9でユニバーサルリンクが動作するしくみ

ユニバーサルリンクが登場するまでは、インストールされているアプリを開く主要メカニズムといえば、SafariでアプリのURIスキーム(そのアプリのPLISTに登録)にリダイレクトしてみることでした。それによってSafariにルーティング論理が与えられましたが、アプリがインストールされているかどうかはチェックできませんでした。そこで開発者たちは、アプリがインストールされている場合に備えて四六時中% URIスキームを呼び出そうとしましたが、タイマーを使ってインストールされていなことがわかった時は、潔くアプリストアへにフォールバックしました。

iOS 9 ユニバーサルリンクにはこれを解決する意図がありました。リンクがクリックされると、iOSは最初にSafariを開くのではなく、そのリンクに関連付けられているドメインにユニバーサルリンクが登録されていないかどうかをチェックした後、該当するアプリのインストール状況をチェックします。アプリがインストールされていれば開きます。インストールされていなければ、Safariがそのhttp(s)リンクを読み込みます。

機能面でいえば、あなたのアプリかモバイルサイトのいずれかを開く単一リンクが手に入ります。

ユニバーサルリンク統合ガイド

あなたのアプリでユニバーサルリンクを動作させるハイレベルなステップを紹介します:

1. 認証済みドメインに自分のアプリを設定する

  1. 自分のアプリをdeveloper.apple.comに登録する
  2. 自分のアプリ識別子で関連ドメインを有効にする
  3. 自分のXcodeプロジェクトで関連ドメインを有効にする
  4. 適切なドメイン
  5. その資格ファイルがビルドに含まれていることを確認する

Branchをお使いであればこれで終了です。それ以外の場合はセクション2に進んでください。

2. apple-app-site-associationファイルをホストするよう自分のウェブサイトを設定する

  1. ドメイン名を購入するか既存のドメイン名から選ぶ
  2. そのドメイン名のためにSSL認証を取得する
  3. 構造化されたapple-app-site-association JSONファイルを作成する
  4. SSL認証でJSONファイルに署名する
  5. ファイルサーバーを設定する

Branchサービスをお使いであれば、SSL証明書の作成やサーバーのJSONファイルの署名およびホストにまつわる煩雑さをすべて私たちが引き受けるので、これを活用できるよう自分のアプリのコードを変更するだけで結構です。この件ついては本投稿の最後に紹介します。

注: 私たちはまた、apple-app-site-associationファイルが適切に設定されているかどうかをチェックするツールも構築しました

セクション1:アプリ資格の設定

ユニバーサルリンク用に自分のXcodeプロジェクト を登録するためには、Apple Developer PortalでApp

IDを作成し、適切な資格を有効にします。これは、アプリ内購入で求められる設定に非常に似ています。

ユニバーサルリンクにはワイルドカードApp IDを使用できません

自分のアプリをdevelopers.apple.comに登録する

最初にdeveloper.apple.comにアクセスしてログインします。次に、Certificate, Identifiers & Profiles、Identifiersの順にクリックします。

Apple Developer Portal for Universal LinksApple Dev Portal for Universal Links

登録済みの App IDをまだお持ちでない場合は、「+」記号をクリックして作成する必要があります。既にお持ちの場合は、スキップして次のセクションに進みます。

ここでは2つフィールド(名前とバンドルID)に入力が必要です。名前は基本的にどんなものでも構いません。バンドルIDにはバンドルの値を入力してください。

Explicit App ID for Universal Links

 

●この値は、適切なビルドターゲットのあなたのXcodeプロジェクトの「一般」タブで見つかります。

Setting up Universal Links in xcode

developers.apple.comで、自分の App IDの関連ドメイン有効にする

既存または進行中のApp IDについては、最後のセクションまでスクロールダウンして関連ドメインサービスをチェックします。

Setting up App ID for Universal Links

 

スクロールしてダウンして保存をクリックします。

自分のXcodeプロジェクトで関連ドメインを有効にする

ここで、自分のXcodeプロジェクト内で関連ドメイン資格を有効にしたいとします。まず、自分のXcodeプロジェクトに自分のApp IDの登録場所として選択したものと同じチームが含まれていることを確認します。その後、自分のプロジェクトファイルの「機能」に進みます。

Universal Links in xcode

スクロールダウンして関連ドメインを有効にし、アコーディオンを展開します。

setting up associated domain for Universal Links

このようなエラーが見つかった場合は、次の項目をチェックしてください:

  1. 正しいチームを選んでいるかどうか
  2. 自分のXcodeプロジェクトのバンドル識別子がApp IDの登録に使用したものと一致するかどうか

ドメイン資格を追加する

ドメインセクションで、適切なドメインタグを追加します。そのタグはapplinks:で始まるようにしてください。下の例ではapplinks:yourdomain.comを追加したことがわかります。

App Links and your domain

資格ファイルがビルドに含まれていることを確認する

ただし、何らかの理由でXcode 7が自分のビルドの自分の資格に含まれない場合があります。正しく構築されるよう、プロジェクトブラウザで、自分の新しい資格ファイルが正しいターゲットのメンバーシップ用に選択されていることを確認します

Configuring xcode for universal links

 

Branchリンクをお使いであればここで終了です!それ以外の場合は、引き続きお読みいただくか、下ボのタンを使って統合を開始します。

悩み続ける時間を省きたい場合は、JSONホスティングとSSL証明作業をすべて回避し、Branchリンクだけを使用してホストさせることもできます。
https://dev.branch.io/recipes/branch_universal_links
ただし、全体を仕切り、問題が起こっても構わないという方はそのまま続行してください。

セクション2:apple-app-site-associationファイルの設定

ユニバーサルリンクはあなたのウェブサイトのURLをアプリリンクに変換します。このユニバーサルリンクを活用にするには、ウェブサーバーを実行している必要があります。このプロセスを進めるうえで私たちの Universal Links Validator を使えば、apple-app-site-associationファイルが適切に設定されているかどうかをチェックできます。apple-app-site-association

ドメインを選択する

まず、自分のユニバーサルリンクを使用するドメインを特定します。新しいドメインを登録するか、既存のドメインを使用します。新しいドメインを登録する場合は、gandi.netのようにクリーンでノンスパムの登録業者をお勧めします。

SSL認証を取得する

ユニバーサルリンクのホストに使用するドメイン用にSSL認証ファイルを取得する必要があります。取得するには、SSL用にドメインを登録するサードパーティのサービスを使い、必要となるファイルを作成しなければなりません。検討の末、私たちはbranch.ioおよび関連するサブドメインの処理にDigicertを選びました。

自分のSSL認証を作成するステップは次のとおりです。

  1. https://www.digicert.com/easy-csr/openssl.htmにアクセスし、上部のフォームに入力してopenSSLコマンドを生成します。このウィンドウは開いたままにしておいてください
  2. リモートサーバーへのログイン
  3. openSSLコマンドを実行し、証明書署名リクエスト (.csr) と認証ファイル (.cert) を生成します
  4. で自分のSSL認証の支払いを行いますhttps://www.digicert.com/welcome/ssl-plus.htm.
  5. Digicertが承認し、最終ファイルを送信してくるまで待ちます
  6. 最後に、yourdomain.com.cert、yourdomain.com.key、digicertintermediate.certを自分のリモートサーバーの同じディレクトリに移動させます

自分のapple-app-site-association JSONを作成する

このJSONファイルは非常に標準的な構造なので、このバージョンをコピーしてご自分のニーズに合うよう編集できます。正しい値を取得できる場所を下に示します。

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "T5TQ36Q2SQ.com.branch.sdk.TestBed",
        "paths": ["*"]
      }
    ]
  }
}

唯一変更が必要なフィールドは、T5TQ36Q2SQ.com.branch.sdk.TestBedに関連付けられています。これは、実際は2つの値がピリオドで結合したものです。どちらの値も、developers.apple.comの「Identifiers」>「 App IDs」セクションで見つかります。下図のように、対応する登録済みApp IDをクリックします。

Configuring Apple ID for Universal Links

この例ではプレフィックスとIDがピリオドで結合し、T5TQ36Q2SQ.com.branch.sdk.TestBedに関連付けられています。

このJSONファイルをapple-app-site-association-unsignedとして保存します。

JSONファイルに自分のSSL証明書で署名します

注: 自分のドメインをHTTPSとして認証している場合は、このステップをスキップしてJSONをプレーンテキストで送信できます。Apple’s updated requirements:

 

自分のサーバーの、以前のステップにある認証およびキーファイルと同じディレクトリにapple-app-site-association-unsignedファイルをアップロードします。コマンドラインで、ディレクトリをそのフォルダに変更して次のコマンドを実行します。

cat apple-app-site-association-unsigned | openssl smime -sign -inkey yourdomain.com.key -signer yourdomain.com.cert -certfile digicertintermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

これによってapple-app-site-associationファイルが生成されます

自分のファイルサーバーを設定する

さあ、これで署名済みapple-app-site-associationファイルが準備できました。後はファイルサーバーを設定してホストさせるだけです。ただし、いくつか注意すべき点があります。

  1. application/pkcs7-mimeというヘッダで送信しなければなりません
  2. youdomain.com/apple-app-site-associationというヘッドポイントから送信しなければなりません
  3. 200 httpコードを返さなければなりません

私たちは、自社のNode+Expressリンクサーバーを使い、すべてのBranch統合済みアプリ用のものを設定しました。参考までに、私たちが使用したコードをお見せします。

var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association');
app.get('/apple-app-site-association', function(req, res, next) {
     res.set('Content-Type', 'application/json');
     res.status(200).send(aasa);
});

BranchおよびiOS 9ユニバーサルリンク統合ガイド

既にお伝えしたとおり、JSONホスティングやSSL証明書の作業をすべて回避し、Branchリンクを使うだけでホストすることもできます。
楽しいリンキングをどうぞ!