リリース前レポートで安定性のエラーがあった件(MobileAds.initialize()の問題)
Google Play Consoleの内部テストでリリースを作成し公開したところ、リリース前レポートで安定性のエラーがあった。
スタックトレースでは、以下の通り。
executing service com.enoiu.scorepdf/com.google.android.datatransport.runtime.scheduling.jobscheduling.JobInfoSchedulerService
別のエラーもあった。
executing service com.enoiu.scorepdf/com.google.firebase.sessions.SessionLifecycleService
3つのデバイス(motorola Motorola G20, samsung Galaxy S23 Ultra, google Pixel 6)で検出されたらしい。
このスタックトレースではよくわからなかったので、FirebaseのCrashlyticsを確認したところ、以下のスタックトレースを確認した。
PlatformException(error, MobileAds.initialize() must be called prior to setting app muted state., null, java.lang.IllegalStateException: MobileAds.initialize() must be called prior to setting app muted state.
muteにする前にMobileAds.initialize()を呼び出しているのが問題らしい。
ということで、MobileAds.instance.initialize();
にawaitをつけた。
- MobileAds.instance.initialize();
+ await MobileAds.instance.initialize();
MobileAds.instance.setAppMuted(true);
これを内部テストにリリースすると、エラーは発生しなくなった。
(追記:パフォーマンスの問題は発生していた。(初めて起動する際に時間がかかる))
と思っていたのだが、一部のユーザーで起動後すぐにアプリが落ちる問題が発生していた。
Out of Memory
at ._startMicrotaskLoop(dart:async)
このawait
をつけたのが原因の可能性がある。
この件は以下のリンクでも触れられている。
現在調査中…
一度await
を外して内部リリースに提出したが、このスクラップの最初に書いたようにリリース前レポートで安定性のエラーが報告された。
そのため、
MobileAds.instance.initialize().then((_) {
MobileAds.instance.setAppMuted(true);
});
としてみたが、同様に安定性のエラーが報告された(ただし、報告される端末の数は1つだけになり、このエラーはCrashlyticsでは表示されなかった)。
一旦、MobileAds.instance.setAppMuted(true);
を消してMobileAds.instance.initialize();
だけにしてみた。
すると、なんと9件の安定性のエラーが報告された。
また、Crashlyticsで確認したところ、今までのエラーはほぼクラッシュイベントの発生だったが、今回はすべてANRイベントの発生だった。
ということで、google_mobile_ads
でのIsusesでANRに関する問題を確認したところ、以下の報告が。
以下のサイトを参考にしてAndroidManifest.xml
にコードを追加すると、SDKの初期化や広告の読み込みを最適化できるとのこと。
すると、リリース前レポートで、安定性の問題もパフォーマンスの問題も検知されなかった。
なお、結局MobileAds.instance.setAppMuted(true);
はなくして、AdMobの広告の種類で動画のチェックを外した。
そのため、MobileAds.instance.setAppMuted(true);
がある場合でも問題が解決したかどうかは未確認。