我想为我的程序创建UserCredentials,此任务的签名似乎是
Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.AuthorizeAsync(
(Uri clientSecretsUri, IEnumerable<string> scopes, string user, CancellationToken taskCancellationToken);
我发现的所有教程只是创建一个ClientSecrets类并将其作为参数传递,遗憾的是这个类没有.ToUri()方法。我也找不到关于如何构建这个uri的任何文档。因此,鉴于我显然有我的客户端ID和秘密(如果需要,还可以重定向uri),如何创建此授权所需的uri?
答案 0 :(得分:7)
我假设您正在为通用Windows平台开发?然后这将工作:
正如neosapien所说,你可以从Developer Console下载client_secrets.json。
使用Content
的构建操作将其添加到项目中。
然后根据您在项目中的位置(在这种情况下为<ProjectDirectory>/Assets/client_secrets.json
)加载它,如下所示:
await GoogleWebAuthorizationBroker.AuthorizeAsync(
new Uri("ms-appx:///Assets/client_secrets.json"),
new[] {CalendarService.Scope.Calendar, DriveService.Scope.Drive},
"user",
CancellationToken.None)
答案 1 :(得分:0)
转到Google Developers Console并从API&amp;下面的Credentials项目下载.json文件。左侧边栏中的验证菜单。
如果要在部署中包含.json文件,只需对其进行加密即可保护您的密钥和ID安全。
需要以下用法:
using Google.Apis.Services // for BaseClientService
using Google.Apis.Util.Store // for FileDataStore
using System.Threading // for CancellationToken.None
using System.Reflection // for accessing the embedded resource of the json file
Using Google.Apis.Auth.OAuth2
按如下方式创建字段和属性:
UserCredentials credentials;
CalendarService calendarService
这是我用来与Google API交互的代码:
try
{
GoogleWebAuthorizationBroker.Folder = "Tasks.Auth.Store";
credentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load({file name or stream}).Secrets,
new[] {
GmailService.Scope.GmailCompose,
CalendarService.Scope.Calendar,
Google.Apis.Plus.v1.PlusService.Scope.UserinfoEmail },
"user", CancellationToken.None,
new FileDataStore("AppDataFolderName"));
} ...
由于我将加密的.json文件安装为我的软件的一部分,整个try / catch块都在using (var cryptoStream = Encryption.ReadJson()) block followed by GoogleClientSecrets.Load(cryptoStream).Secrets
内,但您可以轻松使用任何文件路径和名称。< / p>
在上面的示例中,我要求访问读取和写入Gmail,读取和写入Google日历,并且我想知道他们在G +上的身份。 确保您已在Google Developers Console中启用了正确的API。
在您使用凭据创建服务之前,真正的魔法并没有实际发生。在上面的示例中,您将使用以下代码:
calendarService = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "My Application"
});
访问日历。
我很确定这是一种非常黑的共同做法,但它对我没有任何问题。我从这里找到的很多教程Google Drive | Daimto
中将它拼凑在一起