facebook twitter hatena line email

「Flutter/admob/admob flutter」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(準備)
(準備)
 
(同じ利用者による、間の9版が非表示)
行7: 行7:
  
 
==準備==
 
==準備==
AndroidManifest.xml
+
android/app/AndroidManifest.xml
 
<pre>
 
<pre>
 
<meta-data
 
<meta-data
 
  android:name="com.google.android.gms.ads.APPLICATION_ID"
 
  android:name="com.google.android.gms.ads.APPLICATION_ID"
  android:value="ca-app-pub-~~~~~~"/>
+
  android:value="ca-app-pub-xxxxxxx-appid"/>
 
</pre>
 
</pre>
  
行17: 行17:
 
<pre>
 
<pre>
 
<key>GADApplicationIdentifier</key>
 
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-~~~~~</string>
+
<string>ca-app-pub-xxxxxxx-appid</string>
 
<key>io.flutter.embedded_views_preview</key>
 
<key>io.flutter.embedded_views_preview</key>
 
<true/>
 
<true/>
行32: 行32:
 
String getAppId() {
 
String getAppId() {
 
   if (Platform.isIOS) {
 
   if (Platform.isIOS) {
     return 'ca-app-pub-~~~~~~';
+
     return 'ca-app-pub-xxxxxxx-appid';
 
   } else if (Platform.isAndroid) {
 
   } else if (Platform.isAndroid) {
     return 'ca-app-pub-~~~~~~';
+
     return 'ca-app-pub-xxxxxxx-appid';
 
   }
 
   }
 
   return null;
 
   return null;
 
}
 
}
 
</pre>
 
</pre>
unitidを入れる。
+
広告挿入箇所
 +
<pre>
 +
  @override
 +
  Widget build(BuildContext context) {
 +
    return Scaffold(
 +
      appBar: AppBar(
 +
        title: Text(widget.title),
 +
      ),
 +
      body: _buildListView(),
 +
    );
 +
  }
 +
  Widget _buildListView() {
 +
    AdmobBanner admobBanner = AdmobBanner(
 +
      adUnitId: getBannerAdUnitId(),
 +
      adSize: AdmobBannerSize.LEADERBOARD,
 +
    );
 +
    final int size = 10;
 +
    List<Widget> _children = List<Widget>.generate(
 +
      size,
 +
          (int index) => _buildListItem(text: "iTem: $index"),
 +
    );
 +
    _children.insert(
 +
      2,
 +
      Padding(
 +
        padding: const EdgeInsets.all(8.0),
 +
        child: admobBanner,
 +
      ),
 +
    );
 +
    return ListView(
 +
      children: _children,
 +
    );
 +
  }
 +
  Widget _buildListItem({String text}) {
 +
    return Container(
 +
      height: 150,
 +
      child: Card(
 +
        color: Colors.grey,
 +
        child: Padding(
 +
          padding: const EdgeInsets.all(8.0),
 +
          child: Center(child: Text(text)),
 +
        ),
 +
      ),
 +
    );
 +
  }
 +
  String getBannerAdUnitId() {
 +
    if (Platform.isIOS) {
 +
      return 'ca-app-pub-xxxxxx-unitid';
 +
    } else if (Platform.isAndroid) {
 +
      return 'ca-app-pub-xxxxxx-unitid';
 +
    }
 +
    return null;
 +
  }
 +
</pre>
 +
 
 +
参考:https://qiita.com/gkn/items/f5fde5be608384f1a272
 +
 
 +
iosでは広告が表示できたが、androidではTestDevice登録がされてないためか表示できてない。
 +
 
 +
==Missing google_app_id. Firebase Analytics disabled.エラーが出る場合==
 +
firebaseの設定を入れる必要があるかも?(おそらく不要、広告が出ないときに一応出してるだけっぽい)
 +
 
 +
==Ad failed to loadなメッセージが出る場合==
 +
<pre>
 +
I/Ads    ( 6199): Ad failed to load : 3
 +
D/DynamitePackage( 6199): Instantiating com.google.android.gms.ads.ChimeraAdManagerCreatorImpl
 +
I/Ads    ( 6199): Use AdRequest.Builder.addTestDevice("E36Axxxxxxxxxxxxxxxxxx) to get test ads on this device.
 +
</pre>
 +
addTestDeviceを追加すればいけそうだが、そんなadmob_flutterライブラリにそんなメソッドがない?

2019年12月16日 (月) 11:09時点における最新版

インストール

pubspec.yaml

dependencies:
 admob_flutter: ^0.3.4

準備

android/app/AndroidManifest.xml

<meta-data
 android:name="com.google.android.gms.ads.APPLICATION_ID"
 android:value="ca-app-pub-xxxxxxx-appid"/>

ios/Runner/Info.Plist

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxx-appid</string>
<key>io.flutter.embedded_views_preview</key>
<true/>

appIdを入れる。

サンプル

初回起動時に設定

import 'package:flutter/material.dart';
import 'package:admob_flutter/admob_flutter.dart';
import 'dart:io';
Admob.initialize(getAppId());
String getAppId() {
  if (Platform.isIOS) {
    return 'ca-app-pub-xxxxxxx-appid';
  } else if (Platform.isAndroid) {
    return 'ca-app-pub-xxxxxxx-appid';
  }
  return null;
}

広告挿入箇所

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: _buildListView(),
    );
  }
  Widget _buildListView() {
    AdmobBanner admobBanner = AdmobBanner(
      adUnitId: getBannerAdUnitId(),
      adSize: AdmobBannerSize.LEADERBOARD,
    );
    final int size = 10;
    List<Widget> _children = List<Widget>.generate(
      size,
          (int index) => _buildListItem(text: "iTem: $index"),
    );
    _children.insert(
      2,
      Padding(
        padding: const EdgeInsets.all(8.0),
        child: admobBanner,
      ),
    );
    return ListView(
      children: _children,
    );
  }
  Widget _buildListItem({String text}) {
    return Container(
      height: 150,
      child: Card(
        color: Colors.grey,
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Center(child: Text(text)),
        ),
      ),
    );
  }
  String getBannerAdUnitId() {
    if (Platform.isIOS) {
      return 'ca-app-pub-xxxxxx-unitid';
    } else if (Platform.isAndroid) {
      return 'ca-app-pub-xxxxxx-unitid';
    }
    return null;
  }

参考:https://qiita.com/gkn/items/f5fde5be608384f1a272

iosでは広告が表示できたが、androidではTestDevice登録がされてないためか表示できてない。

Missing google_app_id. Firebase Analytics disabled.エラーが出る場合

firebaseの設定を入れる必要があるかも?(おそらく不要、広告が出ないときに一応出してるだけっぽい)

Ad failed to loadなメッセージが出る場合

I/Ads     ( 6199): Ad failed to load : 3
D/DynamitePackage( 6199): Instantiating com.google.android.gms.ads.ChimeraAdManagerCreatorImpl
I/Ads     ( 6199): Use AdRequest.Builder.addTestDevice("E36Axxxxxxxxxxxxxxxxxx) to get test ads on this device.

addTestDeviceを追加すればいけそうだが、そんなadmob_flutterライブラリにそんなメソッドがない?