【发布时间】:2021-09-16 01:43:15
【问题描述】:
在用户使用谷歌方法登录我的应用后,我尝试获取用户播放列表。
当我尝试从 https://developers.google.com/youtube/v3/docs/playlists/list?apix=true 获取我的 youtube 播放列表并将其作为请求时:
GET https://youtube.googleapis.com/youtube/v3/playlists?part=snippet&maxResults=25&mine=trueHTTP/1.1
授权:承载 [YOUR_ACCESS_TOKEN] 接受:application/json
我看到弹出窗口选择我的众多频道之一,一切都很棒。我有响应类型 200 和完整数据
但是.......
当我从颤振应用程序执行相同的请求时,我没有看到弹出窗口,并且我有DetailedApiRequestError(状态:404,消息:未找到频道。)
谁能帮忙?
代码如下:
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart'
as auth;
import 'package:google_sign_in/google_sign_in.dart';
import 'package:googleapis/people/v1.dart';
import "package:googleapis/youtube/v3.dart";
import 'dart:async';
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
title: 'Google Sign In',
home: SignInDemo(),
),
);
}
class SignInDemo extends StatefulWidget {
@override
State createState() => SignInDemoState();
}
class SignInDemoState extends State<SignInDemo> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Google Sign In'),
),
body: ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: _buildBody(),
));
}
Widget _buildBody() {
return ElevatedButton(
child: const Text('SIGN IN'),
onPressed: _handleSignIn,
);
}
Future<void> _handleSignIn() async {
final _googleSignIn = new GoogleSignIn(
scopes: [
PeopleServiceApi.contactsReadonlyScope,
YouTubeApi.youtubepartnerScope,
YouTubeApi.youtubeForceSslScope,
YouTubeApi.youtubeScope,
YouTubeApi.youtubeReadonlyScope,
YouTubeApi.youtubeChannelMembershipsCreatorScope,
YouTubeApi.youtubeScope,
YouTubeApi.youtubepartnerChannelAuditScope,
],
);
await _googleSignIn.signOut();
await _googleSignIn.signIn();
final httpClient = await _googleSignIn.authenticatedClient();
final YouTubeApi youtubeApi = YouTubeApi((httpClient)!);
final response = await youtubeApi.playlists.list(
["snippet"],
mine: true,
maxResults: 25,
);
print(response.items!.length);
}
}
当我在https://developers.google.com/youtube/v3/docs/playlists/list?apix=true 上使用 ApiExplorer 时,我会看到带有我的频道列表的弹出窗口,在选择其中一个之后,我会得到一个有效的 oauth 令牌。当我使用这一行“最终 httpClient = await _googleSignIn.authenticatedClient();”时几乎所有 youtube 范围内我也得到了 oauth 令牌,但是当我把它放在我的 YoutubeApi 请求中时,我得到了
"error": {
"code": 404,
"message": "Channel not found.",
"errors": [
{
"message": "Channel not found.",
"domain": "youtube.playlist",
"reason": "channelNotFound",
"location": "channelId",
"locationType": "parameter"
}
]
}
我看到了第一个弹出窗口。我可以选择我的 gmail 帐户。但是当我尝试从 youtube 加载一些私人数据时,我应该会看到第二个弹出窗口来选择 youtube 频道,因为我有多个频道分配给我的 google 帐户,但是第二个弹出窗口没有打开,我有错误 404 channel not found 这非常奇怪,因为当我使用与 youtube api 非常相似的 https://developers.google.com/people 时,一切都运行良好
【问题讨论】:
-
在 Flutter 中尝试从 Google API 获取数据时涉及更多内容。值得庆幸的是,Flutter 官方文档有一篇关于这个特殊案例的精彩文章:YouTube API - Flutter
标签: flutter dart firebase-authentication youtube-api google-authentication