我正在尝试使用C#从Google Analytics下载指标数据,并且正在使用OAuth 2.0执行用户身份验证。我正在使用已安装的应用程序授权流程,该流程需要登录Google并将代码复制并粘贴到应用程序中。我正在关注从google-api-dotnet-client获取的代码:
private void DownloadData()
{
Service = new AnalyticsService(new BaseClientService.Initializer() {
Authenticator = CreateAuthenticator(),
});
var request = service.Data.Ga.Get(AccountID, StartDate, EndDate, Metrics);
request.Dimensions = Dimensions;
request.StartIndex = 1;
request.MaxResults = 10000;
var response = request.Execute(); // throws Google.GoogleApiException
}
private IAuthenticator CreateAuthenticator()
{
var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description) {
ClientIdentifier = "123456789012.apps.googleusercontent.com",
ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxx",
};
return new OAuth2Authenticator<NativeApplicationClient>(provider, Login);
}
private static IAuthorizationState Login(NativeApplicationClient arg)
{
// Generate the authorization URL.
IAuthorizationState state = new AuthorizationState(new[] { AnalyticsService.Scopes.AnalyticsReadonly.GetStringValue() });
state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
Uri authUri = arg.RequestUserAuthorization(state);
// Request authorization from the user by opening a browser window.
Process.Start(authUri.ToString());
Console.Write("Google Authorization Code: ");
string authCode = Console.ReadLine();
// Retrieve the access token by using the authorization code.
state = arg.ProcessUserAuthorization(authCode, state);
return state;
}
Google帐户xxxxxx@gmail.com
注册了客户ID和密码。同一帐户在Google Analytics中具有完全管理权限。当我尝试从Google Analytics中提取数据时,它会通过授权流程,该流程似乎正常运行。然后它失败了:
Google.GoogleApiException
Google.Apis.Requests.RequestError
用户对此配置文件没有足够的权限。 [403]
错误[
消息[用户对此配置文件没有足够的权限。]位置[ - ]原因[insufficientPermissions]域[global]
]
我一直在努力奋斗几个小时。我已经仔细检查过正确的用户是否正在使用,并且已获得Google Analytics授权。我对于错误配置的东西感到茫然。有关需要配置或更改的内容的任何想法?
答案 0 :(得分:15)
如果auth似乎正在运行,那么我的建议是确保您提供正确的ID,因为根据您的代码段:
var request = service.Data.Ga.Get(AccountID, StartDate, EndDate, Metrics);
只能假设您使用的是帐户ID。如果是这样,那是不正确的,你会收到你遇到的错误。您需要使用配置文件ID进行查询。
如果您使用网络界面登录Google Analytics,您会在浏览器地址栏的网址中看到以下模式:
/a12345w654321p9876543/
p 后面的数字是配置文件ID,因此上例中的9876543。确保你正在使用它,实际上你应该使用{{3>} ga:9876543 。
如果不是ID问题,请查询table id列出帐户并查看您有权访问的内容并验证身份验证是否正常运行。
答案 1 :(得分:0)
答案 2 :(得分:0)
//感谢您的这篇文章。可以从帐户摘要中读取所需的个人资料ID。
字典配置文件=新字典();
var accounts = service.Management.AccountSummaries.List().Execute();
foreach (var account in accounts.Items)
{
var profileId = account.WebProperties[0].Profiles[0].Id;
profiles.Add("ga:" + profileId, account.Name);
}