swift4 Firebase UI аутентификация не работает только для твиттера - PullRequest
0 голосов
/ 04 ноября 2018

У меня проблема со входом в твиттер в моем приложении с использованием Firebase UI.

Я установил Google, Facebook и Twitter. Google и Facebook работали хорошо.

Но твиттер не работает.

Когда я нажимаю Войти через Twitter, он открывает приложение Twitter и показывает этот экран. enter image description here

Тем не менее, после того, как я нажму кнопку подключения и вернусь к своему созданию приложения, ничего не происходит.

Мой текущий код такой:

import UIKit
import Firebase
import FirebaseAuthUI
import FirebaseGoogleAuthUI
import FirebaseFacebookAuthUI
import FirebaseTwitterAuthUI
import FirebaseDatabaseUI
import TwitterKit

class WelcomeViewController: UIViewController {

    var authUI: FUIAuth { get { return FUIAuth.defaultAuthUI()!}}
    let providers: [FUIAuthProvider] = [FUIGoogleAuth(),FUITwitterAuth(),
                                        FUIFacebookAuth()]

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)

    }

    @IBAction func startButtonTapped(_ sender: Any) {
        checkLoggedIn()
    }

    func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
        if user != nil {
            self.performSegue(withIdentifier: "toNewUser", sender: nil)
        }
    }

}

extension WelcomeViewController: FUIAuthDelegate {

    func checkLoggedIn() {
        self.setupLogin()
        Auth.auth().addStateDidChangeListener{auth, user in
            if user != nil{
                print("success")
                self.performSegue(withIdentifier: "toNewUser", sender: nil)
            } else {
                print("fail")
                self.login()
            }
        }
    }

    func setupLogin() {
        authUI.delegate = self
        authUI.providers = providers
        authUI.isSignInWithEmailHidden = true
    }

    func login() {

        let authViewController = authUI.authViewController()
        self.present(authViewController, animated: true, completion: nil)
    }

}

и журнал консоли выглядит так:

2018-11-04 14:49:28.269684+0900 ciel[8190:2052631] [BoringSSL] nw_protocol_boringssl_error(1584) [C13.1:2][0x104715070] Lower protocol stack error: 53
2018-11-04 14:49:28.272673+0900 ciel[8190:2052631] TIC Read Status [13:0x283b98a80]: 1:53
2018-11-04 14:49:28.272744+0900 ciel[8190:2052631] TIC Read Status [13:0x283b98a80]: 1:53

Я проверил TWTRTwitter.sharedInstance (). Start () в AppDelegate и info.plist. Что я не прав?

Одна вещь, которую я понял, заключается в том, что только когда я нажимаю на твиттер, он открывает твиттерное iOS-приложение, а 2 других открывают браузер.

1 Ответ

0 голосов
/ 12 ноября 2018

Привет Добавьте ниже как предложено к вашим файлам

в файле plist

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>twitterkit-yourConsumerKey</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>twitter</string>
    <string>twitterauth</string>
</array><key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>twitterkit-yourConsumerKey</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>twitter</string>
    <string>twitterauth</string>
</array>

В AppDelegate

import TwitterKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions 
launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    TWTRTwitter.sharedInstance().start(withConsumerKey:”yourConsumerKey”, 
consumerSecret:”yourSecretKey”)
    return true
}


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

на экране входа в систему

import TwitterKit


btn_Twitter.addTarget(self, action: #selector(loginWithTwitter), for: .touchUpInside)


func loginWithTwitter(){
    TWTRTwitter.sharedInstance().logIn(completion: { (session, error) in
        if (session != nil) {
            print("signed in as \(session?.userName ?? "")");
            self.getEmailAddress(session:session!)
        } else {
            print("error: \(error?.localizedDescription ?? "")");
        }
    })
}


func getEmailAddress(session:TWTRSession){

    var theTwitterID:String = "No Email"
    let client = TWTRAPIClient.withCurrentUser()
    let request = client.urlRequest(withMethod: "GET",
                                    urlString: "https://api.twitter.com/1.1/account/verify_credentials.json",
                                    parameters: ["include_email": "true", "skip_status": "true"],
                                    error: nil)

    client.sendTwitterRequest(request, completion: { (response, data, connectionError) in
        if (connectionError == nil) {
            do{
                let json = try JSONSerialization.jsonObject(with: data!, options: [])
                print("Json response: ", json)
                let myDict:NSDictionary = json as! NSDictionary
                print(myDict.value(forKey: "name") ?? "")
                let screenName:String = myDict.value(forKey: "screen_name") as! String;
                let fullName:String = myDict.value(forKey: "name") as! String
                let picture:String = myDict.value(forKey: "profile_image_url") as! String
                if let emailId:String = myDict.value(forKey: "email") as? String{
                    print("Twitter Email: \(emailId)")
                    print("Twitter Screen Name: \(screenName)")
                    print("Twitter Full Name: \(fullName)")
                    print("Twitter Picture: \(picture)")
                    theTwitterID = screenName

                    let fullNameArr = fullName.characters.split{$0 == " "}.map(String.init)
                    let firstName: String = fullNameArr[0]
                    let lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil
                    print("Twitter FirstName: \(firstName)")
                    print("Twitter LastName: \(lastName!)")

                }else{
                    print("Error getting your email id. Please check permission for Twitter.")
                }

            }catch{

            }

        }else {
            print("Error: \(connectionError!)")
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...