見出し画像

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

アプリに直接遷移させる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のキャッシュ反映がタイムラグあるのでそれを忘れる

この記事が気に入ったらサポートをしてみませんか?