Перенос учетных данных аутентификации Facebook для iOS SDK

Есть ли у кого-нибудь какие-либо советы по переходу со старого iOS FB SDK (тот, который размещен в их учетной записи GitHub) на их .framework (установщик на основе пакетов)? У меня возникают проблемы с получением существующих объектов токена аутентификации и даты истечения срока действия для проверки на соответствие новому объекту FBSession.

Вот ситуация:

В старом SDK/технике Facebook iOS SDK требовал, чтобы вы сохраняли такие вещи, как auth. токен и дату истечения срока действия вручную с помощью собственных механизмов хранения. В новом SDK на основе фреймворка теперь они обрабатывают это за вас, но для переноса пользователей (т. е. без повторного входа в систему) мне нужно предоставить эту информацию новому SDK.

Получается, что Facebook хранит K-V в NSUserDefaults, и они даже сообщают вам имя корневого ключа, а также все ключи для вложенных K-V словаря, который они используют для хранения этой информации.

Их класс токенов FBSessionTokenCachingStrategy даже имеет метод класса, чтобы проверить, подтверждает ли NSDictionary правильный словарь, который устанавливает пригодную для использования сессию Facebook.

+ (BOOL)isValidTokenInformation:(NSDictionary*)tokenInformation;

Итак, я взял свой ранее существовавший auth. токен и срок действия, поместите их в новый словарь, сохраните его в правильном месте с ключом и синхронизируйте NSUserDefaults.

Пока все хорошо, верно? Хорошо, когда я инициализирую объект FBSession через

- (id)initWithAppID:(NSString*)appID permissions:(NSArray*)permissions urlSchemeSuffix:(NSString*)urlSchemeSuffix tokenCacheStrategy:(FBSessionTokenCachingStrategy*)tokenCachingStrategy;

Весь ключ удаляется из NSUserDefaults, а свойство state объекта сеанса находится в состоянии FBSessionStateCreated (т. е. без существовавшего ранее состояния) по сравнению с тем, что должно быть FBSessionStateCreatedTokenLoaded (т. е. оно знает, что имеет локально сохраненные свойства и готово к онлайн-проверке).

Почему его удаляют? Это проверено на соответствие методу класса.

Спасибо


person Joey    schedule 31.10.2012    source источник


Ответы (1)


Оказывается, объект локального хранилища для нового Facebook SDK также сохраняет список разрешений, связанных с токеном. Раньше это не требовалось, поэтому, хотя я не сохранил его локально, мой список разрешений не изменился. Итак, что я сделал, так это сохранил список разрешений в новый объект хранилища (всего 3 ключа: токен авторизации, дата истечения срока действия и список разрешений).

Как только я это сделал, создание/инициализация объекта FBSession не удаляло мой локально сохраненный объект, а при вызове openWithCompletionHandler: он устанавливал ожидаемое состояние сеанса в FBSessionStateOpen.

person Joey    schedule 01.11.2012