2014-10-09 47 views
0

我想從Google plus api獲取用戶信息。我正在關注這個Link以G +集成。在這裏,我可以獲得除DOB以外的所有信息。但現在我必須得到用戶的出生日期。我無法從Google Plus API獲取出生日期

我檢查了這個Linkthis link。但是現在我仍然無法獲得DOB。

我已經嘗試更改範圍。

https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.login 

但是在這裏我得到這個錯誤。

The remote server returned an error: NotFound. 

請幫我拿到DOB ..在此先感謝..

更新問題:

,如果我用這個https://www.googleapis.com/plus/v1/people/me?access_token網址我得到這樣的響應:

{ 
"kind": "plus#person", 
"etag": "\"Vea_b94Y77GDGgRK7gFNPnolKQw/9l0eRpGHUNy6ZNRNIEbS6cgHc3Y\"", 
"gender": "male", 
"emails": [ 
    { 
    "value": "[email protected]", 
    "type": "account" 
    } 
], 
"objectType": "person", 
"id": "1024703XXXXXXXXX93", 
"displayName": "C. Vijay Dhas", 
"name": { 
    "familyName": "Dhas", 
    "givenName": "C. Vijay" 
}, 
"url": "https://plus.google.com/1024703XXXXXXXXX93", 
"image": { 
    "url": "https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA 
/4252rscbv5M/photo.jpg?sz=50", 
    "isDefault": true 
}, 
"isPlusUser": true, 
"language": "en", 
"circledByCount": 0, 
"verified": false 
} 

如果我使用這個https://www.googleapis.com/oauth2/v1/userinfo?access_token url我得到這個迴應:

{ 
"id": "1024703XXXXXXXXX93", 
"email": "[email protected]", 
"verified_email": true, 
"name": "C. Vijay Dhas", 
"given_name": "C. Vijay", 
"family_name": "Dhas", 
"link": "https://plus.google.com/1024703XXXXXXXXX93", 
"picture": "https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAA 
AAA/4252rscbv5M/photo.jpg", 
"gender": "male", 
"locale": "en" 
} 

這裏我的整個代碼:

public partial class GooglePlusLoginPage : PhoneApplicationPage 
{ 
    GooglePlusTokens googlePlusTokens = new GooglePlusTokens(); 
    GooglePlusUserInfo googlePlusUserInfo = new GooglePlusUserInfo(); 

    string Parameters = null; 
    string ClientId = "837597087773-9of2t72imted819fr1556t6qoj1ts6h7.apps.googleusercontent.com"; 
    string ClientSecret = "U8B7SdW3zmBB_k0AFCKXaE3f"; 
    string RedirctedUri = "http://localhost"; 

    [DataContract] 
    public class GooglePlusAccessToken 
    { 
     [DataMember(Name = "access_token")] 
     public string AccessToken { get; set; } 
     [DataMember(Name = "refresh_token")] 
     public string RefreshToken { get; set; } 
     [DataMember(Name = "expires_in")] 
     public string ExpiresIn { get; set; } 
     [DataMember(Name = "token_type")] 
     public string TokenType { get; set; } 
    } 

    [DataContract] 
    public class GooglePlusUserProfile 
    { 
     [DataMember(Name = "id")] 
     public string id { get; set; } 
     [DataMember(Name = "email")] 
     public string email { get; set; } 
     [DataMember(Name = "name")] 
     public string name { get; set; } 
     [DataMember(Name = "given_name")] 
     public string given_name { get; set; } 
     [DataMember(Name = "family_name")] 
     public string family_name { get; set; } 
     [DataMember(Name = "link")] 
     public string link { get; set; } 
     [DataMember(Name = "picture")] 
     public string picture { get; set; } 
     [DataMember(Name = "gender")] 
     public string gender { get; set; } 
     [DataMember(Name = "birthday")] 
     public string birthday { get; set; } 

    } 

