Facebook SDK 3.0 IOS 6 обратный вызов после не вызванного входа

Второе обновление После того, как вы сделали больше копания, кажется, что в игре больше проблемы.

Причина, по которой openURL не запускается, заключается в том, что приложение кажется замерзающим, когда оно возвращается на передний план.

Если я запустил приложение, нажмите кнопку "домой" (вернитесь на главный экран) и перезагрузите мое приложение (не полный перезапуск, а просто восстановление), приложение откроется, но все будет заморожено.

- (void) applicationWillEnterForeground: (приложение UIApplication *)

запускается, когда приложение возвращается, однако после этого ничего не происходит. Используя симулятор для IOS 6.0, я не получаю никакого сбоя, но приложение просто сидит там, ничего не делая. Щелчок на экране ничего не делает. Если я нажимаю на главный экран, я могу вернуться на главный экран.

Поэтому причина, по которой openIURL не запускается, заключается в том, что приложение зависает, когда оно возвращается из входа в Facebook либо из приложения Safari, либо из приложения Facebook. Это не имеет никакого отношения к SDK в facebook.

Почему это происходит?

Обновление Кажется, проблема связана с тем, что openURL не вызывается. Приложение открывается, когда пользовательский URL-адрес выполняется из сафари или приложения facebook. Если я создаю совершенно новое приложение, оно действительно работает.

Другой связанный выпуск приложение open Url метод не вызывается после того, как пользователь аутентифицирует facebook

У меня есть приложение, использующее логин facebook с фейсбук SDK 3.0.

В IOS 5 поток работает так, как предполагалось, и я вижу вывод IS LOGGED IN:

NSArray *permissions = [[NSArray alloc] initWithObjects: @"publish_stream",@"offline_access",@"email",nil];

[FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES
completionHandler:^(FBSession *session,
                    FBSessionState status,
                    NSError *error) {
    if(session.isOpen){
      NSLog(@"IS LOGGED IN");
    }                                  
}];

[permissions release];

В моем делегате App функция openURL выглядит следующим образом

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [[FBSession activeSession] handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [[FBSession activeSession] handleOpenURL:url];
}

Опять же, в IOS 5 функция openURL вызывается после успешного входа в систему через facebook.

В IOS 6, когда я выполняю openActiveSessionWithPermission (логин), openURL никогда не вызывается назад.

Я предоставил необходимую информацию в файле .plist в соответствии с документацией на facebook

FacebookAppID = (My Facebook App ID)

и

URL types 
 -> Item 0
    -> URL Schemes
      -> Item 0 = (My Facebook App ID)

Ответ 1

Проблема связана с тем, как я использовал TWTweetComposeViewController в своем приложении, поэтому он не связан с SDK в facebook.

Проблема заключалась в том, что я инициализировал мой TWTweetComposeViewController в своем ViewDidLoad и не использовал до тех пор, пока это не понадобится. Однако, если TWTweetComposeViewController не отображается, но инициализирован, он заморозит ваше приложение, когда оно выйдет из фонового режима.

Исправление состоит в том, чтобы инициализировать TWTweetComposeViewController только тогда, когда вы собираетесь его показать.

Ответ 2

Возможно, это связано с тем, что ваше приложение настроено не на фоновом режиме, как установлено в вашем приложении? У меня была такая же проблема. Похоже, что если приложение осталось в фоновом режиме, оно вернется и вызовет openURL. Но если приложение не работает в фоновом режиме, оно вернется и вызовет приложение: didFinishLaunchingWithOptions вместо этого, а НЕ вызовет openURL. Вы можете получить URL-адрес из параметров запуска:

NSURL *url = [launchOptions objectForKey: UIApplicationLaunchOptionsURLKey];

но я не понял, как назвать это так, чтобы он имел тот же эффект, что и приложение: openURL при возврате из проверки подлинности Facebook. Надеюсь, это поможет некоторым.

Ответ 3

это Shireesh из Facebook. Можете ли вы подать на наш сайт разработчиков ошибку на этом, чтобы мы могли подробно рассмотреть ее. Обязательно предоставьте подробные инструкции по воспроизведению и приложите скриншот, если это возможно. https://developers.facebook.com/bugs

Ответ 4

Я установил два суффикса в Facebook для своего приложения: бесплатно и заплатил, например, fbxxxxxxpaid

Они отлично работают под SDK 2.0, но в 3.2 мое приложение не было вызвано, и я застрял с пустым холстом с кнопкой отмены.

Я удалил суффикс из схем URL, и он мгновенно сработал.

Мне пришлось обновить мое приложение в соответствии с этим https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/