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/