【Flutter】初めてのアプリリリースでハマった/躓いた点まとめ
初めてのAndroid/iOSアプリのリリースの際に、悩んだことや躓いた点が多かったので、
自分用のメモとしても、参考にしたサイトや情報をまとめてみました。
リリースしたアプリはこちらの記事で紹介していますので、よろしければご覧下さい。
広告表示を行っていないのにPermissionに広告ID(AD_ID)が含まれる
GooglePlayStoreで申請を行う際にハマった。
広告設定を追加した覚えはないのに、「アプリに広告は含まれていない」と申請するとポリシー違反となってしまった。
以下の記事で記載されている通り、Firebaseを利用しているとデフォルトで広告IDの取得を行うため、Permissionに宣言が追加されるらしい。
Firebaseの設定を環境毎に変更したい
最初から環境を分けていたわけではなかったのできつかった・・・。
以下の記事で記載されている方法で対応できた。
DynamicLinks
やGoogleSignIn
など、個別に設定ファイルに記載が必要なものについても、
上述した記事の応用で全て対応が出来たので、とても参考になった。
例:DynamicLinksの設定
Firebase公式に記載されている通り、設定ファイルにホストの指定等が必要となっている。
ホストを環境毎に変える方法も、上述した記事にの応用で下記の通り出来た。
Android
-
dart_defines
ディレクトリに作成した環境毎のJSONファイルにホスト(または環境毎に異なる接尾語)を定義するdart_defines/dev.json{ "flavor": "dev", "appName": "(dev)AppName", "appIdSuffix": ".dev", "dynamicLinkHost": "my-app-develop.com" }
-
android/app/build.gradle
のdefaultConfig
にホスト名を定義するdart_defines/dev.jsondefaultConfig { applicationId "com.example.package" applicationIdSuffix appIdSuffix ~~~ resValue "string", "dynamic_link_host", dynamicLinkHost }
-
android/app/src/main/AndroidManifest.xml
に定義したディープリンクのホストを設定するandroid/app/src/main/AndroidManifest.xml<intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <!-- Add --> <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:host="@string/dynamic_link_host" android:scheme="https"/> </intent-filter>
iOS
-
ios/Runner/info.plist
にディープリンクのホストを定義するios/Runner/info.plist<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://$(dynamicLinkHost)</string> </array>
GoogleSignIn
がGooglePlayStoreから公開したものだけエラーになる
GooglePlayStoreのクローズドテストを実施した際にハマった。
エミュレータ、実機でのテストでは問題なく実施できたのに、
GooglePlayStoreからインストールしたアプリだけ、PlatformException
が発生してログイン出来なかった。
GooglePlayStoreのアプリ署名が有効になっていたため、以下の手順で解決
Material3に則って、画像(SVG)の色を動的に変更したい
Material You (Material Design3) に則って開発を行っていく中で、画像の色を動的に変更する必要があった。
SVGの一部色を変更するにあたって、キレイなやり方ではなかったが、以下の方法で対応できた
FlutterのMaterial3対応でその内対応されることを祈る。
アプリアイコンの作成
デザインを全てFigmaで作成していたので、
アプリアイコンも以下のプラグインで作成することが出来た。
[1]のアプリを開きたい
Twitter基本は以下の記事の通りで対応出来た。
ただし、url_launcherのReadMeにも記載されている通り、
Android 11からはAndroidManifest.xml
に対して利用するアプリのパッケージやそれに準ずるフィルタを追加する必要がある。
今回はWebView
とTiwtter[1:1]アプリの表示だけだったため、以下のように指定して解決
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
<!-- Twitterだけ -->
<package android:name="com.twitter.android" />
</queries>
share_plus
の共有機能がiOSだけ英語で固定されてしまう
最初はエミュレータの問題なのかと勘違いしてたけど、Issueにも挙がってた
info.plist
にCFBundleLocalizations
を追加して、アプリが対応している言語コードを追加するだけだった
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ja</string>
<string>it</string>
<string>de</string>
<string>fr</string>
</array>
Discussion