Flutter应用Google OAuth认证完成后无法自动返回应用,该如何解决?
解决方案
你当前使用的clientViaUserConsent方法来自googleapis_auth库,这个方法原生为桌面端、服务端应用设计,逻辑是启动本地临时HTTP服务监听授权回调,认证成功后只会返回静态成功页面,没有适配移动端的应用跳转逻辑,所以才会停留在浏览器页面无法自动切回应用。
具体解决步骤如下:
- 替换认证依赖
放弃使用clientViaUserConsent做移动端认证,改用适配Flutter移动端的flutter_appauth库完成OAuth2认证,同时保留googleapis库调用Calendar API的能力。 - 配置OAuth客户端与深度链接
- 登录Google Cloud控制台,为你的应用分别创建安卓、iOS端的OAuth客户端ID,安卓端需要填写应用包名和签名SHA1值,iOS端填写应用Bundle ID。
- 为你的应用配置深度链接:安卓端在
AndroidManifest.xml中添加对应Scheme的intent-filter,iOS端在Info.plist中配置URL Types,Scheme可以设置为你的应用包名,比如com.example.myapp。
- 替换认证逻辑代码
示例代码参考:
import 'package:flutter_appauth/flutter_appauth.dart'; import 'package:googleapis/calendar/v3.dart'; import 'package:http/http.dart' as http; final FlutterAppAuth appAuth = FlutterAppAuth(); const String clientId = "你的Google Cloud客户端ID"; const String redirectUri = "com.example.myapp:/oauthredirect"; // 和你配置的深度链接一致 const List<String> scopes = [CalendarApi.calendarScope]; Future<void> initializeCalendarApi() async { try { final AuthorizationTokenResponse? result = await appAuth.authorizeAndExchangeCode( AuthorizationTokenRequest( clientId, redirectUri, scopes: scopes, serviceConfiguration: const AuthorizationServiceConfiguration( authorizationEndpoint: 'https://accounts.google.com/o/oauth2/v2/auth', tokenEndpoint: 'https://oauth2.googleapis.com/token', ), ), ); if (result != null) { // 用拿到的token创建带认证信息的Client final authClient = http.Client(); CalendarClient.calendar = CalendarApi( _AuthenticatedClient(authClient, result.accessToken!), ); } } catch (e) { // 自行处理认证错误 print('认证失败: $e'); } } // 自定义带认证头的请求Client class _AuthenticatedClient extends http.BaseClient { final http.Client _inner; final String _accessToken; _AuthenticatedClient(this._inner, this._accessToken); @override Future<http.StreamedResponse> send(http.BaseRequest request) { request.headers['Authorization'] = 'Bearer $_accessToken'; return _inner.send(request); } }
完成以上配置后,用户点击授权页的Allow按钮后,Google会自动重定向到你配置的应用深度链接,系统会直接拉起你的Flutter应用,同时自动关闭浏览器页面,无需用户手动操作。
内容的提问来源于stack exchange,提问作者random_dude101
相关产品推荐
相关产品推荐

