2015-07-21 4 views
0

Я уже успешно интегрировал Google+ в свое приложение для iOS. Но с последними обновлениями Apple Store приложение не разрешает открывать браузер, чтобы инициировать аутентификацию Google с помощью сафари, поэтому я попробовал uiwebview для проверки подлинности googleplus, и я получаю токен доступа, но я не могу получить имя пользователя и адрес электронной почты человек вошел in.Below я добавил свой источник,Интеграция GooglePlus в ios

NSString *client_id = @"***************************";; 
NSString *secret = @"*******************************"; 
NSString *callbakc = @"https://www.example.com/oauth2callback";; 
NSString *scope = @"https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile+https://www.google.com/reader/api/0/subscription"; 
NSString *visibleactions = @"http://schemas.google.com/AddActivity"; 

@interface MainViewController() 

@end 

@implementation MainViewController 
@synthesize webview,isLogin,isReader; 

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 


NSString *url = [NSString stringWithFormat:@"https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=%@&redirect_uri=%@&scope=%@&data-requestvisibleactions=%@",client_id,callbakc,scope,visibleactions]; 

[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]]; 
} 
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
// [indicator startAnimating]; 


NSLog(@"dgfduiussdiff %@ ",[[request URL] host]); 

if ([[[request URL] host] isEqualToString:@"www.example.com"]) { 

    // Extract oauth_verifier from URL query 
    NSString* verifier = nil; 
    NSArray* urlParams = [[[request URL] query] componentsSeparatedByString:@"&"]; 
    for (NSString* param in urlParams) { 
     NSArray* keyValue = [param componentsSeparatedByString:@"="]; 
     NSString* key = [keyValue objectAtIndex:0]; 
     if ([key isEqualToString:@"code"]) { 
      verifier = [keyValue objectAtIndex:1]; 
      NSLog(@"verifier %@",verifier); 
      break; 
     } 
    } 

    if (verifier) { 
     NSString *data = [NSString stringWithFormat:@"code=%@&client_id=%@&client_secret=%@&redirect_uri=%@&grant_type=authorization_code", verifier,client_id,secret,callbakc]; 
     NSString *url = [NSString stringWithFormat:@"https://accounts.google.com/o/oauth2/token"]; 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; 
     [request setHTTPMethod:@"POST"]; 
     [request setHTTPBody:[data dataUsingEncoding:NSUTF8StringEncoding]]; 
     NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
     receivedData = [[NSMutableData alloc] init]; 

    } else { 
     // ERROR! 
    } 

    [webView removeFromSuperview]; 

    return NO; 
} 
return YES; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

    { 
    NSError* error; 

[receivedData appendData:data]; 


NSDictionary* json = [NSJSONSerialization 
         JSONObjectWithData:receivedData 
         options:kNilOptions 
         error:&error]; 

NSLog(@"verifier %@",json); 



} 
      - (void)connection:(NSURLConnection *)connection didFailWithError:  (NSError *)error{ 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
               message:[NSString stringWithFormat:@"%@", error] 
               delegate:nil 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:nil]; 
    [alert show]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
NSString *response = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 
SBJsonParser *jResponse = [[SBJsonParser alloc]init]; 
NSDictionary *tokenData = [jResponse objectWithString:response]; 
// WebServiceSocket *dconnection = [[WebServiceSocket alloc] init]; 
// dconnection.delegate = self; 

NSString *pdata = [NSString stringWithFormat:@"type=3&token=%@&secret=123&login=%@", [tokenData objectForKey:@"refresh_token"], self.isLogin]; 
// NSString *pdata = [NSString stringWithFormat:@"type=3&token=%@&secret=123&login=%@",[tokenData accessToken.secret,self.isLogin]; 
// [dconnection fetch:1 withPostdata:pdata withGetData:@"" isSilent:NO]; 


UIAlertView *alertView = [[UIAlertView alloc] 
          initWithTitle:@"Google Access TOken" 
          message:pdata 
          delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
[alertView show]; 
} 

