it-swarm.com.ru

Код ошибки входа в FBSDK: 308 в Objective-C

Я продолжаю получать 

"Ошибка домена = com.facebook.sdk.login Code = 308" Операция не может быть завершен. (com.facebook.sdk.login ошибка 308.) ""

при попытке войти через Facebook с моего устройства.

Мой код работает на симуляторе, но не на реальном устройстве. Кто-нибудь сталкивался с этим кодом ошибки раньше? Я буду более чем рад поделиться кодом по запросу.

57
Jude Michael Murphy

Одно из решений, по крайней мере для меня, состоит в том, чтобы не запускаться на устройстве через отладчик Xcode. Если я запускаю приложение на устройстве вне отладчика, логин Facebook работает нормально. Если я запускаю приложение в симе через отладчик, логин на Facebook работает нормально.

Только если я запускаю приложение на устройстве через отладчик Xcode, я каждый раз получаю ошибку 308 com.facebook.sdk.login.

44
user3633673

Решение ниже работает для iOS9 +, работающей на Xcode 8, для Swift3.0

Шаги

  1. Настройка запуска Facebook

FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

  1. Настройка Open URL

    guard let source = options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String else { return false } let annotation = options[UIApplicationOpenURLOptionsAnnotationKey] as? String return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: source, annotation: annotation)

  2. Исправьте проблему с разрешением Keychain, как показано на рисунке ниже

 iOS 9 Keychain fix

49
Suraj Pathak

Вы должны включить Обмен ключами на вкладке Возможности .

42
Di B.

У меня была точно такая же проблема, и я смог найти решение, изменив Info.plist

Я добавил все возможные схемы в LSApplicationQueriesSchemes

Полный список выглядит так:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbauth</string>
    <string>fbauth2</string>
    <string>fb</string>
    <string>fb-messenger-api20140430</string>
    <string>fb-messenger-platform-20150128</string>
    <string>fb-messenger-platform-20150218</string>
    <string>fb-messenger-platform-20150305</string>
    <string>fb-messenger-api</string>
    <string>fbshareextension</string>
</array>
26
Stas Zhukovskiy

Я получаю то же самое FB SDK 4.6.0 Xcode 7.0 iOS9. Все настройки и инструкции на сайте разработчиков Facebook были выполнены до письма .. Ни одно из перечисленных выше решений не помогло мне. Я обнаружил, что поведение хуже, когда вы развертываете на устройство вживую и возвращаетесь к консоли XCode во время процедуры входа в систему. Это действительно удача, если вы действительно входите в систему или нет. Кажется ведет себя более предсказуемо, когда вы просто повторно запускаете свое приложение холодным после развертывания. Да, это действительно так!

Когда он решает не войти в систему, это приводит к следующей ошибке:

Error Domain=com.facebook.sdk.login Code=308 "(null)"
14
Geoff H

Мое решение на Xcode7.1, Swift2.0

Шаг 1. Очистите папку сборки: option + command + K

или: Выберите Product> Clean

 enter image description here

Шаг 2. Очистите полученные данные: выберите Window> Projects:  enter image description here

и затем выберите Delete:  enter image description here

5
Tai Le

У меня была та же проблема, и я исправил ее, обновив учетные данные системы 

