0

サービスを使用するアプリケーションに非常に単純な (私が思ったように) 機能を提供しようとしていますParse.com。私が必要としているのは、ユーザーが Facebook 経由でアカウントを作成し、Facebook 経由で再度ログインできるようにすることです。

問題は、PFFacebookUtilsログイン方法が Facebook を介してユーザーをログインさせるだけでなく、新しい を作成することPFUserです。なぜ私にとって問題なのですか?もちろんです。サインアップと分野別の区別はできisNewますが、あまり役に立ちません。

次のことを考慮してください - ユーザーが Facebook 経由でログインしようとし (まだログインしてPFUserいません)、ログインすると、新しいユーザーが作成されます。ユーザーが新しい (つまり、ユーザーが以前に登録されていない) ことを確認したため、このログインを拒否する必要があります。わかりました、私は彼を拒否します。「あなたはまだ登録されていません。行ってサインアップしてください」と言います。ユーザーが(同じログイン方法で)サインアップすると、今度PFUserはユーザーがログインしようとしたときに作成されたものと同じものが返されます。ユーザーは新規ではなく、すでに登録されているため、ユーザーを拒否する必要がありますアカウントは既に存在し、同じアカウントを再度作成することはできないためです。

問題を理解していますか?PFFacebookUtilsアカウントの作成とログインに対処する方法を理解していない私はばかげているPFFacebookUtilsのでしょうか、それともばかげた API を提供するのは誰ですか? どうやってそれをしますか?私が説明した問題をどのように解決しますか。本当に、とても単純なはずですが、どこにも良い例が見つかりません

4

1 に答える 1

1

ユーザーがログインとサインアップで新しいかどうかを確認する、迅速なログインとサインアップのコードがあります。これが私のコードです:

ログインする

let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    spinningActivity.label.text = "Just a Moment"
    spinningActivity.detailsLabel.text = "Logging in"

    if reachabilityStatus == kNOTREACHABLE {

        spinningActivity.hideAnimated(true)

        self.displayError("No Internet Connection", message: "Please connect to the internet before continuing")

    } else {

        let permissions = ["public_profile"]

        PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user:PFUser?, error:NSError?) -> Void in



            if error != nil {

                spinningActivity.hideAnimated(true)

                self.displayError("Error", message: error!.localizedDescription)

            } else if let user = user {
                if user.isNew {

                    spinningActivity.hideAnimated(true)

                    PFUser.currentUser()?.deleteInBackground()

                    self.displayNoticeWithTwoActions("Account Not Found", message: "This Facebook account is not in our system. You have to sign up first.", firstButtonTitle: "Sign Up",closeButtonTitle: "Ok", segue: "dontHaveAccountSegue")

                } else {

                    spinningActivity.hideAnimated(true)

                    self.performSegueWithIdentifier("successfulLoginSegue", sender: self)



                }
            } else {

                PFUser.currentUser()?.deleteInBackground()

                spinningActivity.hideAnimated(true)

                self.displayError("Error", message: "Unless you tapped on 'Cancel' or 'Done', something went wrong. Please try again.")

            }

        }

    }

サインアップ

サインアップ ボタンと、「loadFacebookUserDetails」というログイン ボタンに実装される関数があります。

let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    spinningActivity.label.text = "Just a Moment"
    spinningActivity.detailsLabel.text = "Loading Details"


    if reachabilityStatus == kNOTREACHABLE {

        spinningActivity.hideAnimated(true)

       self.displayError("No Internet Connection", message: "Please connect to the internet before continuing")

    } else {

        let permissions = ["public_profile", "email"]

        PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user:PFUser?, error:NSError?) -> Void in

            if let user = user {

                if !user.isNew {

                    spinningActivity.hideAnimated(true)

                    PFUser.logOut()


                    self.displayNoticeWithTwoActions("Account Found", message: "This Facebook account already in our system. You have to log in first.", firstButtonTitle: "Log In", closeButtonTitle: "Cancel", segue: "haveAccountSegue")



                } else if error != nil {

                    spinningActivity.hideAnimated(true)

                    self.displayError("Error", message: error!.localizedDescription)



                } else if error == nil {

                    spinningActivity.hideAnimated(true)

                    self.loadFacebookUserDetails()

                }

            }

       else {

                spinningActivity.hideAnimated(true)

                self.displayError("Something Went Wrong", message: "Unless you tapped on 'Cancel' or 'Done', something went wrong. Please try again")

            }



        }


    }

func loadFacebookUserDetails() {

    let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    spinningActivity.mode = MBProgressHUDMode.AnnularDeterminate
    spinningActivity.label.text = "Just a Moment"
    spinningActivity.detailsLabel.text = "Loading Details"

    let requestPerameters = ["fields": "id, email, first_name, last_name, name"]

    let userDetails = FBSDKGraphRequest(graphPath: "me", parameters: requestPerameters)

    userDetails.startWithCompletionHandler { (connection, result, error:NSError!) -> Void in

        if error != nil {

            spinningActivity.hideAnimated(true)

            self.displayError("Error", message: error!.localizedDescription)

            PFUser.logOut()

        } else {

        let userID:String = result["id"] as! String
        let userEmail:String = result["email"] as! String
        let userFirstName:String = result["first_name"] as! String
        let userLastName:String = result["last_name"] as! String


        // Get Facebook Profile Picture

        let userProfile = "https://graph.facebook.com/" + userID + "/picture?type=large"

        let usernameLink = "https://graph.facebook.com/" + userID

        let username = usernameLink.stringByReplacingOccurrencesOfString("https://graph.facebook.com/", withString: "")

        let profilePictureUrl = NSURL(string: userProfile)

        let profilePictureData = NSData(contentsOfURL: profilePictureUrl!)

        if profilePictureData != nil {

            let profilePictureObject = PFFile(data: profilePictureData!)
            PFUser.currentUser()?.setObject(profilePictureObject!, forKey: "profile_picture")

        }

        PFUser.currentUser()?.setObject(userFirstName, forKey: "first_name")
        PFUser.currentUser()?.setObject(userLastName, forKey: "last_name")
        PFUser.currentUser()?.setObject(username, forKey: "facebook_link")

        if userEmail == userEmail {

            PFUser.currentUser()?.email = userEmail

        }

        PFUser.currentUser()?.saveInBackgroundWithBlock({ (success:Bool, error:NSError?) -> Void in

            if error != nil {

                spinningActivity.hideAnimated(true)

                self.displayError("Error", message: error!.localizedDescription)

                PFUser.logOut()

            } else if success == true {

                if !userID.isEmpty {

                    spinningActivity.hideAnimated(true)

                NSUserDefaults.standardUserDefaults().setObject("authData", forKey: "facebookAuth")

                    NSUserDefaults.standardUserDefaults().synchronize()

                    self.performSegueWithIdentifier("facebookUserDetailsSegue", sender: self)



                }

            } else {

                spinningActivity.hideAnimated(true)

                self.displayError("Something Went Wrong", message: "Please try again")

                PFUser.logOut()

            }

        })

    }

}

}

Objective C への変換に問題がある場合は、その方法に関する YouTube ビデオを見つけることができると思います。

于 2016-03-27T15:14:58.413 に答える