使用google-api-dotnet-client WP8错误401插入google plus的时刻

时间:2014-03-13 10:11:58

标签: c# windows-phone-8 google-plus google-api-dotnet-client

我正试图在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手机应用程序中使用。我知道如何解决这个问题并最终能够从我的应用程序中发布片刻?

1 个答案:

答案 0 :(得分:2)

一些注意事项:

  1. 您的电子邮件范围不正确,最近已更新为“email”
  2. 401正在发生,因为您缺少用于编写应用活动的request_visible_actions。
  3. 对于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,则您的同意对话框将如下所示:

    Incorrect example with only sign-in

    要验证它是否正在请求正确的权限,您将看到包含以下内容的同意对话框:

    Correct example

    如果系统提示用户提供应用活动,则表示您正在正确设置范围,并且应具有权限。

    如果您要求正确的范围但项目缺少相应的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才能获得权限。