iOS: полное имя пользователя для ACAccountTypeIdentifierFacebook
Я использую интеграцию iOS с Facebook, чтобы позволить пользователю войти в систему под своей учетной записью Facebook.
Я столкнулся с проблемой получения полного имени пользователя.
Я создаю ACAccount
типа ACAccountTypeIdentifierFacebook
,
После некоторых поисков я нашел этот небольшой фрагмент, чтобы получить полное имя:
// account is an ACAccount instance
NSDictionary *properties = [account valueForKey:@"properties"];
NSString *fullName = properties[@"fullname"];
Я проверил это, и это сработало. Работало на нескольких устройствах.
Затем мы отправили его нашему клиенту, он установил его, и он не работал.
После нескольких дней тестирования я смог получить сообщение об ошибке на iPhone от коллеги.
После сеанса быстрой отладки я обнаружил, что fullname
Ключа не было. Вместо этого было два других ключа, ACPropertyFullName
а также ACUIAccountSimpleDisplayName
,
Теперь мой код для получения полного имени:
NSDictionary *properties = [account valueForKey:@"properties"];
NSString *nameOfUser = properties[@"fullname"];
if (!nameOfUser) {
nameOfUser = properties[@"ACUIAccountSimpleDisplayName"];
if (!nameOfUser) {
nameOfUser = properties[@"ACPropertyFullName"];
}
}
Так что мой вопрос на самом деле разделен на три части:
Возможно ли, чтобы то же самое произошло с
uid
ключ, и если так, какие возможные ключи существуют?Есть ли другие ключи, чтобы получить полное имя?
Происходит ли то же самое в Твиттере или всегда используются одни и те же ключи?
Спасибо вам всем.
1 ответ
Что вы там делаете с valueForKey:@"properties"
call получает доступ к частной собственности, и Apple отклонит ваше приложение.
Если ваш проект является проектом iOS 7, вы можете использовать новое свойство в ACAccount
класс называется userFullName
, От ACAccount.h
:
// For accounts that support it (currently only Facebook accounts), you can get the user's full name for display
// purposes without having to talk to the network.
@property (readonly, NS_NONATOMIC_IOSONLY) NSString *userFullName NS_AVAILABLE_IOS(7_0);
Кроме того, вы можете использовать Graph API для запроса текущего пользователя с помощью социальной среды:
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodGET
URL:[NSURL URLWithString:@"https://graph.facebook.com/me"]
parameters:nil];
request.account = account; // This is the account from your code
[request performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil && ((NSHTTPURLResponse *)response).statusCode == 200) {
NSError *deserializationError;
NSDictionary *userData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&deserializationError];
if (userData != nil && deserializationError == nil) {
NSString *fullName = userData[@"name"];
NSLog(@"%@", fullName);
}
}
}];