После выполнения вышеуказанного источника я получаю ниже ответ напечатанный в NSLog,

 verifier 4/kMcSZ2l-d_XXPo24NSdsMnugoP_MGDGPP4D5C1LRTfY 
     2015-07-21 18:04:16.103 TechnoGerms.com[8981:189233] verifier { 
    "access_token" =  "ya29.twG9kyMElyC8BgAxujF98WKN0BQ246Ey6zsKQEgSpKsNEb5JOS3QRl12La6XBy1geZnL"; 
"expires_in" = 3600; 
     "id_token" = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImRhNjYyNWIzNmJjMDlkMzAwMzUzYjI4YTc0MWNlMTc1MjVhNGMzM2IifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTE0MjE4NDEwODI0NzM1ODkyMDg0IiwiYXpwIjoiMTY5NzY2MjI4OTY4LWtoNzI1dTFpZWdzNHN1bnFhOThhcHUxMHU4djhhcmFmLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiZW1haWwiOiJhcmp1bkBsaW5rd2FyZS5pbiIsImF0X2hhc2giOiJQVnJxTURpNDViZnVGTm9kTmlsSFlRIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjE2OTc2NjIyODk2OC1raDcyNXUxaWVnczRzdW5xYTk4YXB1MTB1OHY4YXJhZi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImhkIjoibGlua3dhcmUuaW4iLCJpYXQiOjE0Mzc0ODIwNTUsImV4cCI6MTQzNzQ4NTY1NX0.uSMrV8rOz4T4i5MhiCeQueNVGLv4NBLP-gtOcyow8t4BY9qvUO78sG4y0jPhbclPdX1kUZjzMVTeah2nU9fTYyl50dlj5FzWNy7LyM-a1GC2jEwkgWMgHdRPh6l7dqMrjQ9sU1rF-ZaiWfG7C9VJTJ76uEWRiSKKA9EFQtBil3xBtmDH07UMRxkbri2jBwaCPAWgjU8-dTarrxNESrwrO_nptaRzfGeaTyQBIYCAk6_9deXmblPgteER1OHoa65xb1OVK3ZPeZ3_dj9gjlXSyGp2ho5WIFGf2xRvW4XoROpUYqhLvrS3s-YrrZ8J5X5-3mafrs1qDjJYJogctbW7dg"; 
    "token_type" = Bearer; 
    } 

Как я могу получить имя пользователя и адрес электронной почты личности вошла с помощью токена доступа, который я получил выше? Пожалуйста, дайте любые предложения, так как я не получаю никакого решения в Google.

Спасибо за вашу поддержку

ответ

0

, если вы хотите получать весь профиль Google + пользователя, вы можете использовать по следующей ссылке

https://www.googleapis.com/plus/v1/people/me/?access_token={YOUR_ACCESS_TOKEN} 

Тогда называют GET метода. Вам будет предоставлен массив, содержащий авторизованные данные профиля.

Другой способ заключается в том, что если вы хотите сохранить авторизованный адрес электронной почты пользователя, его уже присутствует в поле id_token. Это base64_encoded данные с некоторыми полями. Если вы декодировать идентификатор йо будет получить некоторую информацию о примере user.For в вашем результате вы нашли id_token в

