私のXcodeプロジェクトには、すでに作成したユーザーのユーザー名とパスワードを使用するサインイン機能があります。今、私はFacebookのログインをプロジェクトに統合したいと思っていますが、これをどうやって行うのか完全にはわかりません。誰かが彼らの方法でアカウントを作ったときには、ユーザー名とパスワードを作成して保存し、再びサインインしたいときはいつでもPFUser.logIn(withUsername: ..., password: ...)
で使用できます。FacebookのログインとParse Swiftの統合3
しかし、Facebookでは、自分のアカウントを保存するためにどのような固有の識別子を使用するか分かりません。私は抽出できるFacebookのIDがあることを知っていますが、これを取得した後にユーザーにログインするにはどうすればよいですか?私が前に言ったように、私は現在PFUser.logIn(withUsername: ..., password: ...)
を使ってユーザーをログインさせています。そのユーザーに関連するすべてのデータを取得するには、PFUser.current()?.username
を使用してください。 PFFacebookUtils.logInInBackground
を使っていると聞いていましたが、すでに実装しようとしていましたが、「Facebookボタンを押し続ける」ボタンを押すと、アプリがクラッシュします(スクリーンショットのエラーと下部に配置されました)。私はこれまでに持っていたコードをコピーしました。 FacebookのユーザーIDを保存するFacebook機能とサインアップを統合するにはどうすればいいですか?ユーザーにログインする際にはどの方法を使用しますか(すなわちPFFacebookUtils.logInInBackground
)?ここは、これまでに私のコードです:
@IBOutlet var facebookSignUpButton: FBSDKLoginButton!
var fullnameFB = String()
var idFB = String()
var emailFB = String()
var isFBSignUp = Bool()
override func viewDidLoad() {
super.viewDidLoad()
signUpWithFacebook()
}
func signUpWithFacebook() {
facebookSignUpButton.readPermissions = ["email", "public_profile"]
facebookSignUpButton.delegate = self
self.view.addSubview(facebookSignUpButton)
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil { //if theres an error
print(error)
} else if result.isCancelled { // if user cancels the sign up request
print("user cancelled login")
} else {
PFFacebookUtils.logInInBackground(with: result!.token!) { (user, error) in
if error == nil {
if let user = user {
if user.isNew {
print("User signed up and logged in through Facebook!")
} else {
print("User logged in through Facebook!")
}
if result.grantedPermissions.contains("email") {
if let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, name"]) {
graphRequest.start(completionHandler: { (connection, result, error) in
if error != nil {
print(error?.localizedDescription ?? String())
} else {
if let userDetails = result as? [String: String]{
print(userDetails)
self.fullnameFB = userDetails["name"]!
self.idFB = userDetails["id"]!
self.emailFB = userDetails["email"]!
self.isFBSignUp = true
}
}
})
}
} else {
print("didnt get email")
self.createAlert(title: "Facebook Sign Up", message: "To signup with Facebook, we need your email address")
}
} else {
print("Error while trying to login using Facebook: \(error?.localizedDescription ?? "---")")
}
} else {
print(error?.localizedDescription ?? String())
}
}
}
}
コンソール出力:
2017年8月12日14:14:33.223472から0700プロジェクト[2423:10] ***キャッチされない例外によりにアプリを終了します'NSInternalInconsistencyException'、理由:
***まずスローコールスタック 'あなたは+ initializeFacebookWithApplicationLaunchOptionsを呼び出してPFFacebookUtilsを初期化する必要があります': (0x188042fe0 0x186aa4538 0x188042f28 0x100b8f934 0x100b90020 0x100b9032c 0x10019eee8 0x1001a0a64 0x100867598 0X 10086e998 0x10086e4f0 0x100871a94 0x18b3610d4 0x101521a10 0x101526b78 0x187ff10c8 0x187feece4 0x187f1eda4 0x189989074 0x18e1dd364 0x1001ec288 0x186f2d59c) のlibC++ abi.dylib:ドキュメントに記載されているようにタイプNSException (lldb)
アプリがクラッシュしたらログ出力を投稿できますか? 'PFFacebookUtils.logInInBackground'が動作するので、別の問題があるはずです。 – nathan
さて、私はエラーのある投稿を編集しました。 – fphelp
私はコンソール出力を意味しました(画像ではなくテキストとして)。これはXcodeの例外ブレークポイントです。 – nathan