0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ユーザー情報を設定しよう!

0
Posted at

こんにちは!🐶

前回は、データの送信について学びテキストや画像の情報を送りました!

今回はその発展編で、ユーザー情報にユーザーネームやユーザー自己紹介文を設定することで、ユーザーの情報を充実させていきましょう!

会員管理に設定できるユーザー情報は限られている

まず初めに、前置として、Firebaseが持っている会員管理(Auth)にはユーザー情報を多く設定できないというのと、Twitterなどのようにプロフィール情報を他のユーザーが参照するようなアプリはAuthとは別にFirestoreにユーザー情報を登録する必要があります。

なので、今回も新規登録した際は会員管理とは別にFirestoreのデータベースにuserコレクションを作ってあげることにより、様々な情報の設定をできるようにしたいと思います!

新規登録のコードを書き換えよう!

では、ます初めに完成形から見せたいと思います!👇
見た目
スクリーンショット 2021-06-08 21.53.03.png

データベース
スクリーンショット 2021-06-08 21.56.47.png

このように、新規登録の際にユーザー情報を設定するとFirestoreでuserコレクションが作られ情報が送られるという形になっています!

そしてコードはこのようになっています👇

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

まず今までしてきたことと違う点はこちらですね!👇

SignUpViewcontroller
                    //新規等速成功した時
                    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が記入されています。
スクリーンショット 2021-06-08 21.56.47.png

これはどういう事かと言いますと、今までしてきた投稿にはドキュメントIDを設定する必要がなく、ランダムでIDが入っていました。
しかしUerコレクションに関しては、ドキュメントIDがランダムだと、どのユーザー情報なのかが区別できず、後でプロフィール画面を作る際などに、呼び出すことができなくなってしまいます。
それを避けるために、document()の()の中にユーザーIDを指定することにより、ドキュメントIDを設定することができ、後で呼び出す際は、呼び出したいユーザーのIDと一致するドキュメント名を持ってくることで、ユーザー情報を取得することができます。

また、前回のデータ送信の際は、 db.collection("Post").addDocumentのようにaddDocumentを使っていましたが今回はsetDataを使っています。
この2つの違いとしては、addDocumentはドキュメントIDを指定せず、データを送る際はドキュメントIDがランダムに設定されるのに対し、setDataの方はドキュメントIDを指定します。
ですので、ドキュメントIDがランダムか指定するのかの違いだと思ってください!

お疲れ様でした!

今回は、データ送信の発展編として、ドキュメントIDを指定する方法をやってみました!
次回は、送ったデータの更新をしていきます!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?