2016-03-16 2 views
0

Я пытаюсь использовать Double Click for Advertisers API (DFA). Я исследовал «Попробуйте» и протестировал Api через консоль разработчиков Google, и он работает так, как ожидалось. Я смог поймать токен авторизации и выполнить запросы на получение и отправку (через браузер и программно). Однако, когда я пытаюсь сделать то же самое, программно используя donet api 2.4, токен аутентификации, который был сгенерирован, не позволяет мне делать какие-либо запросы, он всегда возвращает HTTP 400 Bad Request по причине Недопустимый идентификатор профиля.Отчет Google DFA - неверный запрос (400) Недопустимый идентификатор профиля

Я не уверен, если client_secrets.json правильно, но я создал его, используя ту же учетную запись электронной почты, который имеет доступ к отчетам.

{ 
    "installed": { 

    "client_id": "<client_id>.apps.googleusercontent.com", 
    "project_id": "<project_id>", 
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
    "token_uri": "https://accounts.google.com/o/oauth2/token", 
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
    "client_secret": "<secret>", 
    "redirect_uris": [ "urn:ietf:wg:oauth:2.0:oob", "http://localhost" ] 
    } 
} 

Я использовал код мандатную ниже:

private static readonly IEnumerable<string> scopes = new[] { 
    DfareportingService.Scope.Dfareporting, 
    DfareportingService.Scope.Dfatrafficking 
};  
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
         GoogleClientSecrets.Load(stream).Secrets, 
         scopes, 
         "dfa-user", CancellationToken.None, 
         new FileDataStore("DfaReporting.Samples")).Result; 

Сформированный маркер дает мне следующую информацию:

{ 
"issued_to": "<client_id>.apps.googleusercontent.com", 
"audience": "<client_id>.apps.googleusercontent.com", 
"scope": "https://www.googleapis.com/auth/dfareporting https://www.googleapis.com/auth/dfatrafficking", 
"expires_in": 3073, 
"access_type": "offline" 
} 

библиотеки я уже упоминал выше, доступны на GitHub: https://github.com/googleads/googleads-dfa-reporting-samples/tree/master/dotnet/v2.4

Что мне не хватает?

+0

где запрос, который терпит неудачу? вы только отправили свой код аутентификации, этого недостаточно, чтобы найти вашу ошибку. Помните, что пользователь, который выполняет проверку подлинности, должен быть таким же, как пользователь, которому принадлежит профиль, к которому вы пытаетесь запросить данные. – DaImTo

+0

У него нет полного кода, но в основном служба является результатом метода, в котором я получаю учетные данные. Запрос, предоставляющий исключение (плохой запрос), является сервисом. Реестры.Run 'Служба DfareportingService = DfaReportingFactory.getInstance(); (...) // Запустите отчет. Файл file = service.Reports.Run (profileId, reportId) .Execute() ' – bmvr

+0

do userprofiles.list сначала попробуйте запустить отчет для профиля, к которому у пользователя нет доступа. – DaImTo

ответ

0

Сначала убедитесь, что вы установили это correctly.

  1. У вас должен быть аккаунт DCM. См. Advertisers/Agencies для получения информации о регистрации.
  2. Ваша учетная запись DCM должна быть включена для доступа к API. Обратитесь за помощью к представителю DoubleClick или в службу поддержки DCM. ([email protected])
  3. У вас должен быть профиль пользователя с доступом к этой учетной записи. Попросите администратора учетной записи DCM создать профиль пользователя, связанный с этой учетной записью.

Мне кажется, что кто-либо, кто когда-либо пытался использовать для аутентификации, не имеет доступа к профилю, который вы пытаетесь запросить.

В ответ на комментарий:

Если вы используете библиотеку .net клиента, я не понимаю, почему вы бы называть следующий запрос вручную, как вы комментировали

https://www.googleapis.com/dfareporting/v2.4/userprofiles?access_token=<access token> 

I также не понимают, как, если вы используете .Net-клиентскую библиотеку, и следующий запрос может вернуть недопустимый идентификатор профиля, когда вы его не отправляете. Он не может возвращать профили, если у пользователя нет доступа к каким-либо.

service.UserProfiles.List().Execute(); 

Это может вернуть недопустимый идентификатор профиля, если идентификатор профиля, который вы отправляете, недействителен.

service.UserProfiles.Get(profileId).Execute(); 

Запуск отчетов

Чтобы иметь возможность запускать отчет, пользователь должен иметь доступ к профилю и отчета. Ваше сообщение об ошибке означает, что пользователь не имеет доступа к этому профилю, который вам нужен для входа в систему с пользователем, который имеет доступ или предоставляет доступ пользователю.

service.Reports.Run(profileId,reportId).Execute(); 
+0

Сделав GET https://www.googleapis.com/dfareporting/v2.4/userprofiles?access_token= , я получил пустой список профилей, что означает, что учетные данные, переданные на client_secrets.json, не соответствуют учетную запись DFA, которую я использую. Как я узнаю, что я правильно настраиваю секрет клиентов? Я выполнил инструкции в документации. Создал проект, включил API и создал секрет. – bmvr

+0

У вас нет пустого списка профилей, потому что у пользователя нет профилей. Если учетные данные неверны, вы получили бы ошибку и вообще не смогли бы назвать API. – DaImTo

+0

, чтобы правильно настроить проверку № 2 и 3. Убедитесь, что у вас есть доступ. – DaImTo

Смежные вопросы