質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3172閲覧

firebaseでfacebookログイン時にアクセス出来ない

ninomiyanen

総合スコア21

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/09/19 09:28

編集2018/09/19 11:55

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})

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

u39ueda

2018/09/19 09:33

発生しているエラーの内容を書いてください
ninomiyanen

2018/09/19 09:42

すいません、ご指摘ありがとうございます!文字数の関係でprint(============)より上は省きました!
u39ueda

2018/09/19 09:51

すみません。ちゃんと言った方がよかったですね。 // ここでエラーが発生 のところでprint(error)してその出力を書いて欲しいです。 あと追記してもらった内容ですが見られちゃいけないものが含まれてませんか?
ninomiyanen

2018/09/19 09:59

初心者なもので理解できず申し訳ありませんでした!追記内容はとりあえず削除しました。教えてくださってありがとうございます。電車に乗ってしまったので、家に着き次第追記させていただきます!
ninomiyanen

2018/09/19 11:55

エラー内容追記しました!
guest

回答1

0

ベストアンサー

エラーメッセージにまんま答えが書いてあるじゃないですか。
英語が読めなくたって翻訳サイトに通せば大体の意味はわかるでしょう?

facebookログイン認証が無効になっていると言っています。
ドキュメントの準備-4の手順がやってあるか確認してください。

投稿2018/09/19 15:47

u39ueda

総合スコア950

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ninomiyanen

2018/09/20 04:40

ドキュメントの手順は全て含めやっているのですが出来てない、、、って感じです! しかし、エラーログの読み方がわかったのは初心者の僕にとって大きな一歩でした。 ご協力ありがとうございました。
ninomiyanen

2018/09/20 04:40

ドキュメントの手順は全て含めやっているのですが出来てない、、、って感じです! しかし、エラーログの読み方がわかったのは初心者の僕にとって大きな一歩でした。 ご協力ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問