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», он работал отлично, поэтому, возможно, это была комбинация всех вышеперечисленных И, дающих возможность этой опции.

  • Мое приложение падает при работе на моем iPhone, но не в симуляторе. Какие методы отладки я могу использовать для решения проблемы?
  • Как отлаживать «сообщение, отправленное на освобожденный экземпляр» в Xcode4?
  • Странное предупреждение LLVM: нет предыдущего прототипа для функции для
  • Категория Конфликт: метод экземпляра в категории из конфликтов с тем же методом из другой категории
  • Удаление фиксированной ширины текста из RTF-файла, загруженного в UITextView
  • Xcode Warning: «нет правила для обработки файла» и «Directory not found»
  • приложение для создания / архивирования xcode для всех, кто будет работать в симуляторе
  • Приложение не распознается Game Center после сборки с Xcode 6.0.1
  • Импорт сертификата клиента в брелок для iPhone
  • Существует ли переменная окружения для целевого имени родительского приложения Extension
  • Как я могу добавить одно и то же фоновое изображение ко всем представлениям в моем приложении ios с помощью swift?
  • Interesting Posts

    Изменение параметра playerItem AVPlayer в UITableView

    Предупреждение о блокировке элемента под управлением версии (Xcode 4)

    встроить навигационный контроллер

    Иерархия вложенных представлений iOS для поддержки функции перетаскивания, позволяющая конечным пользователям настраивать формы

    просмотр анимации не работает для shadowRadius iOS

    Добавляя рамки приложения и расширения приложения в проект приложения IOS, я делаю это правильно?

    Как определить, есть ли новая версия моего приложения для iOS?

    Alamofire 3.0 – EXC_BAD_ACCESS на iOS 9.1

    Анимация заполнения кругового индикатора выполнения с использованием маски изображения в iOS

    Поддерживает ли TWRequest iOS API аутентификацию только для приложений?

    iOS Google Родное объявление не доступно для кликов

    Что лучше для загрузки данных из API-viewDidLoad, viewWillAppear или viewDidAppear?

    Проверка контрольной суммы Сбой при отправке с помощью Xcode 5

    UTCextField автозавершение обратного вызова

    libc ++ abi.dylib: завершение с неперехваченным исключением типа NSException (lldb)

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