Момент вставки Google Plus перестал работать с использованием google-api-dotnet-client

Вопрос в следующем: есть ли новый способ вызова API, чтобы действие можно было вставить в профиль пользователя?

Около месяца назад я разместил здесь похожий вопрос. Он работал нормально до начала этой недели, когда он внезапно перестал работать и пожаловался на эту ошибку:

[сообщение об ошибке]

Произошла ошибка при отправке прямого сообщения или получении ответа

[внутреннее исключение]

Удаленный сервер вернул ошибку: (400) Bad Request.

[трассировка стека]

в DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse (запрос HttpWebRequest, параметры DirectWebRequestOptions)

в DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse (запрос HttpWebRequest)

в DotNetOpenAuth.Messaging.Channel.GetDirectResponse (HttpWebRequest webRequest)

в DotNetOpenAuth.Messaging.Channel.RequestCore (запрос IDirectedProtocolMessage)

в DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage)

в DotNetOpenAuth.OAuth2.ClientBase.UpdateAuthorizationWithResponse (состояние авторизации IAuthorizationState, успех авторизации EndUserAuthorizationSuccessAuthCodeResponse)

в DotNetOpenAuth.OAuth2.WebServerClient.ProcessUserAuthorization (запрос HttpRequestInfo)

в GPlusWrapper.PlusWrapper.GetAuthorization(клиент WebServerClient) в \gplus_csharp_ssflow\PlusWrapper.cs:строка 122

в Google.Apis.Authentication.OAuth2.OAuth2Authenticator`1.LoadAccessToken()

в Google.Apis.Authentication.OAuth2.OAuth2Authenticator1.ApplyAuthenticationToRequest(HttpWebRequest request)
at Google.Apis.Requests.Request.CreateWebRequest(Action
1 onRequestReady) в Google.Apis.Requests.Request.ExecuteRequestAsync(Action1 responseHandler) at Google.Apis.Requests.ServiceRequest1.GetAsyncResponse(Action1 responseHandler) at Google.Apis.Requests.ServiceRequest1.GetResponse() в Google.Apis.Requests.ServiceRequest`1.Fetch())

На первый взгляд тот, кто имеет опыт работы с Google API и DNOA, скажет, что это проблема DNOA. Я искал в течение трех дней, и проблемы, которые я обнаружил с тем же сообщением об ошибке, не соответствуют проблеме - или предложенное решение не соответствует моей проблеме.

Итак, следующее, что нужно сделать, это обновить, да, это имеет смысл, так как команда Google, возможно, что-то изменила в том, как работает API. Поэтому я обновился с v1.2.4737.25316 до v1.3.0.15233, которая является последней стабильной версией в репозитории.

Чтобы убедиться, что это не мой код или что-то в моем коде, который вызывает проблему, я повторно посетил образец Гаса. код, приведенный здесь. Этот пример кода раньше работал в v1.2, но перестал работать и в v1.2, и в v1.3.

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

Итак, я сделал то, что делал в прошлый раз при отладке приложения. я пробовал оба

  • запрос_видимые_действия; а также
  • requestvisibleactions

а у меня еще был параметр access_type и ничего не работало.

Еще раз, мой вопрос: есть ли новый способ вызова API, чтобы действие можно было вставить в профиль пользователя?

Обратите внимание, что я использую поток на стороне сервера


person von v.    schedule 08.05.2013    source источник


Ответы (1)


Если у вас есть быстрый запуск, вы можете выполнять вызовы API для написания действий приложения. Чтобы проверить это, найдите следующую строку кода в кратком руководстве:

ps = new PlusService(authenticator);

На этом этапе, если вы успешно авторизовались, вы можете создать объект момента и написать его в Google:

Moment body = new Moment();
body.Target = new ItemScope();
body.Target.Url = “https://developers.google.com/+/web/snippet/examples/widget”;
body.Type = “http://schemas.google.com/AddActivity”;
ps.Moments.Insert(body, “me”, MomentsResource.Collection.Vault).Fetch();

Я только что протестировал код, он все еще работает, а это значит, что библиотека все еще может выполнять вызовы API. На второй взгляд я вспомнил, что вы спрашивали об этом раньше, что заставляет меня задаться вопросом, является ли это чем-то специфичным для потока SS. После небольшой отладки я столкнулся с той же проблемой, что и у вас при запуске SS, однако клиент получает код авторизации — хороший знак. Клиентская библиотека дает сбой, хотя я убираю хак для прокачки request_visible_actions — плохой знак.

Использование request_visible_actions по-прежнему корректно, и под капотом клиентская библиотека использует поток OAuth V2, который не должен был измениться.

Окончательное обновление:

Я изменил свой пример демонстрационной версии на стороне сервера, чтобы вручную заменить код авторизации на токен доступа / токен обновления. Пожалуйста, скачайте его еще раз с GitHub, чтобы посмотреть, поможет ли это, но это быстрое и грязное временное исправление. Я посмотрю, почему клиентская библиотека ломается в части обмена кодом.

P.S. Я знаю об изменениях версии 1.3, надеюсь, скоро найду время для обновления кода! Я думал никто не заметит...

person class    schedule 09.05.2013
comment
Привет, Гас! Я собирался ответить, что использую другой образец проекта, который вы дали, и на который мы оба ссылались в этом разделе вопросов и ответов. Хорошо, что я заметил, что вы обновили свой ответ. Я получу этот обновленный образец кода и сообщу вам о результате. Но позвольте мне поблагодарить вас сейчас (большое!) за то, что вы нашли время, чтобы изучить проблему и найти решение (даже если оно временное) :) - person von v.; 09.05.2013
comment
Я все еще получаю сообщение об ошибке с обновленным кодом: The remote server returned an error: (400) Bad Request. Однако тип исключения теперь ProtocolError. Больше нечего описать ошибку, нет внутреннего исключения. Ошибка в строке 75 ManualCodeExchanger -›WebResponse response = request.GetResponse() - person von v.; 09.05.2013
comment
Ах, нвм, мой плохой. Я изменил порт, который использует проект, чтобы запустить его на своем компьютере. Я не заметил, что вы используете RedirectUri как часть временного исправления. Я просто должен изменить это. Все работает сейчас. Спасибо! @class есть ли место, где я могу подписаться, если у вас есть обновления в библиотеке? Нравится, если у вас есть обновление по этому вопросу? - person von v.; 09.05.2013
comment
Официальные обновления Google+ будут размещены на странице GitHub: github.com/googleplus. - person class; 09.05.2013