🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

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

Swift

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

解決済

1回答

571閲覧

FIrebase GoogleAuthのログインについて

ouranosu

総合スコア6

Firebase

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

Swift

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

0クリップ

投稿2019/10/06 03:41

編集2019/10/06 07:15

よろしくお願いいたします。

現在Swift5にてログイン画面を作成しております。
色々な方の実装などを参考にしましたが、よくわからないことがたくさんあったので、公式のドキュメントを元に作成しております。

2次認証まで進み、ユーザー名などの取得ができているため、ログインはできていると思うのですが、Firebaseコンソール画面のAuthentication画面でユーザーが表示されません。

個人的にはAppDelegateの最後に記述しているguard let authenticationあたりがわからず、放置気味なのでその辺りなのかなと思っております。

何かコードの記述忘れがあるのかと調べましたが丸3日調べてもわからないため、ここでご助力いただければと質問させていただきます。

まだまだ初学者のため、基本的なことを忘れている場合には、呆れてしまわれるかもしれませんが、アドバイスいただければと思います。

開発環境
OS:MacOS Mojave 10.14.6
Xcode: Ver11
Swift5 storybord

AppDelegate

1import UIKit 2import CoreData 3import Firebase 4import GoogleSignIn 5 6@UIApplicationMain 7class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate { 8 9 var window: UIWindow? 10 11 12 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 13 FirebaseApp.configure() 14 15 GIDSignIn.sharedInstance()?.clientID = FirebaseApp.app()?.options.clientID 16 GIDSignIn.sharedInstance()?.delegate = self 17 return true 18 } 19 20 21 @available(iOS 9.0, *) 22 func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any])-> Bool { 23 return GIDSignIn.sharedInstance().handle(url) 24 } 25 26 func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 27 if let error = error{ 28 if (error as NSError).code == GIDSignInErrorCode.hasNoAuthInKeychain.rawValue{ 29 print("The user has not signed in before or they have since signed out") 30 }else{ 31 print("(error.localizedDescription)") 32 } 33 return 34 } 35 36 let fullName = user.profile.name 37 38 print(fullName) //名前確認 39 40 guard let authentication = user.authentication else { return } 41 // _ = let credential 42 _ = GoogleAuthProvider.credential(withIDToken: authentication.clientID, accessToken: authentication.accessToken) 43 }

ViewController

1import UIKit 2import Firebase 3import GoogleSignIn 4 5class ViewController: UIViewController{ 6 7 @IBOutlet var googleAuthButton: GIDSignInButton! 8 @IBOutlet var fromEmail: UILabel! 9 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 GIDSignIn.sharedInstance()?.presentingViewController = self 14 GIDSignIn.sharedInstance()?.restorePreviousSignIn() 15 } 16 17 @IBAction func signOut(_ sender: Any) { 18 GIDSignIn.sharedInstance()?.signOut() 19 } 20 21}

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

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

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

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

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

guest

回答1

0

自己解決

大筋で自己解決できました。
こちらの質問を参考にアップデート部分などをいじってなんとかコンソールに自分のアカウントが登録されました!
すでに退会されたユーザーさんでしたが丁寧にコメントを残しておいてくださったおかげで助かりました。ありがとうございます。
私も誰かの助けになればと、コードを残しておきます。

一点、ViewControllerとAppDelegateの両方にfunc sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)を書く必要があったのかなかったのか、どちらにもGIDSignInDelegateプロトコルを書いたのでやっぱり必要だったのでしょうか。書いたり消したりしていて何が何だかわからなくなってしまいました。
知ってるかたおられましたら教えてください。

Appdelegate

1import UIKit 2import CoreData 3import Firebase 4import GoogleSignIn 5 6@UIApplicationMain 7class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate{ 8 9 var window: UIWindow? 10 11 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 12 FirebaseApp.configure() 13 14 GIDSignIn.sharedInstance()?.clientID = FirebaseApp.app()?.options.clientID 15 GIDSignIn.sharedInstance()?.delegate = self 16 return true 17 } 18 19 @available(iOS 9.0, *) 20 func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any])-> Bool { 21 return GIDSignIn.sharedInstance().handle(url) 22 } 23 24 func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 25 if let error = error{ 26 print("(error.localizedDescription)") 27 return 28 } 29 guard let authentication = user.authentication else { return } 30 //Googleのトークンを渡し、Firebaseクレデンシャルを取得する 31//クレデンシャル情報とは、主にセキュリティの分野で用いられる語で、IDやパスワードをはじめとする、ユーザーの認証に用いられる情報の総称である。 32 let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken) 33 34 //Firebaseにログインする 35 Auth.auth().signIn(with:credential){ (user, error) in 36 print("Login successfully") 37 //performSegueでログイン後のVCへかえる 38 } 39 } 40 41 func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) { 42 print("接続解除") 43 } 44 45 func applicationWillResignActive(_ application: UIApplication) { 46 //アプリ閉じそうな時 47 } 48 49 func applicationDidEnterBackground(_ application: UIApplication) { 50 //アプリを閉じた時 51 } 52 53 func applicationWillEnterForeground(_ application: UIApplication) { 54 //アプリ開きそうなとき 55 } 56 57 func applicationDidBecomeActive(_ application: UIApplication) { 58 //アプリ開いたとき 59 } 60 61 func applicationWillTerminate(_ application: UIApplication) { 62 //フリックで終了 63 self.saveContext() 64 } 65

ViewController

1 2import UIKit 3import Firebase 4import GoogleSignIn 5 6class ViewController: UIViewController, GIDSignInDelegate{ 7 8 @IBOutlet var googleAuthButton: GIDSignInButton! 9 @IBOutlet var fromEmail: UILabel! 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 GIDSignIn.sharedInstance()?.clientID = FirebaseApp.app()?.options.clientID 15 GIDSignIn.sharedInstance()?.presentingViewController = self 16 GIDSignIn.sharedInstance()?.restorePreviousSignIn() 17 } 18 19 func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 20 } 21 22 @IBAction func signOut(_ sender: Any) { 23 GIDSignIn.sharedInstance()?.signOut() 24 } 25 26} 27 28

投稿2019/10/06 07:13

ouranosu

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問