我有一个在App Engine上运行的Golang应用程序,我想调用Analytics API来处理一些指标。无论是在App Engine还是在开发服务器上。使用App Engine开发服务器向Google API声明身份
This page describes the overall procedure使用服务帐户进行服务器到服务器通信并使用OAuth2获取访问令牌。我想避免自己这样做,所以我找到了Google APIs for Go以及描述how to do it for App Engine的以下内容。
我已将App Engine应用的服务帐户电子邮件添加到Google Analytics以供读取。
我玩过查询使用Query Explorer,这很好。我甚至使用了包含适当访问令牌的API查询URI,并且工作正常。这可以很好地通过cURL或通过App Engine上的urlfetch进行调用。
我需要的是在App Engine上自动获取访问令牌,以及在使用开发服务器时。
这里是一个URL缩短器的例子,它已被修改为使用Analytics API来代替。
client := http.Client{
Transport: &oauth2.Transport{
Source: google.AppEngineTokenSource(c, analytics.AnalyticsScope),
Base: &urlfetch.Transport{Context: c},
},
}
svc, err := analytics.New(&client)
if err != nil {
return nil, err
}
data, err := svc.Data.Ga.Get("...")
在开发服务器的响应是401凭据无效,authError。
这是应该这样工作还是我错过了什么?
UPDATE
所以,问题就解决了一半。当我传递服务帐户的电子邮件和.pem
文件时,它现在可以正常使用开发服务器。但是,App Engine中的同一个服务帐户无法使用上述代码!
googleapi: Error 403: User does not have any Google Analytics account., insufficientPermissions
用户应该是,我已经成功地开发服务器上使用的服务帐户,所以我真的不明白这个问题。它与App Engine和开发服务器上的代码完全相同。
Google Analytics设置为具有读取权限,并使用只读API。它已经在开发服务器上运行,所以应该没问题。
这有什么不同?