2014-03-13 73 views
1

我想從Windows Phone應用程序添加一個時刻兩天,現在我無法得到它的工作。沒有真正的教程或從未做過的事情......無論如何,從各種各樣的資源中,我可以登錄,請求範圍(即使login.plus範圍由於某種原因未被請求),我嘗試張貼片刻。這是我能夠創建的代碼插入時刻谷歌加google-api-dotnet客戶端WP8錯誤401

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。但問題是,我不知道如何用我的代碼請求它,我在c sharp上找不到任何資源,我可以在我的windows phone應用程序中使用它。任何想法如何解決這個問題,並能夠從我的應用程序最後張貼一段時間?

+0

您是否檢查出該鏈接:http:// ikaisays。COM/2013/07/19 /調試,你 - 谷歌 - OAuth的2-0-令牌時任您得到-HTTP-401S-OR-403S /。在我看來,你沒有啓用API。 – peleyal

+0

我已啓用Google+ API –

+0

你有效嗎? – DaImTo

回答

2

的幾個注意事項:

  1. 您的郵箱範圍是不正確,這個最近被更新爲「電子郵件」
  2. 401正在發生的事情,因爲你錯過了編寫應用程序的活動request_visible_actions。

對於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 + API在Google developer console),您將會繼續看到401錯誤 - 請確保您已添加Google+。

我現在已經創建了一個控制檯項目展示how to request the Google+ app activity types this from native apps - 檢查

這是一個已知的bug在那裏後,你有沒有授權的應用程序活動權限的用戶,必須disconnect and reconnect the app才能被授予的權限。

+0

正如我在我的問題中所說的,我已經認爲我的問題是我需要request_visible_actions參數,並且我已經說過,範圍在提示權限時不會出現。我已經考慮過使用登錄按鈕,但對我來說這不是一個真正的選擇,因爲我想要有類似的感覺,就像我的其他共享選項一樣(另外我甚至不知道是否可以使用它)。我的問題是,呈現HTML我只能使用WebBrowser組件。所以要呈現標誌按鈕,我需要創建一個html,以某種方式監聽請求更改等......看起來似乎過度。 –

+0

已確認,仍在進一步研究。 – class

+0

@class您是否將「response_type」參數設置爲「code」? – Supertecnoboff

相關問題