PFUser logInWithAuthTypeInBackground(错误:缺少Twitter身份验证配置)

时间:2017-07-11 15:19:11

标签: ios swift twitter parse-platform twitter-oauth

我试图通过Twitter登录创建PFUser。

我试图调用此方法时遇到错误。

https://github.com/parse-community/Parse-SDK-iOS-OSX

  

版本:swift:2.3,xcode:8.2.1,解析:1.15.0,twitterKit:2.8.1,TwitterCore:2.8.0

Twitter.sharedInstance().logInWithCompletion { (session, error) -> Void in
  if let session = session { 
    PFUser.registerAuthenticationDelegate(self, forAuthType: "twitter") 

    let params: [String: String] = [
      "id": (session.userID)!,
      "screen_name": (session.userName)!, 
      "auth_token": (session.authToken)!, 
      "auth_token_secret": (session.authTokenSecret)!,
      "consumer_key": Twitter.sharedInstance().authConfig.consumerKey, 
      "consumer_secret": Twitter.sharedInstance().authConfig.consumerSecret 
    ]

    PFUser.logInWithAuthTypeInBackground("twitter", authData: params).continueWithBlock { task -> AnyObject? in
      print(task.error) //[Error]: Twitter auth configuration missing (Code: 1, Version: 1.15.0)

      return task.completed
    }
}
  

缺少Twitter身份验证配置(代码:1,版本:1.15.0)

1 个答案:

答案 0 :(得分:0)

这是一个示例视图控制器,您正在尝试实现的目标。我使用“Twitter.sharedInstance.loginWithCompletion({})”块遇到了问题。

import Fabric
import TwitterKit
import Parse
import Firebase


class LoginViewController: UIViewController {



    var window: UIWindow?
    var user: User?


        // MARK: Login logic
    override func viewDidLoad() {

        let logInButton = TWTRLogInButton(logInCompletion: { session, error in

            if let unwrappedSession = session {

                let parseuser = PFUser()

                let usersName = unwrappedSession.userName
                let usersID = unwrappedSession.userID
                let profileImage = UIImage(named: "userProfileImage")

                parseuser.username = usersName
                parseuser.password = usersID
                parseuser.email = "email@placeholder.com"


                // set currentUser profile image as 'parseuser["profileImage"]'
                let image = UIImage(named: "userProfileImage")
                let imageData = UIImagePNGRepresentation(image!) as Data!
                let file = PFFile(name: "profileImage.png", data: imageData! as Data)
                parseuser["profileImage"] = file


                parseuser.signUpInBackground(block: { (result, error) -> Void in

                    if error == nil && result == true {
                        //var userObjectID =
                        self.user = User(userObjectID: parseuser.objectId!, userID: usersID, userName: usersName, email: parseuser.email!, profileImage: profileImage!)
                        self.saveUser()
                        // user successfully added
                        print ("Object saved")
                        self.goToApp()
                    } else {
                        //TODO: Check error message and display reason to user
                    }

                })
            }
            if (session != nil) {
                let authToken = session?.authToken
                let authTokenSecret = session?.authTokenSecret

                let credential = FIRTwitterAuthProvider.credential(withToken: authToken!, secret: authTokenSecret!)

                FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in
                    if (error != nil) {
                        print(error)
                        return
                    }
                    print("Twitter login successful..")

                })
            } else {
                if (error != nil) {
                    print(error)
                }
            }

        })
        logInButton.center = self.view.center
        self.view.addSubview(logInButton)

那么,在你的AppDelegate

import Firebase
import Fabric
import TwitterCore
import TwitterKit
import Parse

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


        let parseConfiguration = ParseClientConfiguration(block: { (ParseMutableClientConfiguration) -> Void in
            ParseMutableClientConfiguration.applicationId = "com.your.identifier"
            ParseMutableClientConfiguration.clientKey = "your-client-key"
            ParseMutableClientConfiguration.server = "https://your-url.herokuapp.com/parse"
        })

        Parse.initialize(with: parseConfiguration)


        Twitter.sharedInstance().start(withConsumerKey: "your-consumer-key",
                                       consumerSecret: "your-consumer-secret")
        Fabric.with([Twitter.self])
        FIRApp.configure()

这在进口/等方面没有优化。但这会奏效。您需要设置一个firebase帐户,并将Google-Service-Info.plist文件放在您的项目结构中,并获取一个结构密钥并将其放在您的info.plist文件中,但您可以找到如何示例 - 在线。只是一个解决方案。