eyJhbGciOiJSUzI1NiIsImtpZCI6ImRhNjYyNWIzNmJjMDlkMzAwMzUzYjI4YTc0MWNlMTc1MjVhNGMzM2IifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTE0MjE4NDEwODI0NzM1ODkyMDg0IiwiYXpwIjoiMTY5NzY2MjI4OTY4LWtoNzI1dTFpZWdzNHN1bnFhOThhcHUxMHU4djhhcmFmLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiZW1haWwiOiJhcmp1bkBsaW5rd2FyZS5pbiIsImF0X2hhc2giOiJQVnJxTURpNDViZnVGTm9kTmlsSFlRIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjE2OTc2NjIyODk2OC1raDcyNXUxaWVnczRzdW5xYTk4YXB1MTB1OHY4YXJhZi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImhkIjoibGlua3dhcmUuaW4iLCJpYXQiOjE0Mzc0ODIwNTUsImV4cCI6MTQzNzQ4NTY1NX0.uSMrV8rOz4T4i5MhiCeQueNVGLv4NBLP-gtOcyow8t4BY9qvUO78sG4y0jPhbclPdX1kUZjzMVTeah2nU9fTYyl50dlj5FzWNy7LyM-a1GC2jEwkgWMgHdRPh6l7dqMrjQ9sU1rF-ZaiWfG7C9VJTJ76uEWRiSKKA9EFQtBil3xBtmDH07UMRxkbri2jBwaCPAWgjU8-dTarrxNESrwrO_nptaRzfGeaTyQBIYCAk6_9deXmblPgteER1OHoa65xb1OVK3ZPeZ3_dj9gjlXSyGp2ho5WIFGf2xRvW4XoROpUYqhLvrS3s-YrrZ8J5X5-3mafrs1qDjJYJogctbW7dg 

выше id_token содержит 2 частей, разделенных «». Первая часть - ключ базы данных base64, а вторая часть - метаданные.

можно расшифровать как данные как

$key=base64_decode(eyJhbGciOiJSUzI1NiIsImtpZCI6ImRhNjYyNWIzNmJjMDlkMzAwMzUzYjI4YTc0MWNlMTc1MjVhNGMzM2IifQ) 

даст вам ключ

$data=base64_decode(eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTE0MjE4NDEwODI0NzM1ODkyMDg0IiwiYXpwIjoiMTY5NzY2MjI4OTY4LWtoNzI1dTFpZWdzNHN1bnFhOThhcHUxMHU4djhhcmFmLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiZW1haWwiOiJhcmp1bkBsaW5rd2FyZS5pbiIsImF0X2hhc2giOiJQVnJxTURpNDViZnVGTm9kTmlsSFlRIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjE2OTc2NjIyODk2OC1raDcyNXUxaWVnczRzdW5xYTk4YXB1MTB1OHY4YXJhZi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImhkIjoibGlua3dhcmUuaW4iLCJpYXQiOjE0Mzc0ODIwNTUsImV4cCI6MTQzNzQ4NTY1NX0.uSMrV8rOz4T4i5MhiCeQueNVGLv4NBLP-gtOcyow8t4BY9qvUO78sG4y0jPhbclPdX1kUZjzMVTeah2nU9fTYyl50dlj5FzWNy7LyM-a1GC2jEwkgWMgHdRPh6l7dqMrjQ9sU1rF-ZaiWfG7C9VJTJ76uEWRiSKKA9EFQtBil3xBtmDH07UMRxkbri2jBwaCPAWgjU8-dTarrxNESrwrO_nptaRzfGeaTyQBIYCAk6_9deXmblPgteER1OHoa65xb1OVK3ZPeZ3_dj9gjlXSyGp2ho5WIFGf2xRvW4XoROpUYqhLvrS3s-YrrZ8J5X5-3mafrs1qDjJYJogctbW7dg) 

даст вам метаданные.

при декодировании данных, это даст результат как

{"iss":"accounts.google.com","sub":"114218410824735892084","azp":"169766228968-kh725u1iegs4sunqa98apu10u8v8araf.apps.googleusercontent.com","email":"[email protected]","at_hash":"PVrqMDi45bfuFNodNilHYQ","email_verified":true,"aud":"169766228968-kh725u1iegs4sunqa98apu10u8v8araf.apps.googleusercontent.com","hd":"linkware.in","iat":1437482055,"exp":1437485655} 

Выше результат вы можете найти электронную почту поданную. Я надеюсь, что это поможет вам.

Смежные вопросы