スパイダープラス Tech Blog

建設SaaS「スパイダープラス」のエンジニアとデザイナーのブログ

Universal Links によるAppコンテンツへのアクセスが可能になりました

はじめに

こんにちは、スパイダープラス開発メンバーのちょっくんです。 みなさんはディープリンクという手法をご存知でしょうか? ウェブリンクからアプリを起動して特定の画面を表示させる、アレです。 ディープリンクにはいくつか手法があり、SPIDER+では長らくカスタムURLスキームを採用していました。しかし、この手法ではGMailでリンクを受け取った場合に、アプリを起動できなくなっていることがわかりました。 そこでiOS9以上で推奨されるUniversal Linksを採用したことについて紹介します。

GMailでカスタムURLスキームが利用できなかった理由

【URLスキームをGMailで送った時のサンプルイメージ】 URLスキーム部分が無効化されていました。後続のドメイン以下の部分をタップすると自動的に「http://」が追加され、アプリが起動できず、またwebサイトの表示もできないという問題が発生していました。 Goolgeが許可している特定のURLスキームしか利用できなくなっているようです。

Universal Linksの仕組み

詳しい仕組みはApple Developerやその他技術ブログなどで公開されていますので割愛しますが、アプリのentitlementに定義されたapplinksドメインApple CDNがチェックし、iOSに認識させることで、iOSで該当リンクをタップしたときに指定アプリが起動できるようになる、というものです。 Apple CDNがチェックするのはapple-app-site-assosiationファイル(AASAファイル)で、ドメインのウェブ直下に以下のように配置します。

https://<ドメイン>/.well-known/apple-app-site-association

困ったこと

SPIDER+では契約ごとに利用環境を提供しているため、以下のようにサブドメインを発行しています。

https://<ご契約別サブドメイン名>.spider-net.jp

webサイトに公開されている技術ブログなどでは、単一ドメインで実現する記事ばかりでしたので、サブドメインを含む場合にどうするのか、ここが難題でした。 AASAファイルをサブドメインすべてに配置するのは現実的ではないためです。

解決方法

AASAファイルの配置を変えずに、Appのentitlementにどのような設定をすれば、サブドメイン指定できるか試行錯誤いたしました。結果として、AASAファイルはメインドメインに配置した上で、Appのentitlementを設定3のように定義することで、サブドメインにログインしているアカウントでも、アプリのコンテンツが表示されるようになりました。 後日ドキュメントを確認したところ、参考記事の TN3155:ユニバーサルリンクのデバッグサブドメインの指定方法について記載がありました。

・設定1 applinks: .spider-net.jp

・設定2 applinks: spider-net.jp

・設定3 applinks:* spider-net.jp

🎉【Universal LinksをGMailで送った時のサンプルイメージ】

おわりに

Universal Linksの採用により、GMailのリンクから直接アプリのコンテンツを表示できるようになり、お客様の不便が一つ解消されて嬉しく思っております。ユーザ間でのコンテンツの共有にご利用いただけたらと思います。

また、ドメインの作成、AASAファイルの配置等、アプリエンジニアでは分からないサーバサイドの仕組み構築に協力いただいたSREチームメンバーには大変感謝いたします。

スパイダープラスでは、エンジニアを募集しています。興味のある方はぜひ、カジュアル面談からでもお気軽にご応募ください!

参考記事

Allowing apps and websites to link to your content | Apple Developer

developer.apple.com

TN3155:ユニバーサルリンクのデバッグ developer.apple.com