💨

iOS ユニバーサルリンクにハマったのでメモ

2024/09/09に公開

アプリに直接遷移させるURLの種類

大きく「Deep link」と「Universal Links」があります。

ユニバーサルリンクとは

アプリやメッセージツール、SNSなどでURLをクリックしたときにブラウザではなく、アプリを開いてリンクでタップした該当画面に遷移するという経験はスマートフォンを使っているとよくあると思うのですが、ソレです。

設定方法

  1. アプリ側の設定
  2. サーバ側の設定
    大きく分けて2つあります。

アプリ側設定

  • Xcodeでの設定
    • Xcodeのプロジェクトで対象のターゲットを選びます。
    • "Signing & Capabilities" タブに進み、「+ Capability」ボタンをクリックし、「Associated Domains」を追加します。
    • 追加された "Associated Domains" セクションに、ユニバーサルリンクで使用するドメインを "applinks:" というプレフィックスとともに追加します。例: applinks:example.com
  • Apple Developer Center
    • アプリIDを編集し、"Associated Domains" サービスを有効にします。
  • コード
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else {
        return false
    }

    // URLを解析して特定のページを開くロジックをここに追加

    return true
}

サーバ側設定

  • apple-app-site-associationファイルを配置します。
    • pathは /.well-known/apple-app-site-association
    • 拡張子なし、jsonなども不要
  • 特定のパスをアプリで開くように指定します。
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TeamID.BundleID",
        "paths": [
          "/特定のパス/*"
        ]
      }
    ]
  }
}
  • apple-app-site-association ファイルのコンテンツタイプapplication/json にする必要がある

    • nginxの場合、confに設定
      location = /.well-known/apple-app-site-association {
      

    default_type application/json;
    }
    ```

  • リロードもする

    • confファイルのチェックコマンドをしてからリロードコマンド
sudo nginx -t

上記で設定にエラーがないか確認して

sudo nginx -s reload

ハマりどころ

  • "Associated Domains" セクションの、ユニバーサルリンクで使用するドメインをミスる
  • CDNのキャッシュ反映がタイムラグあるのでそれを忘れる
株式会社アクトビ

Discussion