    public GooglePlusLoginPage() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(GooglePlus_LoginPage_Loaded); //load google plus login page 
    } 

    void GooglePlus_LoginPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     var url = "https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=" + RedirctedUri + "&scope=https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&client_id=" + ClientId; 

     var newUrl = "https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=" + RedirctedUri + "&scope=https://www.googleapis.com/auth/plus.login%20https://www.googleapis.com/auth/userinfo.profile%20https://www.googleapis.com/auth/userinfo.email&client_id=" + ClientId; 

     webBrowserGooglePlusLogin.Navigate(new Uri(url, UriKind.RelativeOrAbsolute)); 
    } 

    private void webBrowserGooglePlusLogin_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     webBrowserGooglePlusLogin.Visibility = Visibility.Visible; 
    } 

    private void webBrowserGooglePlusLogin_Navigating(object sender, NavigatingEventArgs e) 
    { 
     if (e.Uri.Host.Equals("localhost")) 
     { 
      webBrowserGooglePlusLogin.Visibility = Visibility.Collapsed; 
      e.Cancel = true; 
      int pos = e.Uri.Query.IndexOf("="); 
      string messageCode = pos > -1 ? e.Uri.Query.Substring(pos + 1) : null; 
      if (messageCode != null) 
      { 
       Parameters = "code=" + messageCode + "&client_id=" + ClientId + "&client_secret=" + ClientSecret + "&redirect_uri=" + RedirctedUri + "&grant_type=authorization_code"; 
       HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token"); 
       webRequest.Method = "POST"; 
       webRequest.ContentType = "application/x-www-form-urlencoded"; 
       webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), webRequest); 
      } 
     } 
    } 

    void GetRequestStreamCallback(IAsyncResult asynchronousResult) 
    { 
     try 
     { 
      HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;    
      Stream postStream = webRequest.EndGetRequestStream(asynchronousResult); 
      byte[] byteArray = Encoding.UTF8.GetBytes(Parameters); 
      postStream.Write(byteArray, 0, byteArray.Length); 
      postStream.Close(); 
      webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest); 
     } 
     catch (WebException ex) 
     { 
     } 

    } 

    void GetResponseCallback(IAsyncResult asynchronousResult) 
    { 
     try 
     { 
      var request = (HttpWebRequest)asynchronousResult.AsyncState; 

      using (var resp = (HttpWebResponse)request.EndGetResponse(asynchronousResult)) 
      { 
       using (var streamResponse = resp.GetResponseStream()) 
       { 
        var GooglePlusSerializerData = new DataContractJsonSerializer(typeof(GooglePlusAccessToken)); 
        var GooglePlusProfileData = GooglePlusSerializerData.ReadObject(streamResponse) as GooglePlusAccessToken; 
        this.Dispatcher.BeginInvoke(
         (Action<GooglePlusAccessToken>)((GooglePlusUserData) => 
         { 
          GooglePlusData.AccessToken = googlePlusTokens.AccessToken = GooglePlusUserData.AccessToken; 
          googlePlusTokens.RefreshToken = GooglePlusUserData.RefreshToken; 
          googlePlusTokens.ExpiresIn = GooglePlusUserData.ExpiresIn; 
          googlePlusTokens.TokenType = GooglePlusUserData.TokenType; 
          RequestForUserProfile(); 
         }), GooglePlusProfileData); 

       } 
      } 
     } 
     catch (WebException ex) 
     { 
      Console.WriteLine("Error==> " + ex.Message); 
     } 
    } 

    void RequestForUserProfile() 
    { 
     //var urlProfile = "https://www.googleapis.com/plus/v1/people/me?access_token=" + GooglePlusData.AccessToken; 
     var urlProfile = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + GooglePlusData.AccessToken;   
     WebRequest request = WebRequest.Create(urlProfile); 
     request.BeginGetResponse(new AsyncCallback(this.ResponseCallbackProfile), request); 
    } 

    private void ResponseCallbackProfile(IAsyncResult asynchronousResult) 
    { 
     try 
     { 
      var request = (HttpWebRequest)asynchronousResult.AsyncState; 

      using (var resp = (HttpWebResponse)request.EndGetResponse(asynchronousResult)) 
      { 
       using (var streamResponse = resp.GetResponseStream()) 
       { 

        var GooglePlusSerializerData = new DataContractJsonSerializer(typeof(GooglePlusUserProfile)); 
        var GooglePlusProfileData = GooglePlusSerializerData.ReadObject(streamResponse) as GooglePlusUserProfile; 

        this.Dispatcher.BeginInvoke(
         (Action<GooglePlusUserProfile>)((GooglePlusUserData) => 
         { 
          GooglePlusData.UserName = googlePlusUserInfo.UserName = GooglePlusUserData.name; 
         GooglePlusData.UserImage = googlePlusUserInfo.UserPicture = GooglePlusUserData.picture; 
         if (GooglePlusData.UserImage == null) 
          { 
           GooglePlusData.UserImage = googlePlusUserInfo.UserPicture = "https://lh3.googleusercontent.com/-_kvINpT6jtI/AAAAAAAAAAI/AAAAAAAAAAA/IEAclp4PQbk/photo.jpg"; 
          } 
          googlePlusUserInfo.UserBidthday = GooglePlusUserData.birthday; 
          GooglePlusData.UserEmail = googlePlusUserInfo.UserEmail = GooglePlusUserData.email; 
         googlePlusUserInfo.UserFamilyName = GooglePlusUserData.family_name; 
         GooglePlusData.UserGender = googlePlusUserInfo.UserGender = GooglePlusUserData.gender; 
          googlePlusUserInfo.UserGivenName = GooglePlusUserData.given_name; 
         googlePlusUserInfo.UserId = GooglePlusUserData.id; 
         googlePlusUserInfo.UserLink = GooglePlusUserData.link; 

         Console.WriteLine("email==> " + GooglePlusUserData.email); 
          Console.WriteLine("birthday==> " + GooglePlusUserData.birthday);  

          Deployment.Current.Dispatcher.BeginInvoke(() => 
         { 
           //logout(); 
          }); 
         }), GooglePlusProfileData); 
       } 
      } 
     } 
     catch (WebException ex) 
     { 

     } 
    } 

    void logout() 
    { 
     var url = "http://accounts.google.com/Logout"; 
     webBrowserGooglePlusLogin.Navigate(new Uri(url, UriKind.RelativeOrAbsolute));   
     NavigationService.GoBack();   
    } 
} 

