Open3

【Flutter】Deep Links ★

heyhey1028heyhey1028

DeepLinksとは

ディープリンクとはDynamic LinksやApp Links, Universal Linksなどの総称。URLリンクから直接モバイルアプリケーションの起動やアプリ内コンテンツを起動する事ができる技術。

最も簡易的なCustom URL scheme、より複雑な機能を有するプラットフォームに依存したディープリンク技術のUniversal Links(iOS), Android App Links(Android)、Firebaseが提供し2025年8月末にクローズするDynamic Linksの4つが主なソリューションとなっている。(この他にも複数のサードパーティサービスは存在)

これら技術の主な違いは以下に集約される

  • セキュリティ面の考慮
  • アプリがインストールされていない場合の挙動

URL

URL(Uniform Resource Locator) は主に以下の5つのパートで成り立っている

  1. スキーム
  2. ドメイン
  3. パス
  4. パラメータ
  5. アンカー

Custom URL scheme

用語

Deep Links: ウェブサイトやアプリケーション内の特定のページやコンテンツへ直接リンクする技術の総称。Deep Links技術のソリューションとしてCustom Url Scheme, Android Deep Links, App Links, Universal linksが提供されている。
scheme (custom scheme):
Android Deep Links:
Android App Links:
Custom Url Scheme:
Universal Links:
Deferred Deep Link:

参考

https://youtu.be/JFcg1aGJQ38
https://firebase.google.com/docs/dynamic-links/flutter/receive?hl=ja
https://idealive.jp/blog/2022/03/02/flutterでのdynamic-linksの導入/
https://qiita.com/mona/items/99622e91e49caae8a626
https://qiita.com/y-some/items/e0e0f5cb4d7d5559b09c
https://docs.flutter.dev/ui/navigation/deep-linking
https://zenn.dev/matsumaru/articles/fd63cf2793638f

heyhey1028heyhey1028

Dynamic Links

GoogleのFirebaseが運用するDeep Linkサービス。

仕組み

導入手順

Flutter

  1. FlutterプロジェクトとFirebaseプロジェクトを連携させる
  2. AndroidManifest.xmlに以下を追記
    <manifest>
      <application>
        <activity>
            <!-- ここから -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                    android:host="hogehoge.page.link"
                    android:scheme="https"/>
            </intent-filter>
            <!-- ここまで追記 -->
        </activity>
      </application>
    </manifest>
    
  3. Runner.entitlementsに以下を追記
    <plist>
        <dict>
            <!-- ここから -->
        <key>com.apple.developer.associated-domains</key>
        <array>
    	  <string>applinks:hogehoge.page.link</string>
        </array>
            <!-- ここまで追記 -->
       </dict>
    </plist>
    
  4. DynamicLinksを発行する

ホワイトリストに追加する


heyhey1028heyhey1028

Deep Linkをテストする

Simulator/emulatorでDeep Linkの挙動をテストしたい場合は以下をターミナルから実行する

Android

adb shell am start -W -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "scheme://myApp/page1/1" 

iOS

xcrun simctl openurl booted customscheme://ourApp/page/2