【发布时间】:2021-09-04 03:23:23
【问题描述】:
我已经下载了使用 Flutter googleapis 包的示例,其中显示了 PeopleAPI 的使用情况,this example。
我在谷歌云平台上配置了我的项目,并做了一切必要的事情来使示例工作,它确实做到了。
然后我继续尝试使该项目与 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 完全相同,这也不起作用。这两个 API 都在谷歌云控制台上启用。
这是 AdmobAPI 输出的错误
[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>
两个 API 中使用完全相同的经过身份验证的客户端 此应用正在 iOS 模拟器上运行
这是我用来产生此错误的代码: https://pastebin.com/3uw4EtMS 请参阅第 62 - 76 行了解我调用 API 的位置
所以基本上我的问题是,我做错了什么让 YouTubeAPI 身份验证工作,而不是 AdMobAPI 身份验证?
我找不到任何文档说这些 API 的身份验证过程会有所不同,除了范围的变化。
【问题讨论】:
标签: flutter dart mobile google-api admob