我正试图在Windows手机应用程序中添加片刻两天,但我无法正常工作。没有真正的教程或者有什么事情要做...无论如何,从我到目前为止我可以登录的各种来源,请求范围(即使login.plus范围由于某种原因没有被请求)和我试着发布一下。这是我能够创建的代码
List<string> scopes = new List<string>();
scopes.Add("https://www.googleapis.com/auth/plus.login");
scopes.Add("https://www.googleapis.com/auth/userinfo.email");
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "<My client ID>",
ClientSecret = "<My Client Secret>"
},
scopes,
"user",
CancellationToken.None);
var initializer = new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "WP Drive Sample Application",
};
var plusService = new PlusService(initializer);
Moment body = new Moment();
ItemScope target = new ItemScope();
target.Id = "<Unique ID>";
target.Image = "http://www.google.com/s2/static/images/GoogleyEyes.png";
target.Type = "";
target.Description = "The description for the activity";
target.Name = "An example of add activity";
body.Target = target;
body.Type = "http://schemas.google.com/AddActivity";
MomentsResource.InsertRequest insert =
new MomentsResource.InsertRequest(
plusService,
body,
"me",
MomentsResource.InsertRequest.CollectionEnum.Vault);
Moment wrote = await insert.ExecuteAsync();
当我尝试使用insert.ExecuteAsync();
时,我收到此错误 {The service plus has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError
Unauthorized [401]
Errors [
Message[Unauthorized] Location[ - ] Reason[unauthorized] Domain[global]
]
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Microsoft.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at Google.Apis.Requests.ClientServiceRequest`1.<ExecuteAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at GooglePlus.MainPage.<Test>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state)}
经过一番搜索,我发现可能无法访问它的问题是我不使用request_visible_actions。但问题是,我不知道如何用我的代码请求它,我无法在互联网上找到任何资源,我可以在我的Windows手机应用程序中使用。我知道如何解决这个问题并最终能够从我的应用程序中发布片刻?
答案 0 :(得分:2)
一些注意事项:
对于2,您可以使用Google+登录按钮执行授权请求,也可以更改请求URI以推送其他参数。以下显示了如何创建设置了request_visible_actions的登录按钮:
<span id="signinButton">
<span
class="g-signin"
data-callback="signinCallback"
data-clientid="CLIENT_ID"
data-accesstype="offline"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/plus.login">
</span>
</span>
来自登录按钮的回调会返回一个授权代码,您可以使用该代码交换访问/刷新令牌,然后可以使用API调用将应用活动写入Google。因为您使用的是Windows Phone,所以我不太清楚它应该如何工作。
无论如何,KEY缺失部分很可能是requestvisibleactions的值。如果您缺少request_visible_actions,则您的同意对话框将如下所示:
要验证它是否正在请求正确的权限,您将看到包含以下内容的同意对话框:
如果系统提示用户提供应用活动,则表示您正在正确设置范围,并且应具有权限。
如果您要求正确的范围但项目缺少相应的API(Google developer console中的Google+ API),您将继续看到401错误 - 请确保您已添加Google +。
我现在创建了一个展示how to request the Google+ app activity types this from native apps的控制台项目 - 检查
有一个已知错误,即在您授权没有应用活动权限的用户后,您必须disconnect and reconnect the app才能获得权限。