Native iOS Facebook SSO не вернется в приложение

Хорошо, это может показаться дубликат, но я прошел через все вопросы, которые стоят вокруг проблемы, и я все еще не могу заставить это работать для моего приложения.

Я следил за учебником iOS на сайте разработчиков Facebook, и я сделал следующее:

  1. Создал приложение Facebook, чтобы получить идентификатор приложения Facebook.
  2. Я присвоил этот идентификатор приложения константе, и я использую ее для инициализации объекта Facebook в своем приложении.
  3. Я удостоверился, что мое приложение помечено для многозадачности
  4. Я установил fbAPP_ID в plist под выпадающими URL-адресами
  5. Я сделал свой AppDelegate FBSessionDelegate и реализовал очень простые методы делегирования fbDidLogin и fbDidNotLogin.

Версии: XCode 4.3.2 на Lion, iOS 5.1, Facebook iOS 4.1.1

Все это и я до сих пор не могу заставить Facebook возвращать управление обратно в мое приложение, когда оно разрешает. Вместо этого он остается в Facebook.

Код: (Примечание FB_APP_ID изменено на базовое число для просмотра здесь)

AppDelegate.h:

#import <UIKit/UIKit.h> #import "FBConnect.h" #define FB_APP_ID @"1234567890" @interface AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate> @property (strong, nonatomic) UIWindow *window; @property (nonatomic, strong) Facebook* facebook; @end 

AppDelegate.m:

 #import "AppDelegate.h" @implementation AppDelegate @synthesize window = _window; @synthesize facebook = _facebook; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _facebook = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self]; if (![_facebook isSessionValid]) { [_facebook authorize:nil]; } } - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url { return [_facebook handleOpenURL:url]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [_facebook handleOpenURL:url]; } - (void)fbDidLogin { NSLog(@"App logged in"); } - (void)fbDidNotLogin:(BOOL)cancelled { NSLog(@"App did not login"); } @end 

Соответствующий порт Info.plist:

введите описание изображения здесь

Экран приложения Facebook (в основном выцветший):

Экран приложения Facebook

Примечание. Я попробовал это только с базовыми настройками, а также с настройками собственного приложения iOS с поддельным идентификатором магазина iTunes, но с тем же идентификатором пакета из моего профиля подготовки.

Независимо от того, что я делаю, он всегда загружает Facebook и просит авторизовать мое приложение, а затем просто закрывает окно экрана auth и сидит там на моем экране Facebook, а не возвращается в мое приложение.

Также обратите внимание: я знаю, что он всегда будет спрашивать, потому что я не проверяю токен аутентификации и дату истечения срока действия ….. это следующий шаг … на данный момент я хочу, по крайней мере, вернуть его в свое приложение раньше Я беспокоюсь об этом.

Я что-то пропустил? Что-нибудь еще я могу попытаться заставить Facebook вернуться в мое приложение?

EDIT: Также при отладке я не могу найти ни одного места, где по какой-либо причине вызывается либо openURL.

EDIT # 2: при запуске на симуляторе загружает диалог FB через Safari (как и ожидалось), а затем, когда я авторизуюсь, сафари выдает ошибку, как если бы URL-адрес, который они пытаются использовать для возврата в мое приложение, недействителен :

Ошибка сафари в симуляторе

Насколько мне известно, в Info.plist это все еще не говорит, потому что мой fb1234567890 настроен правильно.

4 Solutions collect form web for “Native iOS Facebook SSO не вернется в приложение”

Кажется, что ваш info.plist неверно отформатирован

Убедитесь, что схема URL-адреса вложен в элемент (точнее, массив), называемый «Схемы URL-адресов»,

Этот массив должен содержать все возможные схемы URL-адресов, которые могут запускать ваше приложение.

См. Прикрепленное изображение для лучшего объяснения схем URL

URL-схема http://f.cl.ly/items/243G1D0H39151q472V1t/Screen%20Shot%202012-05-16%20at%206.52.06%20PM.png

Кроме того, «идентификатор URL» должен быть вашим идентификатором пакета: ex. com.mycompany.myapp Это должно соответствовать идентификатору, который вы указываете в профилях подготовки

надеюсь это поможет!

Все, что вам нужно сделать, это

ШАГ 1:

Материал разработчика в Facebook:

Если ваше приложение уже отправлено, заполните iphone / ipad appstore id, иначе оставьте его пустым. Настройки идентификатора аккаунта facebook разработчика

ШАГ 2:

Далее в вашем XCode:

Goto Target > Info > URL Types > щелкните значок плюс и добавьте элементы, подобные этому, Настройки схемы URL

