Flutter集成谷歌广告firebase_admob

本文用于纪念因AndroidX浪费的一天
无废话,见流程
事前准备:前往https://apps.admob.com注册google广告,获得admob ID,如果你懒得准备,可以直接使用文中的ID,那是Google广告的公共测试ID,仅供测试
1 打开pubspec.yaml导入

dependencies:
	firebase_admob: ^0.9.0+1

不要忘记get

2 打开项目下的android工程,找到AndroidManifest.xml,添加

		//重点!要作为application的属性添加,位置错了无效!
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3940256099942544~3347511713"/>
        <meta-data
            android:name="com.google.android.gms.ads.AD_MANAGER_APP"
            android:value="true"/>
    

3 保证处于可以更新AS的网络状态。打开位于flutter项目下的android工程,在android工程界面按顺序点击 Build=>ReBuild Project。如果出现莫名其妙,不直观的错误,尤其是v4包冲突,那么可能是因为没有转换成AdnroidX项目造成的,备份后尝试下列操作:
向gradle.properties添加以下内容:
android.enableJetifier=true
android.useAndroidX=true
如果上面的操作没有解决问题,点击菜单Refactor,如果有Migrate to AndroidX选项则点击
可能会要求升级到gradle5.1.1,进行升级
反复 Build=>ReBuild Project至无错误
4 回到flutter项目中,进行初始化

FirebaseAdMob.instance
        .initialize(appId: "你的ID");

并使用虚拟机或真机测试。测试可能会出现闪退,并且无任何错误信息,需要切换至logcat中查看错误信息
5 例:使用激励广告rewarded video


                   RewardedVideoAd.instance.listener =
                          (RewardedVideoAdEvent event,
                              {String rewardType, int rewardAmount}) {
                        switch (event) {
                          case RewardedVideoAdEvent.loaded:
                            RewardedVideoAd.instance.show();
                            break;
                          case RewardedVideoAdEvent.failedToLoad:
                            //读取失败!
                  
                            break;
                          case RewardedVideoAdEvent.opened:
                            break;
                          case RewardedVideoAdEvent.leftApplication:
                            break;
                          case RewardedVideoAdEvent.closed:
                            break;
                          case RewardedVideoAdEvent.rewarded:
                            print("*********奖励 $rewardAmount");
                            break;
                          case RewardedVideoAdEvent.started:
                            break;
                          case RewardedVideoAdEvent.completed:
                            print("*********播放结束");
                            break;
                        }
                      };
                      MobileAdTargetingInfo targetingInfo =
                          MobileAdTargetingInfo(
                              keywords: <String>[
                                'leisure',
                                'game',
                                'relaxation',
                                'puzzle'
                              ],
                              contentUrl: 'https://flutter.io',
                              childDirected: false,
                              testDevices: <String>[重要!这里写测试设备码],
                              // Android emulators are considered test devices
                              nonPersonalizedAds: true);
                      RewardedVideoAd.instance.load(
                          adUnitId: "ca-app-pub-3940256099942544/5224354917",
                          targetingInfo: targetingInfo);

6 使用过程中会提示没有google账户,按照流程安装firebase和google账户
7 ad failed to load : 0
目前来看,引发这个问题大部分是因为使用新账户时广告系统还未建立完善,过几个小时才会好起来,不过也有过了一天也不行,并且测试账户也没广告的状况,这个时候需要登录admob网站,查看首页是否要求输入账户信息,输入后过几个小时就可以正常了,建议使用测试设备进行测试
其他样例以及更详细的介绍请前往https://pub.dev/packages/firebase_admob

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,下面是使用Firebase_Messaging接收推送通知的完整Flutter iOS代码: ```dart import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); } class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance; @override void initState() { super.initState(); _firebaseMessaging.requestPermission(); _firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { print("onMessage: $message"); showDialog( context: context, builder: (context) { return AlertDialog( content: ListTile( title: Text(message['notification']['title']), subtitle: Text(message['notification']['body']), ), actions: <Widget>[ FlatButton( child: Text('Ok'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); }, ); } @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Firebase Messaging', home: Scaffold( appBar: AppBar( title: Text('Flutter Firebase Messaging'), ), body: Center( child: Text('Welcome to Flutter Firebase Messaging'), ), ), ); } } ``` 在这个例子中,我们首先使用Firebase.initializeApp()初始化Firebase应用程序,然后创建FirebaseMessaging实例并调用requestPermission()请求权限。接下来,我们使用configure()方法配置FirebaseMessaging以处理不同的消息事件。当应用程序处于前台时,onMessage()方法被调用,我们在这里创建一个AlertDialog来显示推送通知的标题和正文。当应用程序处于后台或未运行时,onResume()和onLaunch()方法被调用,我们可以在这里处理推送通知。 希望这个例子能够帮助你使用Firebase_Messaging接收推送通知。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值