アプリをリリースするだけではなく、マネタイズもしたいですよね???
弊社では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_admob
とflutter_google_ad_manager
を使っていると書いていますが、google ad managerのコンソールでの対応に限界が来たので カスタムイベントを追加したプラグインを開発しています。
SDKをバンドルしているので使用しているものを公開することは出来ませんが、SDKとカスタムイベントを外した分か、作り方をまとめたもののどちらかは公開したいと思います。
弊社ではFlutter エンジニアを募集しています。
ご興味がある方は下記のリンクからコーポレートサイトと募集要項など見てみてください。
Flutterエンジニア(コーポレートサイト)