🐙
Flutter 3.7系へのアップデートでfirebase_dynamic_linksを使っている場合の注意点
はじめに
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://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に追加することで問題が解決できます。この記事が同様の問題に直面した方の参考になれば幸いです。
Discussion