🐙

Flutter 3.7系へのアップデートでfirebase_dynamic_linksを使っている場合の注意点

2023/03/28に公開

はじめに

Flutter 3.7系へアップデートした際、Dynamic Links周りで少し問題が発生したので、その解決方法を共有します。

targetSdkVersion

FlutterでAndroidアプリを作成すると、デフォルトの設定ではbuild.gradleは以下のようになるでしょう。

android/app/build.gradle
android {
    compileSdkVersion flutter.compileSdkVersion
    ndkVersion flutter.ndkVersion

    ~~~省略
        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion

このflutter.targetSdkVersionなどは、Flutter SDKのflutter.gradleに定義されています。
以下は3.7系のものです。

packages/flutter_tools/gradle/flutter.gradle
/** For apps only. Provides the flutter extension used in app/build.gradle. */
class FlutterExtension {
    /** Sets the compileSdkVersion used by default in Flutter app projects. */
    static int compileSdkVersion = 33

    /** Sets the minSdkVersion used by default in Flutter app projects. */
    static int minSdkVersion = 16

    /** Sets the targetSdkVersion used by default in Flutter app projects. */
    static int targetSdkVersion = 33

    ~~~省略
}

こちらは3.3系です。

packages/flutter_tools/gradle/flutter.gradle
/** For apps only. Provides the flutter extension used in app/build.gradle. */
class FlutterExtension {
    /** Sets the compileSdkVersion used by default in Flutter app projects. */
    static int compileSdkVersion = 31

    /** Sets the minSdkVersion used by default in Flutter app projects. */
    static int minSdkVersion = 16

    /** Sets the targetSdkVersion used by default in Flutter app projects. */
    static int targetSdkVersion = 31

    ~~~省略
}

比較すると、compileSdkVersionとtargetSdkVersionが31から33に上がっていることがわかります。

Dynamic Linksでの問題

私の場合、targetSdkVersionが33に変わったことで、Android 13の端末でDynamic Linksが開けない問題が発生しました。以下の記事で同じ現象が発生している方がいたので、同様の対処を行い解決しました。

https://qiita.com/koichi-ozaki/items/883427922399788632a7

対処方法

上記の記事の説明通りです。

https://hoge.page.link/?link=https://fuga.jp/&ius=xxx&apn=...のようなリンクがあった場合、https://fuga.jp/&ius=xxx&apn=...の部分がディープリンクですが、ディープリンクのホストをintent-filterに追加する必要がありました。

android/app/src/main/AndroidManifest.xml
            <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="hoge.page.link"
                    android:scheme="https" />
+               <data
+                   android:host="fuga.jp"
+                   android:scheme="https" />
            </intent-filter>

まとめ

Flutterのマイナーバージョンを上げると、targetSdkVersionも自動で上がるため注意が必要です。特にfirebase_dynamic_linksを使用している場合は、ディープリンクのホストをintent-filterに追加することで問題が解決できます。この記事が同様の問題に直面した方の参考になれば幸いです。

GitHubで編集を提案

Discussion