YouTube 登录 API OAuth 2.0 Flutter

3

我一直在努力实现我的应用程序中的YouTube频道登录,但我所做的仅限于使用google_sign_in 4.5.1进行Google账户登录。

有没有人已经实现了这个功能并可以给我一些提示? YouTube文档很糟糕。

编辑: 以下是代码:

class AuthService {
String oAuthClientId = '**hidden**'; // not used?

  static List<String> scopes = [
    'email',
    'https://www.googleapis.com/auth/youtube', // Youtube scope
  ];

     final FirebaseAuth auth = FirebaseAuth.instance;
  GoogleSignIn googleSignIn = GoogleSignIn(
    scopes: scopes,
  );



Future<FirebaseUser> login() async {
    final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
    final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;

final AuthCredential credential = GoogleAuthProvider.getCredential(
  accessToken: googleSignInAuthentication.accessToken,
  idToken: googleSignInAuthentication.idToken,
);

final token = googleSignInAuthentication.accessToken;

final AuthResult authResult = await auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);

final FirebaseUser currentUser = await auth.currentUser();
assert(user.uid == currentUser.uid);

var client = new http.Client();

return currentUser;


 }

  void signOut() {
    auth.signOut();
    googleSignIn.disconnect();
  }

  Future<FirebaseUser> getUser() async{
    final FirebaseUser user = await auth.currentUser();
    return user;
  }
}

https://medium.com/flutter-community/flutter-implementing-google-sign-in-71888bca24ed - Deepak Ror
1个回答

1
要显示您的YouTube频道,您需要将YouTube范围https://www.googleapis.com/auth/youtube添加到您的Google登录中。
在此之前,您必须从开发人员控制台启用了YouTube API。阅读Youtube API文档以获取更多信息。
示例登录代码:
login() async {
    GoogleSignIn googleSignIn = GoogleSignIn(
      scopes: [
        'email',
        'https://www.googleapis.com/auth/youtube', // Youtube scope
      ],
    );
    final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
    final GoogleSignInAuthentication googleSignInAuthentication =
    await googleSignInAccount.authentication;

    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleSignInAuthentication.accessToken,
      idToken: googleSignInAuthentication.idToken,
    );

    // You'll need this token to call the Youtube API. It expires every 30 minutes.
    final token = googleSignInAuthentication.accessToken; 
    
    final AuthResult authResult = await auth.signInWithCredential(credential);
    final FirebaseUser user = authResult.user;
    assert(!user.isAnonymous);
    assert(await user.getIdToken() != null);

    final FirebaseUser currentUser = await auth.currentUser();
    assert(user.uid == currentUser.uid);
  }

我看到一个Firebase用户,需要在其中使用Firebase吗?好的,我会试一试并让您知道!谢谢 - raiton
Firebase不是必需的,但是如果你想通过Firebase认证来管理你的用户,你应该使用它。 - JideGuru
所以我尝试了一下,但弹出窗口只显示我的电子邮件而不是频道,当我按下其中一个时,会出现错误 “E / flutter(11805):[ERROR:flutter / lib / ui / ui_dart_state.cc(157)]未处理的异常:PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiException:10:,null)” 我认为我在Firebase上有问题,所以我去尝试生成一个google.services json,但我在那里遇到了另一个错误,Oauth客户端已经存在于不同的项目中,用于包名称...和证书哈希值...可能是因为我尝试使用OAuth 2.0并失败了... - raiton
弹出窗口不会显示您的频道。该弹出窗口是用于登录的,在登录后,您将获得一个令牌(它在代码中)。您将使用此令牌向YouTube API发出请求。您遇到的该错误与您的Firebase设置有关,请查看一下。 - JideGuru
在我的情况下,点击 Gmail 帐户后弹出窗口卡在加载状态,有什么建议吗? - Urvashi kharecha
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接