Flutter升级google_sign_in至V7版本后,如何获取原accessToken属性对应的值?
Flutter升级google_sign_in至V7版本后,如何获取原accessToken属性对应的值?
嗨,这个问题我之前升级项目的时候刚好踩过坑!google_sign_in升到V7版本之后,确实把GoogleSignInAuthentication里的accessToken属性给移除了,原来直接读属性的写法肯定会报编译错误,不过别担心,换个简单的方式就能拿到你要的token啦~
你可以照着下面的步骤修改代码:
- 首先,先检查下你的
GoogleSignIn初始化代码,确保已经配置了需要的权限范围(scopes),比如要获取用户基本信息的话,至少得加上email、profile和openid,如果要访问特定的Google API(比如Drive、Calendar),还要加上对应的scope。要是你的后端需要验证token,记得把Web端的clientId也配上:
final GoogleSignIn _googleAuth = GoogleSignIn( scopes: [ 'email', 'profile', 'openid', // 这里可以加你需要的其他权限scope,比如访问Google相册的话就加对应的 ], clientId: '你的Google Cloud控制台里的Web Client ID', // 后端验证需要的话必须加 );
- 登录成功拿到
GoogleSignInAccount对象之后,别再用原来的authentication方法了,换成getTokens()方法就行,它会直接返回包含accessToken和idToken的对象,完美替代原来的属性:
// 先完成登录流程 final aSignInAccount = await _googleAuth.signIn(); if (aSignInAccount == null) { // 用户取消了登录,这里可以加个提示或者其他处理逻辑 return; } // 调用getTokens()获取你需要的两个token final tokens = await aSignInAccount.getTokens(); final String? idToken = tokens.idToken; final String? accessToken = tokens.accessToken; // 这就是你要的accessToken啦!
还有个小提醒:如果用户之前在旧版本登录过,升级后第一次可能需要重新登录一次,这样才能获取到包含新权限的token,避免出现拿不到accessToken的情况。
内容来源于stack exchange
相关产品推荐
相关产品推荐

