iOSでリダイレクト付きユニバーサルリンクを追加する方法

iOSでユニバーサルリンクを設定し、ウェブサイトからアプリへシームレスにユーザーをリダイレクトする方法を学び、リダイレクト使用時の制限事項を理解しましょう。

Intermediate

iOSのユニバーサルリンクは、ウェブサイトからアプリ内の特定コンテンツへユーザーをシームレスに誘導する方法を提供します。ただし、リダイレクトに関する重要な制限事項を理解することが不可欠です:Appleが実装したセキュリティ対策のため、ユニバーサルリンクは通常、自動リダイレクトでは機能しません。ユニバーサルリンクがクリックされた後、自動的にリダイレクトされると、iOSは通常、アプリを起動する代わりにSafariでウェブフォールバックを開きます。

つまり、リダイレクトされたリンクでアプリを開くことを意図している場合、その操作はおそらく失敗し、ユーザーはブラウザ内のウェブページに遷移します。

この制限があるにもかかわらず、優れたユーザー体験のためにはユニバーサルリンクの設定が不可欠です。実装方法は以下の通りです:

1. Xcodeプロジェクトで関連ドメインを有効化する

まず、iOSアプリがユニバーサルリンクをサポートする意図があることを明示します。* Xcodeでプロジェクトを開きます。* アプリのターゲットを選択します。* 「署名と機能」タブに移動します。* 「+ 機能」ボタンをクリックし、「関連ドメイン」を選択します。 * ドメインを applinks: プレフィックス付きで追加します(例: applinks:yourdomain.com)。

2. apple-app-site-association (AASA) ファイルの作成とホスティング

この JSON ファイルは、ウェブサイト上のどの URL をアプリで開くべきかを iOS に伝えます。 * ファイルの作成: ファイル名を apple-app-site-association(拡張子なし)とします。* 内容: ファイルには、アプリのバンドルIDと処理可能なパスを指定するJSONを含める必要があります。

```json {
 "applinks": {  "apps": [],  "details": [  {  "appID": "YOUR_TEAM_ID.YOUR_BUNDLE_ID",  "paths": [ "/path/to/content/*", "/another/path/*", "*" ]
 }  ]  }
`*``YOUR_TEAM_ID`> `YOUR_TEAM_ID` with your Apple Developer Team ID  `YOUR_BUNDLE_ID` with your app's bundle identifier.
* `paths` 配列は、アプリが処理できる URL を指定します。ワイルドカード(例: `*`)を使用して複数のパスに一致させることができます。 
  • ファイルのホスティング: このファイルをウェブサーバーのルートディレクトリ、または.well-knownディレクトリ内(例: https://yourdomain.com/.well-known/apple-app-site-association)にアップロードしてください。
    • HTTPS経由で、リダイレクトなしでアクセス可能である必要があります。
    • コンテンツタイプがapplication/jsonであることを確認してください。

3. アプリ内でのユニバーサルリンクの処理

ユニバーサルリンク経由で起動された際にアプリが応答する必要があります。* AppDelegate.swift ファイルに application(_:continue:restorationHandler:) メソッドを実装してください。 * このメソッド内で、URLとパラメータを抽出して、アプリ内の適切なコンテンツへユーザーを誘導できます。

```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
 guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,  let incomingURL = userActivity.webpageURL else {
 return false  }

 // incomingURL 処理 , e. g., parse its path and query parameters
 print("受信URL: \(incomingURL)")
 // : 特定の to a specific screen based on the URL
 // handleUniversalLink(url: incomingURL)  return true }
``` 

リダイレクトと回避策に関する考慮事項

  • 直接クリックのみ: ユニバーサルリンクは、ユーザーが直接タップした場合に動作するよう設計されています。
  • マーケティングオートメーションとトラッキング: マーケティングオートメーションツールを使用する場合や、リダイレクトを伴うクリック測定が必要な場合、ユーザーはアプリではなくウェブフォールバックURLに送信される可能性があります。そのような場合は、アトリビューション測定のソリューションを提供し、メールサービスプロバイダーと直接連携するディープリンクプロバイダーの利用を検討してください。
  • Safariのナビゲーション矢印: iOSではSafariにナビゲーション矢印が表示される場合があり、これをクリックするとアプリがインストールされていても関連ウェブサイトに移動することがあります。そのウェブサイトがApp Storeへリダイレクトすると、ユーザー体験が混乱する可能性があります。
  • フォールバックメカニズム: アプリがインストールされていない場合、ユニバーサルリンクは指定されたURLをSafariで開きます。アプリが検出されない場合にユーザーをApp Storeへリダイレクトするフォールバックをウェブサイトに実装できます。

ユニバーサルリンクのテスト方法

  • 実機またはシミュレータにアプリをインストールする。
  • ユニバーサルリンクを自身にメール送信するか、ウェブページにホストする。
  • デバイスのメールクライアントまたはウェブブラウザからリンクをタップする。
  • リンクが意図したコンテンツに直接アプリを開くことを確認します。アプリがインストールされていない場合、フォールバックURLへ正しくリダイレクトされるか確認してください。
  • Appleのコンテンツ配信ネットワーク(CDN)がAASAファイルを取得するまで、最大24時間かかる可能性があることに留意してください。