[我为尝试获得简单的服务帐户登录名以使用C#,使用Google API和Google Analytics(分析)而感到非常痛苦。我的公司已经将数据导入到Analytics(分析)中,我可以使用他们的Query Explorer查询信息,但是从.Net入门并没有成功。我使用的是Google生成的带有PKI的json文件,因为该文档说,这样的服务帐户是使用Googla API进行计算机到计算机通信的正确方法。代码段:
public static GoogleCredential _cred;
public static string _exePath;
static void Main(string[] args) {
_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Replace(@"file:\", "");
var t = Task.Run(() => Run());
t.Wait();
}
private static async Task Run() {
try {
// Get active credential
using (var stream = new FileStream(_exePath + "\\Default-GASvcAcct-508d097b0bff.json", FileMode.Open, FileAccess.Read)) {
_cred = GoogleCredential.FromStream(stream);
}
if (_cred.IsCreateScopedRequired) {
_cred.CreateScoped(new string[] { AnalyticsService.Scope.Analytics });
}
// Create the service
AnalyticsService service = new AnalyticsService(
new BaseClientService.Initializer() {
HttpClientInitializer = _cred,
});
var act1 = service.Management.Accounts.List().Execute(); // blows-up here
它们都可以正常编译,但是当它碰到Execute()语句时,会抛出GoogleApiException
错误:
[[无效的凭证]位置[授权-标头]原因[authError]域[全局]
我想念什么?] >>
[我为尝试获得简单的服务帐户登录名以使用C#,使用Google API和Google Analytics(分析)而感到非常痛苦。我的公司已经将数据输入到Google Analytics(分析)中,我可以查询...
[似乎GoogleAnalytics无法使用通用GoogleCredential
并将其解释为ServiceAccountCredential
(即使在内部承认它实际上是该类型
发生无效的凭证错误,因为您指定的范围实际上并未随凭证一起发送。我犯了同样的错误,并且仅在调试后才意识到,并且在CreateScoped
调用之后仍在凭证上看到0个作用域。
另一种选择是使用GoogleCredential.GetApplicationDefault()
。我相信这是当前(2018年10月)推荐的方法。这是一些F#,但在C#模语法中几乎相同:
[2020年,您不需要做所有这些事情,并且GoogleCredential可以正常工作。问题中的代码看起来正确,只有一行: