LoginSignup
3
3

【Flutter】初めてのアプリリリースでハマった/躓いた点まとめ

Posted at

初めてのAndroid/iOSアプリのリリースの際に、悩んだことや躓いた点が多かったので、
自分用のメモとしても、参考にしたサイトや情報をまとめてみました。

リリースしたアプリはこちらの記事で紹介していますので、よろしければご覧下さい。

広告表示を行っていないのにPermissionに広告ID(AD_ID)が含まれる

GooglePlayStoreで申請を行う際にハマった。

広告設定を追加した覚えはないのに、「アプリに広告は含まれていない」と申請するとポリシー違反となってしまった。
以下の記事で記載されている通り、Firebaseを利用しているとデフォルトで広告IDの取得を行うため、Permissionに宣言が追加されるらしい。

Firebaseの設定を環境毎に変更したい

最初から環境を分けていたわけではなかったのできつかった・・・。
以下の記事で記載されている方法で対応できた。

DynamicLinksGoogleSignInなど、個別に設定ファイルに記載が必要なものについても、
上述した記事の応用で全て対応が出来たので、とても参考になった。

例:DynamicLinksの設定

Firebase公式に記載されている通り、設定ファイルにホストの指定等が必要となっている。
ホストを環境毎に変える方法も、上述した記事にの応用で下記の通り出来た。

Android

  1. dart_definesディレクトリに作成した環境毎のJSONファイルにホスト(または環境毎に異なる接尾語)を定義する

    dart_defines/dev.json
    {
        "flavor": "dev",
        "appName": "(dev)AppName",
        "appIdSuffix": ".dev",
        "dynamicLinkHost": "my-app-develop.com"
    }
    
  2. android/app/build.gradledefaultConfigにホスト名を定義する

    dart_defines/dev.json
    defaultConfig {
        applicationId "com.example.package"
        applicationIdSuffix appIdSuffix
        ~~~
        resValue "string", "dynamic_link_host", dynamicLinkHost
    }
    
  3. 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

  1. 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) に則って開発を行っていく中で、画像の色を動的に変更する必要があった。
https://m3.material.io/styles/color/dynamic-color/imagery

SVGの一部色を変更するにあたって、キレイなやり方ではなかったが、以下の方法で対応できた

FlutterのMaterial3対応でその内対応されることを祈る。

アプリアイコンの作成

デザインを全てFigmaで作成していたので、
アプリアイコンも以下のプラグインで作成することが出来た。

Twitter1のアプリを開きたい

基本は以下の記事の通りで対応出来た。

ただし、url_launcherのReadMeにも記載されている通り、
Android 11からはAndroidManifest.xmlに対して利用するアプリのパッケージやそれに準ずるフィルタを追加する必要がある。

今回はWebViewとTiwtter1アプリの表示だけだったため、以下のように指定して解決

android/app/src/main/AndroidManifest.xml
<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.plistCFBundleLocalizationsを追加して、アプリが対応している言語コードを追加するだけだった

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>ja</string>
    <string>it</string>
    <string>de</string>
    <string>fr</string>
</array>
  1. 旧Twitter,Xのこと、パッケージ名は変更できないので直指定でも問題ないはず 2

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3