swiftとfirebaseAuthを用いて、facebookログイン認証を実装しようとしています。
swift
1//// 2//// ViewController.swift 3//// test 4//// 5//// Created by kishirinichiro on 2018/07/11. 6//// Copyright © 2018年 kishirinichiro. All rights reserved. 7//// 8import UIKit 9import FacebookLogin 10import Firebase 11import FirebaseDatabase 12import FBSDKCoreKit 13import FBSDKLoginKit 14import SVProgressHUD 15import FirebaseAuth 16 17 18// 19class ViewController: UIViewController, LoginButtonDelegate { 20 21 //Firebase で認証する 22 //FBSDKLoginButton オブジェクトを初期化するときに、ログイン イベントとログアウト イベントを受信するようにデリゲートを設定します。次に例を示します。 23 //アプリにFacebook公式のログインボタンを実装 24 var loginButton = FBSDKLoginButton() 25 var ref:DatabaseReference! 26 27 28 public func loginButtonDidLogOut(_ loginButton: LoginButton) { 29 30 } 31 32 33 //Called when the button was used to login and the process finished. 34 //デリゲートで didCompleteWithResult:error: を実装します。 35 public func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) { 36 37 let loginManager = LoginManager() 38 39 switch result { 40 case .failed(let error): 41 print("Error (error)") 42 break 43 case .success(let grantedPermissions, let declinedPermissions, let accessToken): 44 loginFireBase() 45 break 46 default: break 47 48 } 49 50 } 51 52// override func viewDidAppear(_ animated: Bool) { 53// if (FBSDKAccessToken.current() != nil) { 54// print("User Already Logged In") 55// print("=============ここでチェック==============") 56// print(FBSDKAccessToken.current()) 57// //既にログインしていた場合の処理(メイン画面へ遷移)を書く 58// self.performSegue(withIdentifier: "selectNumber", sender: self) 59// } else { 60// print("User not Logged In") 61// let loginButton = LoginButton(readPermissions: [ .email, .publicProfile, .userGender ]) 62// loginButton.center = self.view.center 63// loginButton.delegate = self 64// self.view.addSubview(loginButton) 65// ref = Database.database().reference() 66// } 67// } 68 69 70// View が初めて呼び出される時に1回だけ呼ばれます。アプリ起動後に初めて当Viewが表示された場合に1度だけ呼ばれます。 71 override func viewDidLoad() { 72 super.viewDidLoad() 73// if (FBSDKAccessToken.current() != nil) { 74// print("User Already Logged In") 75// //既にログインしていた場合の処理(メイン画面へ遷移)を書く 76// self.performSegue(withIdentifier: "selectNumber", sender: self) 77// } else { 78 //追加の読み取りアクセス許可をリクエストするには、FBSDKLoginButtonオブジェクトのreadPermissionsプロパティを設定します。 79 let loginButton = LoginButton(readPermissions: [ .email, .publicProfile, .userGender ]) 80 loginButton.center = self.view.center 81 loginButton.delegate = self 82 self.view.addSubview(loginButton) 83 ref = Database.database().reference() 84// } 85 } 86 87 88 89 override func didReceiveMemoryWarning() { 90 super.didReceiveMemoryWarning() 91 // Dispose of any resources that can be recreated. 92 } 93 94 /** 95 Login to Firebase after FB Login is successful 96 */ 97 func loginFireBase() { 98 99 //ユーザがログインに成功したらログインしたユーザのアクセストークンを取得してFirebase認証情報と交換します。 100 let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString) 101 print("=============================================") 102 print(FBSDKAccessToken.current()) 103 104 //待機中のくるくるしてるやつ。 105 SVProgressHUD.show() 106 107 //最後に、Firebase 認証情報を使用して Firebase での認証を行います。 108 Auth.auth().signInAndRetrieveData(with: credential) { (user, error) in 109 if error != nil { 110 // ここでエラーが発生(今回の質問の箇所) 111 return 112 }else if FBSDKAccessToken.current() != nil{ 113 114 SVProgressHUD.dismiss() 115 self.performSegue(withIdentifier: "UserImageView", sender: self) 116 self.postUser() 117 118 119 } 120 } 121 } 122 123 124 125func postUser(){ 126 guard let user = Auth.auth().currentUser else{ 127 assert(true, "post user with nil") 128 return 129 } 130 131 let facebookId = FBSDKAccessToken.current().userID 132 let userRef = ref.child("Users") 133 134 userRef 135 .queryOrdered(byChild: "facebookId") 136 .queryEqual(toValue: facebookId) 137 .observeSingleEvent(of: DataEventType.value) { (snapshot) in 138 if snapshot.exists() { 139 print("Exist user") 140 141 }else{ 142 143 //FBSDKAccessTokenにはuserIDが含まれています。これを使用して利用者を特定できます。 144 let postUser = ["facebookId": FBSDKAccessToken.current().userID, 145 "name": user.displayName] 146 let postUserRef = userRef.child(user.uid) 147 postUserRef.updateChildValues(postUser) 148 } 149 150 } 151} 152}
//最後に、Firebase 認証情報を使用して Firebase での認証を行います。の部分でエラーが発生してしまいます。
どうやらAuth.auth().signInAndRetrieveData(with: credential) { (user, error) in .....が機能していない?みたいです。
(facebookログインは成功しているが、firebase側に問題あり...?)
何が間違っているのかがわからず、完全に手詰まり状態です。
どなたか教えていただけると幸いです。
よろしくお願いします。
追記
if error ...の方に入ってしまう。
以下エラー内容
swift
1Optional(Error Domain=FIRAuthErrorDomain Code=17006 "The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section." UserInfo={NSLocalizedDescription=The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section., error_name=ERROR_OPERATION_NOT_ALLOWED})
上だと見辛いの同じものを下にも
Optional(Error Domain=FIRAuthErrorDomain Code=17006 "The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section." UserInfo={NSLocalizedDescription=The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section., error_name=ERROR_OPERATION_NOT_ALLOWED})
回答1件
あなたの回答
tips
プレビュー