Вход в TwitterKit всегда завершается неудачно с первой попытки, затем срабатывает вторая попытка (Swift, TwitterKit, Firebase)

Я использую TwitterKit и Firebase, чтобы пользователь мог войти в систему с помощью Twitter. Первый раз, когда я пытаюсь войти в Twitter, происходит сбой с ошибкой:

[TwitterCore] Невозможно проверить учетные данные сеанса. 2018-07-11 13: 57: 20.999365-0400 social_notes [6794: 1892888] [TwitterKit] обнаружил ошибку с сообщением «Не удалось сохранить сеанс»: Error Domain = NSURLErrorDomain Code = -1005 «Сетевое соединение было потеряно». UserInfo = {NSUnderlyingError = 0x1c044dcb0 {Error Domain = kCFErrorDomainCFNetwork Code = -1005 "(null)" UserInfo = {_ kCFStreamErrorCodeKey = 57, _kCFStreamErrorDomainKey = 1}}, NSElitterStreamErrorDomainKey = 1}}, NSElitterStreamErrorDomainKey = 1}}. 1.1 / account / verify_credentials.json "rel =" nofollow noreferrer "> https://api.twitter.com/1.1/account/verify_credentials.json, NSErrorFailingURLKey = https://api.twitter.com/1.1/account/verify_credentials.json, _kCFStreamErrorDomainKey = 1, _kCFStreamErrorCodeKey = 57, NSLocalizedDescription = Сетевое соединение было потеряно.} 2018-07-11 13: 57: 21.413753-0400 social_notes [6794: 1892888] [TwitterKit] обнаружил ошибку с сообщением «Ошибка получения токена аутентификации пользователя.»: Error Domain = TWTRLogInErrorDomain Code = - 1 «URL обратного вызова не утвержден для этого клиентского приложения. Разрешенные URL обратного вызова можно изменить в настройках вашего приложения» UserInfo = {NSLocalizedDescription = Callback U RL не утвержден для этого клиентского приложения. Утвержденные URL-адреса обратного вызова можно изменить в настройках приложения} Ошибка входа в Twitter: Ошибка запроса: запрещено (403)

Но если я просто попытаюсь войти в Twitter во второй раз, все заработает без проблем.

Info.plist

<dict>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>twitterkit-XXX</string>
            </array>
        </dict>
    </array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>twitter</string>
        <string>twitterauth</string>
    </array>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</dict>

Делегат приложения

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()

        window?.rootViewController = UINavigationController(rootViewController: ViewController())

        FirebaseApp.configure()

        Twitter.sharedInstance().start(withConsumerKey:"XXX", consumerSecret:"XXX")

        return true
    }

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return Twitter.sharedInstance().application(app, open: url, options: options)
    }

Код кнопки входа в Twitter

 let twitterLoginBtn = TWTRLogInButton { (session, err) in
            if let err = err {
                print("Twitter Login Error: \(String.init(describing: err.localizedDescription))")
                return
            }
            guard let token = session?.authToken else { return }
            guard let secret = session?.authTokenSecret else { return }
            let credential = TwitterAuthProvider.credential(withToken: token, secret: secret)

            Auth.auth().signIn(with: credential, completion: { (user, err) in

etc etc....

person Connor V    schedule 11.07.2018    source источник
comment
У меня такая же проблема! Вы что-нибудь нашли?   -  person BlackM    schedule 28.07.2018
comment
@BlackM Это потому, что пользователь не вышел из системы (не знаю, почему иногда это не работает). Так что я просто трижды выхожу из системы. У меня есть контроллер представления с кнопкой выхода, которая затем перенаправляет вас к другому контроллеру представления, а затем оттуда вы можете войти в систему с помощью Twitter. Поэтому я выхожу пользователя из Twitter, когда он нажимает кнопку выхода, когда он попадает в контроллер представления входа и когда он щелкает, чтобы войти в Twitter. Это подтверждает, что они наверняка вышли из системы (возможно, слишком много, но это работает)   -  person Connor V    schedule 31.07.2018


Ответы (1)


Это явно проблема TwitterKit. Вот как я это решил:

    let store = TWTRTwitter.sharedInstance().sessionStore
    store.reload()
    for case let session as TWTRSession in store.existingUserSessions() {
        store.logOutUserID(session.userID)
    }
person BlackM    schedule 13.10.2018
comment
Это даже не сработало для меня; пользователь все еще вошел в систему, если я запустил этот код. - person Sunil Chauhan; 05.04.2019