问题是:调用API是否有新方法可以将活动插入到用户的个人资料中?
我在一个月前发布了a related question here。本周早些时候工作正常,当它突然停止工作并抱怨这个错误时:
[错误讯息]
发送直接消息或获取响应时发生错误
[内部异常]
远程服务器返回错误:(400)错误请求。
[堆栈跟踪]
在 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) authorizationState,EndUserAuthorizationSuccessAuthCodeResponse authorizationSuccess)
在DotNetOpenAuth.OAuth2.WebServerClient.ProcessUserAuthorization(HttpRequestInfo) 请求)
在GPlusWrapper.PlusWrapper.GetAuthorization(WebServerClient客户端)中 \ gplus_csharp_ssflow \ PlusWrapper.cs:行 122
at Google.Apis.Authentication.OAuth2.OAuth2Authenticator`1.LoadAccessToken()
at Google.Apis.Authentication.OAuth2.OAuth2Authenticator
1.ApplyAuthenticationToRequest(HttpWebRequest request)
1 onRequestReady)at Google.Apis.Requests.Request.ExecuteRequestAsync(Action
at Google.Apis.Requests.Request.CreateWebRequest(Action1 responseHandler) at Google.Apis.Requests.ServiceRequest
1.GetAsyncResponse(Action1 responseHandler) at Google.Apis.Requests.ServiceRequest
1.GetResponse()at Google.Apis.Requests.ServiceRequest`1.Fetch()
乍一看,谷歌API和DNOA经验丰富的人会说这是一个DNOA问题。我一直在搜索三天,我发现有相同错误消息的问题不符合问题 - 或者提出的解决方案不符合我的问题。
接下来要做的就是升级,是的,因为谷歌团队可能已经改变了API的工作原理,所以它是有意义的。所以我从v1.2.4737.25316
升级到v1.3.0.15233
,这是最新的稳定版本 in the repo。
为了确保我的代码中没有导致问题的代码或其他内容,我重新访问了Gus' sample code given here。该示例代码曾用于v1.2
,但也停止在v1.2
和v1.3
中工作。
现在,由于有一个新版本的库,只有重新访问the docs并查看配置中是否有更改或如何调用API才有意义。应该调用API的方式似乎没有什么不同。
所以我做了我上次调试应用程序时所做的事情。我试过了两个
我仍然有access_type
参数,但没有任何效果。
同样,我的问题是:调用API是否有新方法可以将活动插入到用户的个人资料中?
请注意我使用的是服务器端流程
答案 0 :(得分:0)
如果您拥有quickstart working,则可以进行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调用。乍一看,我记得you had asked this before,这让我想知道这是否是特定于SS流的东西。经过一些调试后,我遇到了与运行SS相同的问题,但是,客户端正在接收授权代码 - 这是一个好兆头。客户端库失败,即使我正在删除在request_visible_actions中抽取的黑客 - 这是一个不好的迹象。
使用request_visible_actions仍然是正确的,并且在底层,客户端库正在使用OAuth V2流程,该流程不应该更改。
我changed my example server-side demo手动交换访问令牌/刷新令牌的授权码。请从GitHub再次抓取它,看看是否有帮助,但这是一个快速和脏的临时修复。我将研究为什么客户端库会破坏代码交换部分。
P.S。我知道v1.3的更改,希望我能尽快花时间执行代码更新!我以为没有人会注意到......