App Links と Universal Links の違いまとめ【Android / iOS 比較】

Android と iOS のアプリ開発をしていると、
「同じURLなのに、Androidはアプリが起動して、iOSはブラウザが開く」
といった挙動に悩まされることがあります。

この原因の多くは、
App Links(Android)Universal Links(iOS)
仕組みの違いを正しく理解できていないことにあります。

この記事では、両者の違いを
仕組み・実装方法・確認ポイント・ハマりやすい罠
という観点で、実務目線で整理します。


スポンサーリンク

まず結論:App Links と Universal Links は「似て非なるもの」

どちらも「https の URL をタップするとアプリが起動する」仕組みですが、
成立条件と OS 側の扱いが大きく異なります。

  • Android:App Links
    Intent Filter を起点に、OS がドメインとアプリの関連を自動検証
  • iOS:Universal Links
    Associated Domains を起点に、OS がアプリとドメインを関連付け

つまり、
Android は「アプリ主導」
iOS は「OS / ドメイン主導」
という考え方をすると理解しやすいです。


Android:App Links の仕組み

App Links が成立する条件

  • https の Intent Filter が定義されている
  • android:autoVerify="true" が付いている
  • サーバーに assetlinks.json が配置されている
  • packageName と SHA-256(署名)が一致している

AndroidManifest.xml の例


<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/article" />
</intent-filter>

assetlinks.json の例


[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.app",
      "sha256_cert_fingerprints": [
        "AA:BB:CC:DD:..."
      ]
    }
  }
]

App Links が動かない原因で一番多いのは、
リリース証明書ではなくデバッグ証明書の SHA-256 を使っているケースです。


iOS:Universal Links の仕組み

Universal Links が成立する条件

  • Associated Domains が有効化されている
  • applinks:example.com が設定されている
  • サーバーに apple-app-site-association が配置されている

apple-app-site-association の例


{
  "applinks": {
    "details": [
      {
        "appID": "TEAMID.com.example.app",
        "paths": [ "/article/*" ]
      }
    ]
  }
}

iOS の場合、
Safari の挙動・OS のキャッシュ・ユーザー操作の影響を強く受けるため、
「設定は合っているのに動かない」状態が発生しやすいです。


App Links と Universal Links の比較表

項目Android(App Links)iOS(Universal Links)
起点Intent FilterAssociated Domains
サーバーファイルassetlinks.jsonapple-app-site-association
証明情報SHA-256(署名)Team ID / Bundle ID
ユーザー影響端末の「対応リンク」設定Safari の挙動・履歴

よくあるハマりポイント

  • Android:assetlinks.json はあるが SHA が違う
  • iOS:AASA がリダイレクトされている
  • SNS アプリ内ブラウザでは動かない
  • 端末側でリンク関連付けが無効になっている

両方に共通して言えるのは、
「実装だけでなく、端末・OS・ユーザー状態も含めて設計する必要がある」
という点です。


まとめ

App Links と Universal Links は、
同じ役割を持ちながら、思想も実装も別物です。

Android / iOS 両対応アプリでは、
「なぜ片方だけ動かないのか?」を説明できる状態にしておくことが重要です。

リンク起動まわりでハマったときの備忘録として、
この記事が役立てば幸いです。

コメント

タイトルとURLをコピーしました