首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TwitterKit登录总是首先失败,然后再尝试(Swift,TwitterKit,Firebase)

TwitterKit登录总是首先失败,然后再尝试(Swift,TwitterKit,Firebase)
EN

Stack Overflow用户
提问于 2018-07-11 18:45:30
回答 1查看 1.1K关注 0票数 5

我使用TwitterKit和Firebase来允许用户使用Twitter登录。当我第一次尝试使用Twitter登录时,它出现了错误:

TwitterCore无法验证会话凭据。2018-07-11 13:57:20.999365-0400 social_notes6794:1892888确实遇到了错误,消息是“未能保存会话”:error Domain=NSURLErrorDomain Code=-1005“网络连接丢失了”。UserInfo={NSUnderlyingError=0x1c044dcb0 {错误Domain=kCFErrorDomainCFNetwork代码=-1005 "(null)“UserInfo={_kCFStreamErrorCodeKey=57,_kCFStreamErrorDomainKey=1 }、NSErrorFailingURLStringKey=credentials.json、NSErrorFailingURLKey=credentials.json、_kCFStreamErrorDomainKey=1、_kCFStreamErrorCodeKey=57、NSLocalizedDescription=The网络连接丢失。} 2018-07-11 13:57:21.413753-0400 social_notes6794:1892888确实遇到了”错误获取用户令牌“消息。:error Domain=TWTRLogInErrorDomain Code=-1”未批准此客户端应用程序的回调URL。可在应用程序设置中调整已批准的回调URL“UserInfo={NSLocalizedDescription=Callback URL未批准此客户端应用程序。可在应用程序设置中调整已批准的回调URL} Twitter登录错误:请求失败:禁止(403)

但是如果我第二次尝试用Twitter登录,它就可以正常工作了。

Info.plist

代码语言:javascript
复制
<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>

应用程序代表

代码语言:javascript
复制
 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登录按钮代码

代码语言:javascript
复制
 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....
EN

回答 1

Stack Overflow用户

发布于 2018-10-13 17:25:15

这显然是一个TwitterKit问题。我就是这样解决的:

代码语言:javascript
复制
    let store = TWTRTwitter.sharedInstance().sessionStore
    store.reload()
    for case let session as TWTRSession in store.existingUserSessions() {
        store.logOutUserID(session.userID)
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51292316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档