我想在我的Android应用程序中添加将文件存储在用户GoogleDrive上的功能。该应用程序使用Xamarin.Android。正如Google文档所述:([https://developers.google.com/drive/api/v3/about-auth#AboutAuthorization)
关于授权协议,您的应用程序必须使用OAuth 2.0才能 授权请求。不支持其他授权协议。如果 您的应用程序使用Google登录以及授权的某些方面 为您处理。
Google Sing-In是可能的,应该会更容易。但,我发现的所有Google SingIn示例都以获取用户属性(例如电子邮件或姓氏)为结尾,但是我无法找到如何将接收到的用户属性用于Google云端硬盘或任何其他API授权。例如,从Google网站:
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
或在下面的C#示例中:
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if(requestCode == SING_IN_ACTIVITY_RESULT)
{
GoogleSignInResult res = Auth.GoogleSignInApi.GetSignInResultFromIntent(data);
if(res.IsSuccess)
{
GoogleSignInAccount googleAccount = res.SignInAccount;
}
}
}
而Drive API服务需要UserCredential对象,这是OAuth2过程的结果:
{ //...
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
// Create Drive API service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
如何将GoogleSignInAccount转换为UserCredential?
GoogleSingIn只能登录,您无法将结果转换为UserCredential,然后使用Google驱动器...。
解决方案将在寻找特定的Google Drive API