[FBSDKLoginManager renewSystemCredentials:^(ACAccountCredentialRenewResult result, NSError *error) {

    [[[YourAuthManager manager] facebookLoginManager] logInWithReadPermissions:@[@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {

        if (error) {
            // Handle error
        } else if (result.isCancelled) {
            // Handle cancellations
        } else {
            // If you ask for multiple permissions at once, you
            // should check if specific permissions missing
            if ([result.grantedPermissions containsObject:@"email"]) {
                // Do work
            }
        }
    }];
}];

Это решение менее радикально, чем переустановка, и вы уверены, что вашим пользователям не придется это делать. Я предполагаю, что у FBSDK 4.6 есть некоторые конфликты с учетными данными аутентификации FB системы iOS 9. 

Отредактировано: после некоторого времени тестирования это продолжалось, не так часто, как раньше, но это все еще оставалось проблемой, поэтому мы понизили версию FB SDK до предыдущей. Надеюсь, кто-то найдет лучшее решение.

4
edsancha

Немного покопался в коде FBs и похоже, что это просто проблема с правами.

FB использует связку ключей для хранения запроса авторизации во время входа в систему. При возврате он пытается получить значение из цепочки для ключей и не удается. См. этот SO ответ для получения дополнительной информации.

Права доступа могут меняться в зависимости от профилей обеспечения, и, как мы все знаем, поддержание наших профилей и конфигураций сборки и устройств/симов прямо, как выпас кошек. Это может объяснить, почему люди испытывают такое противоречивое поведение.

Поэтому можно с уверенностью предположить, что в производственной среде все будет работать нормально, и если во время тестирования что-то не работает, вам нужно дважды проверить права в своих профилях обеспечения.

4
kball

В моем случае это было исправлено путем обновления до последней версии FB SDK. 4.10 на данный момент.

1
AlexeyVMP

Обновление до последней версии (4.11) FB SDK исправило это и для меня. Не забудьте очистить свой проект после обновления, чтобы увидеть, работает ли он для вас!

0
SlickDev

Я получал ту же ошибку на xcode 7.1 ios 9.1 FB SDK 4.7.1. ,.

Деинсталляция, установка и тестирование без xcode отлично работает в первый раз. Это позволит вам снова подключить устройство и запустить его хотя бы пару раз (кажется, что оно немного несовместимо ...)

0
jonypz

Если вы используете FBSDK 4.38, в FBSDKLoginManager.m есть ошибка с разбором challengeExpected.

Я нашел исправление для rinat-enikeev для него:

https://github.com/facebook/facebook-sdk-Swift/issues/286

https://github.com/facebook/facebook-objc-sdk/pull/922/commits/bcf7f787e92320a6322fb3f6130fdc3815bbafb7

Просто поменяй

NSString *challengeExpected = [self loadExpectedChallenge];

в

NSString *challengeExpected = [[self loadExpectedChallenge] stringByReplacingOccurrencesOfString:@"+" withString:@" "];

Это решило проблему для меня.

0
user3674055

Чтобы решить эту проблему, вам нужно просто включить «Обмен ключами» в возможностях.

0
Bhavesh Patel

Я смог снова войти в систему на iOS9 с SDK 4.6.0, добавив новый ключ/значение plist

<key>FacebookDisplayName</key>
<string>{Your App Name}</string>

Исходный код .

Я также предпринял шаги в некоторых других ответах здесь для реализации общего экземпляра FBSDKLoginManager ().

0
swift taylor

Я исправил проблему, удалив приложение и переустановив его, и он сразу заработал.

Ошибка, вероятно, связана с iOS 9. Начиная с iOS 9, я думаю, что SDK использует SafariViewController, и кажется, что он создает проблемы, когда вы уже вошли в систему.

0
Gabriel Cartier

Та же проблема, FB SDK 4.5.1, и ни одно из вышеперечисленных решений не сработало для меня . Я решил эту проблему, добавив инфраструктуру Bolts в проект путем перетаскивания (из каталога FacebookSDK)
и затем добавление структуры болтов в appDelegate

    #import <bolts/bolts.h>
0
Kong Hantrakool

В методе FBSDKDelegate loginButtonWillLogin поместите это

- (BOOL) loginButtonWillLogin:(FBSDKLoginButton *)loginButton{
[FBSDKAccessToken setCurrentAccessToken:nil];
return YES;}
0
manu_inup

Я последовал Сурадж Патхак с Xcode 9.4.1 и Swift 4.2

  1. Добавить в AppDelegate didFinishLaunchingWithOptions

    SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
    
  2. Добавить в AppDelegate делегатскую функцию

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return SDKApplicationDelegate.shared.application(app, open: url, options: options)
    }
    
  3. Разрешить брелок в возможностях.

0
user3736373