广告
此包将利用插件 firebase_admob,以便快速轻松地在 Flutter 应用中实现广告。
广告示例
在下面列出的第一个示例中,只需三行代码即可在您的应用中显示横幅广告。您需要做的就是您注册 AdSense 帐户时获得的“AdMob ID”。此处列出的 ID 是 Google 提供的“测试 ID”,仅用于开发。当然,请妥善保管您的 ID,但在开发中使用您自己的 ID 时,请在 init() 函数中改用第二个参数 testing。如下面的示例所示,将其设置为 true 将仅显示“测试广告”。

Google AdMob
如果您尚未设置 AdMob,请在下载此文件后访问此网站:https://firebase.google.com/docs/admob/。您需要您的“AdMob ID”。同样,插件在开发期间提供了测试 ID,因为使用您自己的 ID 会违反“Google AdMob”政策。我的意思是,您不能点击自己的应用中的广告,您不知道吗!那是在作弊!
对于 Android,修改 AndroidManifest.xml
尝试使用此包时,您可能会遇到一个常见错误,即 Google 抱怨 AdMob 未正确初始化。只需按照下面的说明进行操作即可解决此问题。

只需三行代码

最佳做法是在 State 对象的 initState() 函数中调用“Ads”的 init() 函数,并在 State 对象对应的 dispose() 函数中调用其 dispose() 函数。第三个函数调用是 showBannerAd(),顾名思义,它就是这样做的。
内测版,没问题!
再次强调,此“Ads”库目前使用的是 firebase_admob 插件,该插件截至本文撰写时仍处于 beta 测试阶段。因此,横幅广告只能放置在屏幕的顶部或底部,动画受到限制,广告有无限的尺寸。最后,尚未支持“原生广告”(即显示在平台原生 UI 组件上的广告)。
您有多种选择
读过我过去文章的任何人都会知道,我总是在寻找其他选择。我们软件开发人员喜欢选择,对吧?当然,使用此库,您有很多选择。
您可以看到,在下面的第二个示例中,除了必需的“AdMob ID”之外,您还可以选择使用九个其他设置来描述您可能希望与您的应用关联的广告类型。

初始化和显示 AdMob 横幅广告的十种选项。
设置您的选项
您可以看到,您可以直接在 init() 函数中提供这些选项。但是,您也可以在展示广告之前单独指定一两个。我一直在寻找其他选择。

有 Getter 和 Setter
当然,除了设置它们之外,如果您出于任何原因需要,还可以方便地检索这些设置的值。下面,您可以看到此“Ads”类中有与 Setter 相同数量的 Getter。因此,您或其他开发人员在处理应用的另一部分时,可以随时访问此“Ads”类当前可用的所有设置,以及因此 firebase_admob 插件当前可用的所有设置。

一切都是静态的
正如您现在可以推断出的那样,此类“Ads”仅使用静态成员和方法。这意味着它们可以随时随地在您的应用中访问或更改。这使得在您的应用中处理广告更加容易。
计数器的数字将是……三
firebase_admob 插件目前提供三种广告。有传统的横幅广告,插页式广告或全屏广告,在打开时会覆盖主机应用的界面,最后是视频广告,在打开时也会覆盖屏幕,并在关闭时返回到应用。

这是一个事件!
查看插件内部,我们发现它会监视横幅广告和全屏广告的七个单独事件。从经常调用的“加载”事件到“展示”事件。我认为每次广告在您的应用中展示时都会触发。但我并不确定,因为此时该插件的 API 文档也很少。

视频广告有八个可供监视的事件。例如,当视频打开时、视频开始播放时以及视频播放完成时会触发事件。还有一个事件会奖励观看视频的用户。

倾听并赚钱!
由于插件提供了大量事件,我在该库中实现了不少于十一个事件监听器。查看下面的示例。“Ads.eventListener”是该库的事件监听器的“祖父”。由于插件会监视所有事件,因此您可以使用此事件监听器来捕获您特别感兴趣的事件。它适用于所有三种广告类型的共享事件。

听着!
再次,您有三种广告,因此,而不是使用上面提到的“祖父”监听器,每种广告都有自己的一组事件监听器。有 bannerListener、screenListner 和 videoListener。如您所知,横幅广告和全屏广告使用相同的“MobileAdEvent”事件集,而视频广告则在其事件类型“RewardedVideoAdEvent”下有自己的事件集。这意味着您可以根据广告类型拆分事件监听器。

让我们具体说明
但是,您知道我,还有其他选择。同样,那个“祖父”事件监听器可能会有点混乱——可能会有一个非常长的 switch-case 语句和所有那些 MobileAdEvent 选项。何不只针对广告类型,而是针对一个特定事件?何不将任意数量的事件监听器分配给一个特定事件?怎么样?
是的,您可以将任意数量的监听器分配给一个特定事件。您可以或别人可以。例如,您团队中在处理应用另一部分的其他成员可能也需要知道广告何时被打开。下面,我们有两个监听器,它们在横幅广告被点击和打开时都会触发,有一个监听器在用户离开应用查看广告时触发,最后一个监听器在横幅广告的广告关闭且用户返回应用时触发。怎么样?

正如您可能已经猜到的那样,全屏广告也具有与横幅广告相同的事件监听器数组。再次,有七个单独的事件,您可以单独分配事件监听器——并且可以分配任意数量的监听器。怎么样!

最后,您猜到了,视频广告也具有所有必要的事件监听器,可以捕获 firebase_admob 插件当前发出的所有可能事件——截至本文撰写时是八个事件。下面,有一个示例说明如何在用户观看完视频后“奖励”指定的金额。

清理您的广告
展示广告确实会占用资源。因此,此“Ads”库为您提供了在您可能想要在某个时候出于某种原因关闭广告时进行清理的手段。此外,您可以自由地隐藏然后再次显示它们。您还可以随时“清除”任何监听器——无论是单独清除还是批量清除!

一切都在设置中
正如您在下面的示例中看到的,您有很多选择!您可以通过一次性调用 init() 函数来设置所有三种类型的广告,或者分别设置,因为每种类型都有自己的“set”函数:setBannerAd()、setFullScreenAd() 和 setVideoAd()。为什么要这样做?谁知道!我算命的吗?!也许您对每种广告都有不同的计划。无论如何,您都有这个选择。

一个 Flutter 示例
PUB 网站提供了一个关于如何实现 firebase_admob 插件的示例。我在下面的 gist 中包含了该示例,AdMob in Flutter Example。但是,您猜对了,此示例而是使用“Ads”库来演示 Flutter 应用中的广告。下面是示例中的 main.dart 文件。我已经高亮了“Ads”类库的使用位置。

结论
此库提供给您仅仅是为了让您在应用中展示广告时生活得更轻松。它可能有其不足之处,但这只是我为我们初生的 Flutter 社区做出贡献的方式。在我看来,Flutter 是未来的方向,分享代码是帮助这个社区成长和前进的一种方式。