You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:03:34