アプリのDeep Links、Universal LinksとApp Linksの実装

image

URLを踏むと任意のアプリに遷移するDeep Links。いくつかの手法の中で、Universal LinksとApp Linksについて解説します。

Universal Links・App Linksについて

Universal LinksとApp Linksは動きとしてはほぼ同じで、iOSはUniversal Links、AndroidはApp Linksと呼ばれています。
どちらも、実装されているアプリが端末にインストールされている状態で、ブラウザ等から指定されたURLを踏むとアプリに遷移する仕組みです。もしアプリがインストールされていなければ、そのURLのWebページが表示されます。

今回は、本ホームページのブログが閲覧できるような可茂IT塾のアプリがあったとして、そのアプリにUniversal Links・App Linksで実装するにはどうすれば良いかを解説します。
/blog/* のURLを踏んだ際にアプリへ遷移するようにします。

Universal Linksの実装

流れは3ステップです。

  1. .well-known/apple-app-site-associationを追加
  2. Associated Domainsの追加
  3. アプリ側での検知とURLのハンドリング

1, .well-known/apple-app-site-associationを追加

Universal Linksを実装するには、アプリのドメインに.well-known/apple-app-site-associationというファイルを追加します。
可茂IT塾の場合、https://www.kamo-it.org/.well-known/apple-app-site-associationというURLになります。(存在しません)

内容は以下のようになります。

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAMID.org.kamoit.app",
        "paths": [
          "/blog/*",
        ]
      }
    ]
  }
}

2, Associated Domainsの追加

XcodeのSigning & CapabilitiesのAssociated Domainsに、applinks:www.kamo-it.orgを追加します。
img1

3, アプリ側での検知とURLのハンドリング

これだけで、ブログのURLを踏むとアプリに遷移するようになります。

プラス、アプリ側で特定の画面に遷移させたい場合は、Universal Linksを検知して、URLをハンドリングする必要がありますが、ここの説明は割愛します。
「swift handle universal links」や「flutter handle universal links」などでググってみてください。

App Linksの実装

こちらも同様に3ステップです。

  1. .well-known/assetlinks.jsonを追加
  2. AndroidManifest.xmlへのコード追加
  3. アプリ側での検知とURLのハンドリング

1, .well-known/assetlinks.jsonを追加

アプリのドメインに .well-known/assetlinks.json というファイルを追加します。

内容は以下のようになります。ここではパスは指定しません。

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "org.kamoit.app",
    "sha256_cert_fingerprints": ["SHA256のフィンガープリント"]
  }
}]

SHA256のフィンガープリントとは、アプリの署名に使われているキーストアのフィンガープリントです。

keytool -list -keystore my-upload-key.jks

で確認できます。

2, AndroidManifest.xmlへのコード追加

activityタグの中に以下のコードを追加します。

<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="www.kamo-it.org" android:pathPattern="/blog/.*"/>
</intent-filter>

3, アプリ側での検知とURLのハンドリング

これだけで、ブログのURLを踏むとアプリに遷移するようになります。

プラス、アプリ側で特定の画面に遷移させたい場合は、App Linksを検知して、URLをハンドリングする必要がありますが、ここの説明は割愛します。

まとめ

Universal Links・App Linksを使うと、Webアプリとの連携やLPとの連携がしやすくなります。

Webアプリがある場合はアプリがインストールされていればアプリが起動し、インストールされていなければWebアプリが起動するようにすることで、ユーザーの体験を向上させることができます。LPしかない場合でも、アプリの特定の画面を本機能を利用してURLとしてSNS等でシェアした場合、アプリがインストールされていればアプリが起動し、インストールされていなければLPが表示されるようにすることもできます。

うまく活用していきましょう!

お知らせ

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More

タグ

Flutter (110)初心者向け (28)イベント (18)Google Apps Script (15)Nextjs (12)可茂IT塾 (8)Firebase (7)riverpod (6)React (6)ChatGPT (5)vscode (5)デザイン (5)新卒 (4)就活 (4)Figma (4)Dart (4)JavaScript (4)お知らせ (4)FlutterWeb (3)Prisma (3)NestJS (3)Slack (3)TypeScript (3)ワーケーション (3)インターン (3)設計 (2)線型計画法 (2)事例 (2)Git (2)Image (2)File (2)Material Design (2)画像 (2)iOS (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)社会人 (2)大学生 (2)RSS (1)Google (1)Web (1)CodeRunner (1)個人開発 (1)Android (1)Unity (1)WebView (1)Twitter (1)フルリモート (1)TextScaler (1)textScaleFactor (1)学生向け (1)supabase (1)Java (1)Spring Boot (1)shell script (1)正規表現 (1)パワーポイント (1)趣味 (1)モンスターボール (1)CSS (1)SCSS (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)iPad (1)シェアハウス (1)スクレイピング (1)PageView (1)画面遷移 (1)flutter_hooks (1)Gmail (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)GCPコンソール (1)Google_ML_Kit (1)Vercel (1)Google Domains (1)DeepLeaning (1)深層学習 (1)Google Colab (1)コード生成 (1)GitHub Copilot (1)オンラインオフィス (1)オブジェクト指向 (1)クラスの継承 (1)ポリモーフィズム (1)LINE (1)Bitcoin (1)bitFlyer (1)コミュニティー (1)文系エンジニア (1)Freezed (1)permission_handler (1)flutter_local_notifications (1)markdown (1)GlobalKey (1)ValueKey (1)Key (1)アイコン (1)go_router (1)debug (1)datetime_picker (1)Apple Store Connect (1)FlutterGen (1)デバッグ (1)Widget Inspector (1)検索機能 (1)Shader (1)Navigator (1)メール送信 (1)Firebase App Distribution (1)Fastlane (1)Dio (1)CustomClipper (1)ClipPath (1)カスタム認証 (1)アニメーション (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)mac (1)csv (1)docker (1)GithubActions (1)Dialog (1)BI (1)LifeHack (1)ショートカット (1)Chrome (1)高校生 (1)キャリア教育 (1)非同期処理 (1)生体認証 (1)BackdropFilter (1)レビュー (1)getAuth (1)Algolia (1)コンサルティング (1)Symbol (1)

お知らせ

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More