Yahoo аутентификация и получение сведений о профиле iOS
я перечислил здесь шаги интеграции Yahoo которому я следовал.
- Шаг 1. Я пошел к http://developer.yahoo.com/social/sdk/objectivec/
- Шаг 2. Скачал весь фреймворк отсюда -http://github.com/yahoo/yos-social-objc
- Шаг 3. Я перетащил эту структуру в свой проект.
- Шаг 4. Включен флаг
fno-objc-arc
для Yahoo framework файлы. - Шаг 5. Я сделал
#import "YOSSocial.h"
в заголовочном файле моего viewController. - Шаг 6. Ввиду сделал загрузку, я разместил кодовый блок 1 для создания объекта сеанса.
- Шаг 7. При нажатии кнопки я вызываю,кодовый блок 2.
- Шаг 8. В Файле AppDelegate.м, я реализовал метод, как кодовый блок 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's 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 + framework обрабатывает перенаправление и управляет локальным сеансом. В случае Yahoo я не нахожу никаких деталей, которые полезны для обновления локальной сессии мобильного телефона приложение.
Edit:
Если это невозможно через Yahoo OAuth,как можно получить основные сведения о профиле (например, пол, дата рождения, идентификатор электронной почты,имя и т. д.) от Yahoo?
4 ответов
вот решение.
примечание: для этого вам понадобится промежуточный сервер.
- шаг 01. скачать PHP Yahoo framework http://github.com/yahoo/yos-social-php
- шаг 02. запустите сервер WAMP/XAMPP.
-
шаг 03. получить URL-адрес
- пример
http://10.0.0.76/iOS/yos-social-php-master/sample/sampleapp.php
- пример
- шаг 04. вернуться назад в проект XCode.
- шаг 05. откройте XIB, поместите кнопку для Yahoo и подключите метод IBAction.
- шаг 06. в методе IBAction перейдите к полученному URL-адресу из приложения iOS в URL-адрес. См.Кодовый Блок 1
- шаг 07. добавить метод в AppDelegate.m для обработки перенаправления с сервера на мобильное приложение. См.Кодовый Блок 2
-
шаг 08. убедитесь, что ваше приложение способно обрабатывать перенаправление. Откройте свой проект-info.plist как исходный код и убедитесь, что у вас есть valid
URL types
,URL identifier
&URL Schemes
. как указано в Кодовый Блок 3 - шаг 09. теперь ваше мобильное приложение готово для перенаправления с сервера.
- Шаг 10. открыть . (https://github.com/yahoo/yos-social-php/blob/master/sample/sampleapp.php)
- шаг 11. код комментария от 97 до 106.
- Шаг 12. поставить код как указано в Кодовый Блок 4
- Шаг 13. Запустите свой проект, Нажмите кнопку из приложения iOS.
- Шаг 14. приложение перейти на ваш сайт-страницы. Страница сайта будет выполнять аутентификацию и получать сведения о профиле.
- Шаг 15. как только аутентификация будет выполнена, site-page перенаправит обратно на ваше мобильное приложение с детали, такие как - Пол, полное имя, дата рождения, код GUID, фотографии URL-адрес и т. д.
резюме
мобильное приложение переходит на сервер - > сервер управляет аутентификацией через OAuth-php. После проверки подлинности сервер получает сведения о профиле и сервер указывает safari для перехода обратно в мобильное приложение. Your-mobile-app получает все подробности в блоке кода
Код Блока 1
- (IBAction)connectYahoo:(id)sender {
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:
@"http://yourLocalServer/iOS/yos-social-php-master/sample/sampleapp.php"
]];
}
Кодовый Блок 2
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if([[url scheme] isEqualToString:@"com.yourcompany.app.fsq"]) {
return [self.obj_LoginHomeVCtr.foursquare handleOpenURL:url];
} else if([[url scheme] isEqualToString:@"com.yourcompany.app.googleplus"]){
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}else if([[url scheme] isEqualToString:@"fb188315544652080"]){
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
fallbackHandler:^(FBAppCall *call) {
NSLog(@"In fallback handler");
}];
} else if ([[url scheme] isEqualToString:@"com.yourcompany.app.yahoo"]){
STLog(@"URL is %@",url);
return YES;
}
return YES;
}
кодовый блок 3
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.yourcompany.app.yahoo</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.yourcompany.app.yahoo</string>
</array>
</dict>
</array>
кодовый блок 4
else if($hasSession && $profile) {
$string = "com.yourcompany.app.yahoo://response?birthdate=" . $profile->birthdate . "&familyName=" . $profile->familyName. " " . $profile->givenName . "&gender=" . $profile->gender . "&guid=" . $profile->guid . "&image=" . $profile->image->imageUrl;
echo '<meta http-equiv="Refresh" content="1;URL='. $string .'">';
}
?>
fetchProfileWithDelegate:
(источник) создает URL-адрес и устанавливает некоторую информацию заголовка, а затем передает эти данные в [YOSRequestClient -sendAsyncRequestWithDelegate:]
(источник).
затем клиент запроса создает NSMutableURLRequest
и NSURLConnection
и начинается соединение.
после загрузки данных (если таковые имеются) YOSResponseData
берет на себя и создает новый объект из загруженных данных (здесь исходный код).
нет пути кода, который я могу видеть, что позволит serviceResponseData
объект принят в nil
. Вы должны, по крайней мере, быть в состоянии видеть [data didSucceed]
, который скажет вам, был ли ответ HTTP < 400
. Как ни странно, если сервер просто открывает и закрывает соединение без ответа HTTP, я считаю [data didSucceed] == YES
хотя это, очевидно, не удалось (начиная с 0
не похоже, что ты делаешь что-то не так. Я предполагаю, что с последний коммит был 4 года назад, и компания прошла через значительные перестройка с тех пор проект был заброшен и никто не мешал делать это.
обновление: в дополнение к отсутствию обновлений в течение 4 лет, Yahoo форум разработчиков для этого программного обеспечения был закрыт. Я не думаю, что API Yahoo для этого программного обеспечения работает больше. –
из документов Yahoo, которые вы связали здесь, несколько вещей, чтобы проверить:
убедитесь, что вы запрашиваете и получаете разрешение на правильные разрешения от пользователя
проверить
теперь вы можете использовать обновленный Yahoo iOS SDK, не проходя через так много шагов:https://github.com/yahoo/yos-social-objc