1

我有一个在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。它已经在开发服务器上运行,所以应该没问题。

这有什么不同?

回答

1

可以在开始时向开发服务器提供必要的信息,如here

$ dev_appserver.py --appidentity_email_address email --appidentity_private_key_path file.pem 

而对于App Engine的,你需要不使用此服务帐户,但一个与应用程序名称:

[email protected] 
相关问题