30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TORICOAdvent Calendar 2019

Day 25

Flutterで広告マネタイズしたい

Posted at

アプリをリリースするだけではなく、マネタイズもしたいですよね???
弊社ではFlutterで作ったアプリでマネタイズをしているので使ってきたプラグインや使い心地を紹介出来たらな〜と思います。

Flutterで広告を出そうとしたことがある方はわかるかもしれませんが、出すだけなら難しくないです。
ですが、好きな位置に出したり、いい感じにコントロールすることは手間がかかります。

#広告用プラグイン
pub.dev で admob や ad で検索したら色々と出てきますが、今回は使ったことがあるプラグイン3つを紹介させていただきます。

firebase_admob
FlutterFireリポジトリ内にあり、Flutter で広告を出したい人が一度は使うであろうプラグイン。
PlatformView で実装されていないので Flutter の Widget の前に出てきて Widget を覆い隠してしまいます。
さらに表示位置も基本的には上か下かしか選べません。
Android で戻るボタンを押した時に広告が消えないで残ることがありますが、上部か下部に固定して表示するなら問題ないと思います。

admob_flutter
PlatformView で実装されているプラグインです。
数ヶ月前までメンテナーを探していてあまり更新がされていませんでしたが最近は更新されてきています。
firebase_admob と迷いましたが選考段階ではメンテナンスがされていなかったので使用するのをやめました。
先日 1.0.0-beta が出てきたので今後のリリースに注目です。
Widget として広告を扱いたい場合には選択しても良いのでは??

flutter_google_ad_manager
@ko2icさんが作ってくださったプラグイン
admob_flutter と同じく PlatformView で実装されており、Widget として扱うことが出来ます。
動画リワードで動画再生時や動画終了時のEventListenerなどもあり、上記2つのプラグインより動画リワードを使用する場合は使いやすくなっています。
バナーも問題なく使用できます

弊社では、前々から使用していたfirebase_admobと動画リワードの扱いやすさでflutter_google_ad_managerを場所に応じて使い分けています。
flutter_google_ad_managerに統一して良いと思っているのですが、書き換えるほどのものでもないので残しています。

#flutter_google_ad_managerで動画リワードを実装してみる

特に難しいことは無いです。
issuesにもあるようにonVideoCompletedがiosで動かないことがあるので、少し変わった使い方をしています。

DFPRewardedAd _rewardedAd;

@override
void initState() {
  super.initState();
  _rewardedAd = DFPRewardedAd(
    isDevelop: false,
    adUnitId: adUnitId,
    onAdClosed:  {
      print('onAdClosed');
    },
    onAdLoaded:  {
      print('onAdLoaded');
    },
    onAdFailedToLoad: (int code) async {
      /// code: 0
      /// ERROR_CODE_INTERNAL_ERROR(アドネットワーク側のエラー)
      /// code: 1
      /// ERROR_CODE_INVALID_REQUEST(設定間違い)
      /// code: 2
      /// ERROR_CODE_NETWORK_ERROR(ネットワークエラー)
      /// code: 3
      /// ERROR_CODE_NO_FILL(リクエストは成功しているが、広告の表示ができない)
      print('onAdFailedToLoad(${code})');
    },
    onVideoCompleted: (int code) async {
       print('onVideoCompleted');
    },
    onRewarded: (String item, int amount) {
      // iosの特定バージョンで動作しないので`onVideoCompleted`で動画視聴完了フラグを立てる
      print('onRewarded');
    }
  );
  _rewardedAd.load();
}


Future<void> showRewardAd() async {
  try {
    await _rewardedAd.show();
  } on PlatformException catch (err)  {
    // 動画リワードが読み込めていないので再度読み込み
    if (err.message == 'not_loaded_yet') {
      await _rewardedAd.load();
    }
  }
}

#おわりに
firebase_admobflutter_google_ad_managerを使っていると書いていますが、google ad managerのコンソールでの対応に限界が来たので カスタムイベントを追加したプラグインを開発しています。
SDKをバンドルしているので使用しているものを公開することは出来ませんが、SDKとカスタムイベントを外した分か、作り方をまとめたもののどちらかは公開したいと思います。

弊社ではFlutter エンジニアを募集しています。
ご興味がある方は下記のリンクからコーポレートサイトと募集要項など見てみてください。
Flutterエンジニア(コーポレートサイト)

30
29
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
30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?