如何为 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 并使用您要使用的电子邮件设置您的帐户。然后一切都按预期工作。
以后所有的白痴们,不要再犯和我一样的错误了
我已经下载了使用 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 并使用您要使用的电子邮件设置您的帐户。然后一切都按预期工作。
以后所有的白痴们,不要再犯和我一样的错误了