1
1

More than 3 years have passed since last update.

【Flutter2.0】カメラのプレビューが真っ黒で動かなくなった時の対処

Last updated at Posted at 2021-06-18

こんにちは!
個人開発でアプリ開発をしているYuKiOです。

こんなアプリを開発しています。

Flutter環境

  • Flutter version 2.2.1
  • Dart version 2.13.1
camera: ^0.8.1+3
google_mobile_ads: ^0.13.0

不具合の内容

今一番アップデートしている「絵本の読み聞かせ記録 ユリウス」をアップデートしたところ、どこかのタイミングでAndroid版のみ、カメラのプレビューを呼び出すと、真っ黒もしくは静止画のように動かない不具合に遭遇しました。

結論 「google_mobile_ads」が犯人

自分で見つけたわけではなく、Kaboさんから教えていただきました。

試しに、「google_mobile_ads」を停止したところ正常に動作を確認。他のバーコードスキャナー関連は動いていたのですが、私のAndroid環境では「camera: ^0.8.1+3」のみ発現していました。

どうもAndroid側の仕様で、うまく表示できていなさそうですが、何がだめなのかはっきりしません。

表示方法を変えることで解決するとのことですが、・・・
https://flutter.dev/docs/development/platform-integration/platform-views#virtual-display

こちらはパフォーマンスや別の影響を出す可能性があるとのことで、ますはgoogle_mobile_adsの代替を探すことにします。

「google_mobile_ads」の代替は「admob_flutter」でいいけれど。

https://pub.dev/packages/admob_flutter/versions/2.0.0-nullsafety.1
早い話、「admob_flutter」にすんなり入れ替えできれば簡単なんですが・・・・。

実は、Flutter2.0にアップグレードするにあたり、Firebase系もアップデートしました。
しかしiOSの場合、admob_flutterで使われている Google-Mobile-Ads-SDKが7.64のままなので、8.0.0系に対応しておらず、pod installでエラーに。

そのため、最新のSDKに対応している「google_mobile_ads」に入れ替えた一番の理由です。

githubに回避方法として、以下が載っていましたが、ネイティブ側のエラーでまったく動きません。
誰もがあきらめているところを見ると、ネイティブコードがわかる人でも解決が難しいかも。

打つ手がないので、現状はビルドレベルで、androidとiosでpubを入れ替えてリリースするか、カメラのpubを別途入れ替えるしかなさそうです。

また「google_mobile_ads」が出てきてしまったので、もともとそこまで更新されていなかった、「admob_flutter」 が活発に修正される可能性は低いと思っているので、google_mobile_adsの修正が終わるまでは待つしかないかもです。

また、何かわかったらこの記事に書き込みます。

※追記
githubやstackoverflowにもissueとして書いている人がいますが、数ヶ月前の投稿でも誰も書いていません。
すぐ対応される可能性は低いかもしれません。
今回の不具合は実装までは問題なく、広告を表示させると不具合が発生するので、カメラを起動時だけ広告をOFFにすることで問題を解決しました。

※追記 21/6/24
kaboさんから追加で情報をいただきました。

「google_mobile_ads」でAndroid環境下でパフォーマンス低下するというissueがあり、その中で個人の方が改修したバージョンを適用することで、正常にカメラが動作するようになりました。
https://github.com/googleads/googleads-mobile-flutter/issues/80#issuecomment-797510235

koboさんもおっしゃっている通り、個人の方の改修のため、使用は各々の判断となります。

個人的な見解として、アプリ事態のパフォーマンスを上がった気がするため、要件がシビアな企業案件でなければ、オリジナルがアップデートされるまでは、こちらのバージョンを使った方がアプリ的には良さそうな気がします。

もし何か問題があれば、広告をオフにする手法で回避すればいいので。

1
1
6

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
1
1