как избежать выхода пользователей из системы при переходе с iOS Facebook 2.x -> 3.x

Обновление нашей интеграции с Facebook iOS с SDK 2.x до SDK 3.x автоматически отключает пользователей, которые ранее вошли в систему, поскольку учетные данные для аутентификации, которые раньше приходилось обрабатывать вручную, теперь обрабатываются за кулисами новым SDK.

Есть ли способ заставить SDK 3.x выполнять аутентификацию с использованием токена доступа и даты истечения срока действия, которые мы ранее сохраняли вручную, в качестве однократной миграции аутентификации?

Заранее спасибо!


person Ed Koster    schedule 06.11.2012    source источник


Ответы (2)


Наконец-то разобрался. Решение включает использование предоставляемого ими объекта FBSessionTokenCachingStrategy, в частности FBSessionManualTokenCachingStrategy:

if (isUserUpgrading) {
   FBSessionTokenCachingStrategy *strategy = [[[FBSessionManualTokenCachingStrategy alloc] initWithUserDefaultTokenInformationKeyName:nil] autorelease];
   strategy.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"FBSessionToken"];         // use your own UserDefaults key
   strategy.expirationDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"FBSessionExpiration"]; // use your own UserDefaults key
   FBSession *session = [[[FBSession alloc] initWithAppID:@"MY_APP_ID"                                    // use your own appId
                                              permissions:nil
                                          urlSchemeSuffix:nil
                                       tokenCacheStrategy:strategy] autorelease];
   [FBSession setActiveSession:session];
} else {
   [FBSession openActiveSessionWithReadPermissions:...];  // normal authentication
}
person Ed Koster    schedule 15.11.2012

Для Facebook SDK 3.1.1 мне пришлось создать новый класс FBSessionManualTokenCachingStrategy, который является подклассом FBSessionTokenCachingStrategy и определяет метод fetchTokenInformation как

   - (NSDictionary*)fetchTokenInformation; {
     return [NSDictionary dictionaryWithObjectsAndKeys:
        self.accessToken, FBTokenInformationTokenKey,
        self.expirationDate, FBTokenInformationExpirationDateKey,
        nil];
   }
person Dare2Dream    schedule 19.12.2012