如何在Xamarin中使用现有的Access Token来使用Google Apis?

时间:2018-03-21 03:16:21

标签: c# xamarin.forms google-api google-oauth2 google-api-dotnet-client

我使用Xamarin.auth在我的Xamarin表单应用程序中成功实现了登录过程。现在我想连接到Google API并上传AppData。这是我试过的代码, 我倾向于使用令牌获取GoogleCredential并将此凭据提供给Google API,但它失败了。

grant execute on [Database] to [domain\UserLogin]

request.ResponseBody始终为null。我认为它与凭证有关。

我尝试使用

var store = AccountStore.Create();
                var SavedAccount = store.FindAccountsForService(GoogleDriveBackup.Auth.Constants.AppName).FirstOrDefault();


                GoogleCredential credential2 = GoogleCredential.FromAccessToken(SavedAccount.Properties["access_token"]);
                var driveService = new Google.Apis.Drive.v3.DriveService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential2,
                    ApplicationName = "myApp",
                });
                FilesResource.CreateMediaUpload request;
                var filePath = Path.Combine(path, filename);
                using (var stream = new System.IO.FileStream(filePath,
                    System.IO.FileMode.Open))
                {
                    request = driveService.Files.Create(
                        fileMetadata, stream, "application/json");
                    request.Fields = "id";
                    request.Upload();
                }
                var file = request.ResponseBody;

但是上面的案例需要客户端秘密,而我在创建的时候并没有这样做,以及#34; Android App"在谷歌控制台和登录使用ClientId。所以我读到了我应该创造的地方"其他"在谷歌控制台中使用ClientId和Client Secret,这对我来说没什么意义,因为我使用不同的客户端ID登录。无论如何,我也试过了,但回答是空的。 那么这里的交易是什么?如何实现我的目标?

1 个答案:

答案 0 :(得分:1)

google .net客户端库不支持xamarin。我真的很惊讶你让它工作到目前为止。您将要遇到的主要问题是身份验证,因为您已经注意到.net客户端库的凭据类型将是浏览器,本机或api密钥。移动(Android Ios)客户端无法运行,因为您没有秘密,验证方法不同,客户端库无法执行此操作。

我唯一的建议就是用自己的xamarin来计算Oauth2身份验证,然后像现在一样构建TokenResponse。然后,如果您可以将dll导入项目,则可以将该令牌提供给Google .net客户端库。

据我所知,我们不打算在不久的将来支持使用Google .net clinet库的xamarin,请参阅984 840 1167