2014-10-25 1 views
1

Моя программа C# успешно использует API-интерфейс Google Analytics и API управления аккаунтом Google Премиум, который у меня есть (по настройкам прокси-сервера).C# Google Analytics UnsampledReports.Insert возвращает «Недостаточное разрешение» [403] '

Примеры успешных звонков по моей «AnalyticsService службе» являются:

service.Management.Accounts.List(); 
service.Management.Webproperties.List(account.Id); 
service.Management.Profiles.List(account.Id, webproperty.Id); 
service.Data.Ga.Get("ga:" + profile_id, end_date.ToString("yyyy-MM-dd"), end_date.AddDays(1).ToString("yyyy-MM-dd"), "ga:uniqueEvents,ga:eventValue"); 
service.Management.UnsampledReports.List(results.ProfileInfo.AccountId, results.ProfileInfo.WebPropertyId, results.ProfileInfo.ProfileId).Execute(); 
service.Management.UnsampledReports.Get(results.ProfileInfo.AccountId, results.ProfileInfo.WebPropertyId, results.ProfileInfo.ProfileId, file_entry.Id).Execute(); 

Я пытался понять область аутентификации GET/POST в service.Management.UnsampledReports.Insert, читая документацию https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtUnsampledReports но когда я пытаюсь вставить полный отчет в моей C# программы я получаю сообщение об ошибке:

The service analytics has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError 
Insufficient Permission [403] 
Errors [ 
    Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global] 
] 

код является:

UnsampledReport report = new UnsampledReport(); 
report.Title = "Test the API"; 
report.StartDate = "2014-10-21"; 
report.EndDate = "2014-10-22"; 
report.Metrics = "ga:uniqueEvents,ga:eventValue"; 
report.Dimensions = "ga:Dimension1, ga:Dimension2, ga:Dimension3, ga:eventAction"; 
report.Filters = "ga:Dimension1=~10.0.A.;ga:eventAction=~.*100$"; 
try 
{ 
    service.Management.UnsampledReports.Insert(report, results.ProfileInfo.AccountId, results.ProfileInfo.WebPropertyId, results.ProfileInfo.ProfileId).Execute(); 
} 
catch (Exception google_exception) 
{ 
    Console.WriteLine("{0} UnsampledReports.Insert caught", google_exception); 
} 

где «результаты» является результатом успешных вызовов DataResource.GaResource.GetRequest data_request = service.Data.Ga.Get(... и GaData results = data_request.Execute();

я в состоянии создать не-выборку отчетов по веб-интерфейс, предоставляемый Google Premium, можно перечислить эти отчеты и получить их на C#, но я не могу вставлять отфильтрованные отчеты с C#. В соответствии с документацией необходимо поддерживать две метрики и четыре измерения с фильтрами. Я заметил, что плоские таблицы в веб-интерфейсе поддерживают только два измерения, но я думаю, что четыре должны быть в порядке.

Я использую последние версии NuGet из:

using Google.Apis.Auth; 
using Google.Apis.Auth.OAuth2; 
using Google.Apis.Analytics.v3; 
using Google.Apis.Util.Store; 
using Google.Apis.Services; 
using Google.Apis.Analytics.v3.Data; 

Я использую эту область аутентификации:

using (var stream = new FileStream(path_secret + @"\client_secrets.json", FileMode.Open, FileAccess.Read)) 
{ 
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    GoogleClientSecrets.Load(stream).Secrets, 
    new[] { AnalyticsService.Scope.Analytics, 
      AnalyticsService.Scope.AnalyticsEdit, 
      AnalyticsService.Scope.AnalyticsReadonly }, 
    "Test user", 
    CancellationToken.None, 
    new FileDataStore("Analytics.Auth.Store")).Result; 
} 
  1. Есть ли способ включения отладки распечаток URI, порождаемых код API?
  2. Является ли Wireshark лучшим способом отладки этого типа проблем?
  3. Я не смог найти полный исходный код в .zip-файлах, где я должен смотреть?
  4. Любой, у кого есть советы и рекомендации относительно того, как реализовать вызов service.Management.UnsampledReports.Insert?

Спасибо!

+0

Пользователь, с которым вы входите в свое приложение. Какой уровень доступа у них есть? Я подозреваю, что проблема связана с доступом к вставкам. Я проверяю что-то с Devs, я вернусь к вам. – DaImTo

+0

Благодарим вас за ответ. Виноват! Перечитав документацию, я понял, что моя первая область в коде была AnalyticsService.Scope.AnalyticsReadonly, и я принял маркер Oauth2, поддерживающий эту область.Несколько неожиданно, добавив две новые области: Analytics и AnalyticsEdit в коде не запускают запрос на новый токен OAuth2 с правильной лицензией прав. –

+0

, если вы измените «Test user» на что-то еще, это заставит их повторно использовать, поскольку вы используете filedatastore, аутентификация хранится на вашем компьютере под этим именем. изменение имени приведет к его повторному использованию, потому что оно не может найти его. вам нужен только первый, он даст вам все. – DaImTo

ответ

0

Размер разработчика может измениться в коде, и единственным решением, которое я нашел до сих пор, чтобы вызвать запрос нового маркера Oauth2, является исправление строки «пользователь» в запросе учетных данных GoogleWebAuthorizationBroker.AuthorizeAsync. Это уродливая работа, и я надеюсь найти правильный вызов для принудительного запроса нового маркера Oauth2, когда область изменена в коде. Альтернативой при обновлении развернутых клиентов было бы изобрести некоторый тип управления версиями области в поле «пользователь». Это будет подвержено ошибкам и будет трудно поддерживать.