危機感を持った理系学生のプログラミング日記
こんにちは、狐であります🦊
外は絶賛台風です。ランニングができなくなるから迷惑極まりない。
さて、今回はFirebaseを使ってFacebookのログインを実装してみました。
Firebaseって聞いたことはあるけどなんぞや?から始まり、まだまだ分からない事だらけですが、凄い便利であることはわかりました。便利すぎて感動してます。
プログラミング以外にも色々使うための手順があり大変ですが、沢山やって慣れていきたいです。
今日はFirebase!!!!!
Firebaseって何?
ネイティブアプリやWebアプリなどをユーザーに提供するためには、バックエンド環境も構築する必要があります。しかし1から「API」サーバーを用意してアプリと連携を行ったり、ユーザー履歴を保持する仕組みを作ったりするには膨大な時間が掛かります。
Googleの提供しているFirebaseは、そんな悩みを解決してくれるツールです。Firebaseを使えば効率よくアプリを開発し、運用・管理ができるようになります。
Firebaseとは、Googleの提供する「MBaaS(Mobile Backend as a Service)」です。MBaaSとはモバイルアプリのバックエンド環境を提供するサービスの総称で、その中でも最も有名なのがFirebaseです。
モバイルアプリを開発する上で、ユーザーの目には見えないバックエンド環境をしっかり整えておくのも開発側の責任となります。しかしバックエンド環境構築に時間が掛かり、アプリリリースが遅れてしまっては元も子もありません。また自前でバックエンド環境を構築すると、メンテナンスなどの手間やコストも掛かります。
Firebaseでは、クラウドサーバーを活用してアプリを開発できます。これにより開発側は効率よくアプリを開発できるようになり、スピーディーにアプリをリリースできます。またメンテナンスなどの作業はGoogle側が代行してくれるので、開発側では手間やコストも掛けずに済みます。
つまり、自分でサーバー立てて、データベースを作って値を保存して、管理してみたいなのをやってくれるというわけです。
ユーザー認証を自分で実装するとなると、データベースになんやかんやしたり、いちいち管理したり凄い面倒臭かったのですが、Firebaseを使えばそういうのもやってくれます。
いやー、もっと早く知りたかった🦊
ただ、Firebaseを導入するには、導入したいアプリへの連携作業が必要になります。機能ごとにSDKなどが分かれており、指定された手順通りに実装しないとエラーが出る可能性もあるので公式サイトもよく確認しておきましょう。
これが意外と大変なのですが、自分で一からやる手間と比較したら屁でもないですね🦊
参考サイト
Swiftで実装してみた
大事だなーと思ったコードを抜粋して書いていきます。
//ライブラリをインポート
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit
import FacebookCore
import FacebookLogin
import Firebase
これは言わずもがなですね。ライブラリを使うのでimportは必須です。
view.addSubview(fbLoginButton) //ビューを重ねて表示
このメソッドなんですが、viewに重ねてviewを表示させるといったメソッド。
これで、ログインボタンが表示されます。
func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?) {
//エラーがないのなら
if (error == nil){
//キャンセルボタンが押されたら
if (result!.isCancelled == true){
return
}
}
//トークンを元にログインしてるらしい
let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
//ここからfirebase
Auth.auth().signIn(with: credential) { (result, error) in
//エラーが出たら
if let error = error{
return
}
//resultの値を使ってなんやかんや
self.displayName = result!.user.displayName!
self.pictureURLString = result!.user.photoURL!.absoluteString
//データ保存
UserDefaults.standard.set(1, forKey: "loginOK")
UserDefaults.standard.set(self.displayName, forKey: "displayName")
UserDefaults.standard.set(self.pictureURLString, forKey: "pictureURLString")
let nextVC = self.storyboard?.instantiateViewController(identifier: "next") as! NextViewController
self.navigationController?.pushViewController(nextVC, animated: true)
}
}
このメソッドがメインになります。
流れとしては、
ログインボタンが押される → Facebookにトークンを使ってログイン → Firebaseと連携処理 → ログインユーザーの情報を取ってきて反映させる → ログイン状態や、ログインユーザーの情報を保存
って感じになります。
慣れないと難しいですね🦊
もし何かあれば追記します。では🦊