.NET Maui应用接入Google Sheets API可行性咨询(WPF代码适配)
适配WPF的Google Sheets API代码到.NET MAUI的解决方案
GoogleWebAuthorizationBroker是针对传统桌面应用设计的组件,在.NET MAUI这种跨平台框架里无法直接复用,得换用Google官方提供的MAUI专属授权库来改造代码,具体操作如下:
1. 安装MAUI适配的授权NuGet包
在项目中安装Google.Apis.Auth.Maui包,这是官方为MAUI优化的授权组件,支持iOS、Android、Windows等全平台。
2. 修正Google Cloud Console的应用配置
不要改成Web应用类型,改回Desktop app类型。MAUI跨平台应用用Desktop类型的客户端ID兼容性最好,无需额外配置Web应用的回调地址;如果是针对iOS/Android单独发布,也可以分别创建对应平台的客户端ID,但Desktop类型能快速完成全平台测试适配。
3. 替换授权逻辑代码
把原代码中GoogleWebAuthorizationBroker的同步授权逻辑,换成MauiAuthProvider的异步授权逻辑,完整示例如下:
using Google.Apis.Auth.Maui; using Google.Apis.Sheets.v4; using Google.Apis.Sheets.v4.Data; // 定义Google Sheets API权限范围 string[] Scopes = { SheetsService.Scope.Spreadsheets }; // 初始化MAUI授权提供者 var mauiAuthProvider = new MauiAuthProvider(new ClientSecrets { ClientId = "你的Client ID", ClientSecret = "你的Client Secret" }, Scopes, "user"); // 异步获取授权凭证(MAUI中必须用异步,禁止用.Result阻塞主线程) var credential = await mauiAuthProvider.AuthorizeAsync(); // 初始化Sheets服务实例 var service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "你的应用名称" }); // 获取表格数据(这部分逻辑和原代码一致) var values = service.Spreadsheets.Values.Get("你的表格ID", $"你的工作表名称!A:C").Execute().Values;
4. 平台特定配置补充
- Android:在
AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - iOS:在
Info.plist中添加允许跳转Google授权页面的配置:<key>LSApplicationQueriesSchemes</key> <array> <string>googlechrome</string> <string>googlechromes</string> </array> - Windows:无需额外配置,确保应用拥有网络访问权限即可。
核心注意点
- MAUI中必须使用异步授权(
await),禁止用.Result阻塞主线程,否则会导致UI卡死。 - MauiAuthProvider会自动处理不同平台的授权流程(比如Android调用系统浏览器、iOS用SafariViewController),以及token的持久化存储,无需自己实现FileDataStore逻辑。
内容的提问来源于stack exchange,提问作者blocks channel
相关产品推荐
相关产品推荐

