0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOS14以降のUniversal Links開発時のTips

Last updated at Posted at 2023-07-30

今更ながら、Universal Links開発時に少しつまづいたポイントのメモ。

Universal Linksのおさらい

Appleが提供する、いわゆるディープリンクの手法の一つです。これによりウェブサイトURLから直接アプリ内のコンテンツを開く、といったことが可能になります。あるいは、カメラからQRコードを読み取った際に表示されるリンクから、アプリに遷移することも可能です。(未インストールの場合とインストール時の場合で表示されるリンク・タップ時の挙動が異なります)

最低限必要になる実装は2つあります。

  1. TARGETS → Signing & Capabilities → Associated Domains を有効にし、applinks:{domain} の記載を追加
  2. apple-app-site-association をサーバーに配置
apple-app-site-association.json
{
  "applinks": {
       "apps": [],
        "details": [
           {
               "appID":"{TeamID}.{Bundle Identifier}",
               "paths":[ "*" ]
           }
         ]
    }
}

appIDとpathsの部分が可変になるかと思います。pathsにはディープリンク起動させたいドメイン下のパスを設定します。ワイルドカードの設定も可能です。

こちらを https://{domain}/.well-known/apple-app-site-association に配置します。(おそらくjson拡張子は不要)
これによりドメインとアプリの関連づけが行われ、Custom URL Schemeで問題となっていた、UXの低下(起動する前にダイアログが出る)・セキュリティの低下(スキームの重複を避けられない)・インストール時/未インストール時の挙動(そもそもインストールされていなければ動かない)などの面において、優位性を持つことが出来ます。

iOS14以降での開発時に必要な設定

とある案件で、とりあえずカメラからURL付きのQRコードを読み取らせてインストール済みのアプリに遷移できるか?という検証を行いました。

deployment targetはiOS14で、上記の設定を行なっていればアプリが起動してくれるはず。applicationメソッドで起動時のハンドリングを行うこともできますが、そちらは一旦実装無しとしました。

が、起動せず。アプリをインストールしているにも関わらず、タップしてもQRコードに設定したURLへブラウザ遷移するのみ。

なぜなのか。調べてみるとこれは、iOS14以降の仕様変更が起因しているみたいです。

Apple CDN

アプリはapple-app-site-associationをダウンロードする必要があります。これまでこちらをリクエストする際は、サーバに直接リクエストをしていました。このリクエスト先が、Apple CDNに移ったとのことです。

以前まではアプリに関連するドメインが複数あった場合、その分だけリクエストを行っていたのですが、Apple CDNへのリクエストではこれを1度に全て取得することが可能になったようです。そしてapple-app-site-associationに関しては、Apple CDNからリクエストするようになったとのことです。

この仕様変更によりUniversal Linksが起動しなくなる理由の一つは、サーバ側のIP制限にあるようです。Apple CDNがapple-app-site-associationを取得することが出来なくなっていたため、当然アプリにもダウンロードされることがなく起きていた、と考えられます。

対策

取れる策としては、2つあります。

  1. IP制限を外す
  2. 開発モードとして挙動するよう設定し、Apple CDNをバイパスする

1は単純なので、2について解説します。

まず、アプリ側で設定したapplinksの後ろに?mode=developerというオプションを追加します。
次に、開発向けの署名アプリで「設定」> Developer > Associated Domains Development をONにします。
こうするとApple CDNをバイパス(省略)し、直接ドメインのapple-app-site-associationを取得しにいくようです。

というような流れで一件落着しました。


以上、遅ればせながらUniversal LinksのTipsでした。担当する案件によってすぐに当たらない時もあるので、自主的に手を動かすことは大切ですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?