【发布时间】:2021-12-14 14:59:18
【问题描述】:
我正在编写一个 Xamarin.Forms (C#) 移动应用程序。它适用于单个谷歌电子表格修改,只需几个按钮,每个按钮都会更改电子表格中的一个单元格。电子表格是私人的,只有几个人可以阅读或进行任何更改,这就是我需要在这里使用UserCredential credential; 的原因。我发现了两种方法,都抛出了不同的异常:
-
credential = new UserCredential(new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer{ClientSecrets = GoogleClientSecrets.FromStream(...).Secrets, Scopes = new[]{...}, DataStore = new FileDataStore(..., true) }), "user", null); -
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.FromStream(...).Secrets, new string[]{...}, "user", CancellationToken.None, new FileDataStore(..., true)).Result;
credential后来被设置为service对象的成员SheetsService.HttpClientInitializer,使用如下(选择的电子表格是公开的,spreadsheetId和range取自Google的.Net quickstart:@ 987654321@):
string spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms", range = "Class Data!A2:E";
SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range);
var resp = request.Execute();
例外:
-
var resp = request.Execute();行抛出System.NullReferenceException(我发现Google.Apis.Requests.ClientServiceRequest基类中的属性Credential是null。 -
AuthorizeAsync方法抛出异常并显示以下消息:
无法使用“https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&resp...”启动浏览器
P.S.:我也尝试过 GoogleCredential 方法,它适用于公共电子表格,但我的“服务”甚至没有权限阅读这个私人电子表格......
【问题讨论】:
-
此链接(stackoverflow.com/questions/64445242/…) 可能对您有所帮助。
-
@WenxuLi-MSFT :谢谢链接,但我没有找到 Xamarin 项目的答案(仅参考谷歌文档,我最初检查过)
-
有类似“redirect uri mismatch”的问题吗?
-
@WenxuLi-MSFT nope :( 但我查看了调试输出,发现以下错误(?):“AOT: image 'Mono.Security.dll.so ' not found: dlopen failed” 我尝试的第一步是向 Android 项目添加“Mono.Security”引用(没有结果),然后我还检查了“System.Security”(相同),..
-
@DaImTo - 不,我一直使用“GoogleCredential”,只是将服务地址添加到可以修改电子表格的私人列表中......
标签: c# xamarin.forms google-oauth google-sheets-api