我想從Google plus api獲取用戶信息。我正在關注這個Link以G +集成。在這裏,我可以獲得除DOB以外的所有信息。但現在我必須得到用戶的出生日期。我無法從Google Plus API獲取出生日期
我檢查了這個Link和this 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();
}
}
是的..現在我得到了出生日期.. !!!!我使用這個網址'「https://www.googleapis.com/plus/v1/people/me?access_token=」+ thisApp.AccessToken;'.. – Vijay 2014-10-09 13:14:55