В моем приложении были оба варианта входа в систему через facebook и google, поэтому я создал два типа URL. Вы можете видеть, что вторая – это настройки типа URL-адреса Facebook. URL-схема будет вашим идентификатором приложения facebook с учетной записи разработчика facebook с fb при запуске. Поэтому, если ваш идентификатор приложения для вашего facebook равен 9876543267575645 тогда URL-схема станет fb9876543267575645 .

ШАГ 3:

Затем вам нужно добавить новый ключ в info.plist. Так что оставайтесь на одном экране и добавляйте FacebookAppID как этот экран: Настройки info.plist

Все это приведет ваше приложение обратно после успешной фейсбуки oauth.

ШАГ 4:

Отдохните в своем классе AppDelegate . Просто добавьте этот метод в AppDelegate.m

 NSString *retURL = [NSString stringWithFormat:@"%@", url]; if ([retURL rangeOfString:facebookid].location != NSNotFound) { // if your application is coming back from facebook native app. return [_facebook handleOpenURL:url]; } else { // if your app is coming back from google plus oauth. return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; } 

во время всего этого, должен инсталлировать и синтезировать экземпляр facebook в AppDelegate.m

 @synthesize facebook = _facebook; 

и didFinishLaunchingWithOptions

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _facebook = [[Facebook alloc] initWithAppId:facebookid]; // rest of your code is already here...... } 

Еще одна важная вещь. Во время выполнения этих шагов я также делал слишком много исследований для достижения этой цели, и, наконец, рабочий материал здесь. Я сделал эти настройки в двух моих приложениях.

Но пока я создавал третье приложение, я начинал с самого начала и не следил за STEP 1 и STEP 3 и voila …. перенаправление работает! Таким образом, я не думаю, что учетная запись для разработчиков facebook. Настройки Native iOS App необходимы, когда вы создаете Facebook в своем приложении.

Я столкнулся с другой проблемой. Я отредактировал необработанный файл Info.plist и добавил:

 <key>URL Types</key> <array> <dict> <key>URL Schemes</key> <array> <string>fbxxxxxxxxx</string> </array> </dict> </array> 

Это не сработало, потому что ключи не являются «URL-адресами», «URL-схемами» и «Идентификатор URL», вместо этого это «CFBundleURLTypes», «CFBundleURLSchemes» и «CFBundleURLIdentifier». Xcode переименует это в редакторе в «Типы URL», «Схемы URL» и «Идентификатор URL».

Чтобы правильно выбрать Info.plist в xcode, щелкните правой кнопкой мыши-> показать необработанные ключи / значения.

введите описание изображения здесь

Ни один из вышеперечисленных, или другие ответы на SO, не работал для меня, хотя у меня, похоже, была такая же проблема.

Однако, когда я включил «Deep Linking», он работал отлично, поэтому, возможно, это была комбинация всех вышеперечисленных И, дающих возможность этой опции.

  • Схема iOS отсутствует, когда я ввожу свой проект (XCode 4.2)
  • Как проверить, существует ли изображение в Xcode Asset Catalog?
  • Как проверить, существует ли BOOL в пользовательских настройках NSUserDefaults?
  • Создание неподписанного приложения IOS для IPA
  • Приложение вылетает только в xcode-инструментах
  • Как создать представление, подобное карте, с пользовательским изображением карты?
  • Ошибка после обновления до xcode 4.6 и iOS 6.1 "используется как имя предыдущего параметра, а не как часть селектора"
  • Странное поведение автозапуска при просмотре коллекций
  • Симулятор браузера iPhone / iPad?
  • Как передать функцию обратного вызова в sqlite3_exec на iOS 5.1?
  • Кто-нибудь видел, предупреждение: target указывает SWIFT_VERSION = '2.3'
  • Ограничение на размер каталога документов iOS
  • Interesting Posts

    Маленькая высота панели вкладок с раздвижной панелью под флип-бортом в SWIFT или OBJECTIVE-C

    Ошибки NSUserDefaults в журналах

    цвет текста отключенного uibarbuttonitem – это всегда цвет нормального состояния

    Неточность символов с помощью SLComposeViewController (twitter) и TWTweetComposeViewController

    Как дать cornerRadius для UIBezierPath

    Swift – использование многопоточности из функции в отдельном файле

    Как установить «верхний» цвет границы на сгруппированные UITableViewCells?

    Должен ли я определять первичный ключ для каждого объекта в Realm?

    Получить функцию экземпляра из файла заголовка

    AIR / as3 ключевое слово для ввода ключевого слова верхнего уровня

    UIRefreshControl застрял после переключения вкладок в UITabBarController с UIViewControler и UITableView

    Как достичь настройки Equilizer для iPhone в аудиоплеере

    Не удалось найти сопоставление объектов для keyPath: ''

    Компонент с двойным диапазоном и подвижным слайдером в iOS

    Неосязаемый порядок выполнения (dispatch_semaphore_t, dispatch_group_async) и использование их в сочетании с различными типами очереди отправки

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.