こんにちは!🐶
前回は、データの送信について学びテキストや画像の情報を送りました!
今回はその発展編で、ユーザー情報にユーザーネームやユーザー自己紹介文を設定することで、ユーザーの情報を充実させていきましょう!
会員管理に設定できるユーザー情報は限られている
まず初めに、前置として、Firebaseが持っている会員管理(Auth)にはユーザー情報を多く設定できないというのと、Twitterなどのようにプロフィール情報を他のユーザーが参照するようなアプリはAuthとは別にFirestoreにユーザー情報を登録する必要があります。
なので、今回も新規登録した際は会員管理とは別にFirestoreのデータベースにuserコレクションを作ってあげることにより、様々な情報の設定をできるようにしたいと思います!
新規登録のコードを書き換えよう!
このように、新規登録の際にユーザー情報を設定するとFirestoreでuserコレクションが作られ情報が送られるという形になっています!
そしてコードはこのようになっています👇
import UIKit
import FirebaseAuth
import Firebase
class SignUpViewController: UIViewController {
@IBOutlet var emailTextField : UITextField!
@IBOutlet var passwordTextField : UITextField!
@IBOutlet var userNameTextField : UITextField!
//Firestoreのデータベースを用意
let db = Firestore.firestore()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func SignUp(){
if let email = emailTextField.text,let password = passwordTextField.text {
Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
if error != nil {
print("エラー")
} else {
//新規等速成功した時
let uid = Auth.auth().currentUser?.uid as! String
//userコレクションのドキュメントにuserIdを追加、userNameフィルターにユーザーネームを入れる
self.db.collection("Users").document(uid).setData(["userName" : self.userNameTextField.text]) { (error) in
if error != nil {
print("ユーザー情報追加失敗")
} else {
print("ユーザー情報追加seikou")
}
}
self.performSegue(withIdentifier: "SignUptoHome", sender: nil)
}
}
}
}
}
まず今までしてきたことと違う点はこちらですね!👇
//新規等速成功した時
let uid = Auth.auth().currentUser?.uid as! String
//userコレクションのドキュメントにuserIdを追加、userNameフィルターにユーザーネームを入れる
self.db.collection("Users").document(uid).setData(["userName" : self.userNameTextField.text]) { (error) in
if error != nil {
print("ユーザー情報追加失敗")
} else {
print("ユーザー情報追加seikou")
}
}
違う点としては、document()の中にユーザーIDが入っています。実際にFirestoreを見てみると、ドキュメントの中にユーザーIDが記入されています。

これはどういう事かと言いますと、今までしてきた投稿にはドキュメントIDを設定する必要がなく、ランダムでIDが入っていました。
しかしUerコレクションに関しては、ドキュメントIDがランダムだと、どのユーザー情報なのかが区別できず、後でプロフィール画面を作る際などに、呼び出すことができなくなってしまいます。
それを避けるために、document()の()の中にユーザーIDを指定することにより、ドキュメントIDを設定することができ、後で呼び出す際は、呼び出したいユーザーのIDと一致するドキュメント名を持ってくることで、ユーザー情報を取得することができます。
また、前回のデータ送信の際は、 db.collection("Post").addDocumentのようにaddDocumentを使っていましたが今回はsetDataを使っています。
この2つの違いとしては、addDocumentはドキュメントIDを指定せず、データを送る際はドキュメントIDがランダムに設定されるのに対し、setDataの方はドキュメントIDを指定します。
ですので、ドキュメントIDがランダムか指定するのかの違いだと思ってください!
お疲れ様でした!
今回は、データ送信の発展編として、ドキュメントIDを指定する方法をやってみました!
次回は、送ったデータの更新をしていきます!