回答

0

諾基亞的文章是相當誤導關於它在做什麼。特別是,雖然它說以下方法稱爲「Google+ API」,但事實並非如此。藉助Google+呼叫註釋出來,並調用的是舊的(和不建議使用)用戶信息API:


//request for user prifile 
    void RequestForUserProfile() 
     { 
      // var urlProfile = "https://www.googleapis.com/plus/v1/people/me?access_token=" + thisApp.AccessToken; 
      var urlProfile = "https://www.googleapis.com/oauth2/v1/userinfo?access_token="+thisApp.AccessToken; 
      // web request user profile 
      WebRequest request = WebRequest.Create(urlProfile); 
      request.BeginGetResponse(new AsyncCallback(this.ResponseCallbackProfile), request); 
     } 

如果路徑中註釋掉urlProfile的「用戶信息」,並取消了一個與「加/ V1 /人「,你可能會有更好的運氣。

如果這不起作用,您可能需要更新原始問題,以準確顯示您正在使用的代碼,您正在嘗試執行的操作以及生成的錯誤消息的確切位置。

+0

是的..現在我得到了出生日期.. !!!!我使用這個網址'「https://www.googleapis.com/plus/v1/people/me?access_token=」+ thisApp.AccessToken;'.. – Vijay 2014-10-09 13:14:55

相關問題