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"];
    }
}

Так что мой вопрос на самом деле разделен на три части:

  1. Возможно ли, чтобы то же самое произошло с uid ключ, и если так, какие возможные ключи существуют?

  2. Есть ли другие ключи, чтобы получить полное имя?

  3. Происходит ли то же самое в Твиттере или всегда используются одни и те же ключи?

Спасибо вам всем.

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);
        }
    }
}];
Другие вопросы по тегам