如何为 AdMob 正确验证 Flutter GoogleAPIs 包

How to properly authenticate the Flutter GoogleAPIs package for AdMob

我已经下载了使用 flutter googleapis 包的示例,其中显示了 PeopleAPI 的用法,this example

我在 google 云平台上配置了我的项目,并做了所有必要的事情来使示例工作,它确实做到了。

然后我继续尝试使该项目与 YoutubeAPI (v3) 一起工作。我将范围添加到 OAuth 同意屏幕(在 google 云平台上),也在我的代码中。

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: <String>[
    PeopleServiceApi.contactsReadonlyScope,
    YouTubeApi.youtubeReadonlyScope,
  ],
);

这非常有效,我能够有效地使用 YouTube API

我现在想使用 AdmobAPI (v1)。我将必要的范围添加到 OAuth 同意屏幕(在 google 云平台上),也在我的代码中。

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: <String>[
    PeopleServiceApi.contactsReadonlyScope,
    YouTubeApi.youtubeReadonlyScope,
    AdMobApi.admobReadonlyScope,
    AdMobApi.admobReportScope
  ],
);

然后我尝试了 AdmobAPI 的基本示例用法。即使设置过程与 Youtube API 完全相同,这也不起作用。在 google 云控制台上启用了两个 API。

这是 Admob 输出的错误API

[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: DetailedApiRequestError(status: 401, message: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.)
#0      _validateResponse (package:_discoveryapis_commons/src/api_requester.dart:295:9)
<asynchronous suspension>
#1      ApiRequester.request (package:_discoveryapis_commons/src/api_requester.dart:73:16)
<asynchronous suspension>
#2      AccountsResource.list (package:googleapis/admob/v1.dart:152:23)
<asynchronous suspension>
#3      SignInDemoState._handleGetContact (package:admob_revenue/main.dart:76:11)
<asynchronous suspension>

两个 APIs 中使用完全相同的经过身份验证的客户端 此应用正在 iOS 模拟器上 运行

这里是我用来产生这个错误的代码: https://pastebin.com/3uw4EtMS 请参阅第 62 - 76 行了解我调用 APIs

的位置

所以基本上我的问题是,我做错了什么使 YouTubeAPI 身份验证有效,但 AdMobAPI认证?

我找不到任何文档说这些 API 的身份验证过程会有所不同,只是范围发生了变化。

好的伙计们,事实证明,经过几周的努力解决这个问题,唯一的问题是我自己的愚蠢。

为了测试这个程序,我登录了一个没有设置 admob 帐户的 Gmail 帐户。您需要做的就是转到 admob 并使用您要使用的电子邮件设置您的帐户。然后一切都按预期工作。

以后所有的白痴们,不要再犯和我一样的错误了