Я перечислил здесь шаги интеграции Yahoo, которые я выполнил.
- Шаг 1. Я пошел в http://developer.yahoo.com/social/sdk/objectivec/
- Шаг 2. Загрузите всю структуру отсюда - http://github.com/yahoo/yos-social-objc
- Шаг 3. Я перетащил эту фреймворк в свой проект.
- Шаг 4. Включен флаг
fno-objc-arc
для файлов фреймворка yahoo. - Шаг 5. Я сделал
#import "YOSSocial.h"
в моем файле заголовка controlController. - Шаг 6. В режиме загрузки я разместил Блок кода 1, чтобы создать объект сеанса.
- Шаг 7. Нажав кнопку, я вызываю Блок кода 2.
- Шаг 8. В AppDelegate.m я реализовал метод как Блок кода 3.
- Шаг 9. Я получаю
oauth_token
иoauth_verifier
в перенаправлении.
Блок кода 1
- (void)viewDidLoad {
[super viewDidLoad];
self.session = [YOSSession sessionWithConsumerKey:@"ConsumerKeyHere"
andConsumerSecret:@"ConsumerSecretKeyHere"
andApplicationId:@"AppKey"];
BOOL hasSession = [self.session resumeSession];
if(hasSession == FALSE) {
// custom call back URL which will redirect to our-app.
// 10.0.0.76/iOS/callback.php redirects
// to com.mymobileapps.currentApp.yahoo
[self.session
sendUserToAuthorizationWithCallbackUrl:
@"http://10.0.0.76/iOS/callback.php"];
} else {
[self sendRequests];
}
}
Блок кода 2
- (void)sendRequests {
// initialize a user request for the logged-in user
YOSUserRequest *request = [YOSUserRequest requestWithSession:self.session];
// fetch the user profile data
[request fetchProfileWithDelegate:self];
}
- (void)requestDidFinishLoading:(YOSResponseData *)data {
// parse the response text string into a dictionary
NSDictionary *rspData = [NSJSONSerialization JSONObjectWithData:[data.responseText dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSDictionary *profileData = [rspData objectForKey:@"profile"];
// format a string using the nickname object from the profile.
NSString *welcomeText = [NSString stringWithFormat:@"Hey %@ %@!",
[profileData objectForKey:@"givenName"],
[profileData objectForKey:@"familyName"]];
NSLog(@"welcometext is %@",welcomeText);
self.lblProfile.text = welcomeText;
}
Блок кода 3
- (BOOL)application: (UIApplication *)application
openURL: (NSURL *)url
sourceApplication: (NSString *)sourceApplication
annotation: (id)annotation {
NSString *str = [[url description] stringByReplacingOccurrencesOfString:@"com.mymobileapps.currentApp.yahoo://oauth-response?oauth_token=" withString:@""];
NSArray *ar = [str componentsSeparatedByString:@"&oauth_verifier="];
NSLog(@"oauth_token is %@",[ar objectAtIndex:0]);
NSLog(@"oauth_verifier is %@",[ar objectAtIndex:1]);
// How my session will get updated now with valid authentication done?
return YES;
}
Я следил за каждым шагом, как описано здесь, http://developer.yahoo.com/social/sdk/objectivec/, и я также реализовал перенаправление, как описано здесь - Как перенаправить из Yahoo в мое приложение IOS после аутентификации?
ВОПРОС выглядит следующим образом. Я все еще не могу получить данные профиля пользователя, такие как пол, дата рождения и т.д. То есть - из кода 2 я получаю данные как ноль.
Что отсутствует в моем коде для извлечения данных профиля пользователя?
Другие ссылки.
- (BOOL)application: (UIApplication *)application
openURL: (NSURL *)url
sourceApplication: (NSString *)sourceApplication
annotation: (id)annotation {
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
Над кодом показано, как структура Google+ обрабатывает перенаправление и управляет локальным сеансом. В случае с Yahoo я не могу найти подробностей, которые могут помочь обновить локальную сессию мобильного приложения.
Edit:
Если это невозможно через Yahoo OAuth, Как можно получить основные сведения о профиле (например, пол, дата рождения, идентификатор электронной почты, имя и т.д.) Из Yahoo?