目次
- 前回
- 今回やる事
- Database
- ログインしたユーザの情報によって遷移先を判別する画面遷移ページを作る
- ユーザネーム&一言メッセージ追加ページを追加
- 次回
前回
【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る!【画像リスト化編】
今回やる事
今回はユーザページを完成させる為に、ログインしたユーザの情報によって画面遷移先を変える処理やユーザネーム&一言メッセージ追加ページも付け加える。
Database
今回は、以下のDatabaseを追加
- user
- usercount
(Follow/Followerに関しては、フォロー機能実装の際に使う)
ログインしたユーザの情報によって遷移先を判別する画面遷移ページを追加
初めてログインした際に、遷移するページであり、このページでuserのデータを格納する。
まず、新規登録の処理を書き直す。
//新規登録
@objc func add(_ :UIButton) {
let usercount = self.ref.child("usercount/count")
usercount.observe(DataEventType.value, with:{ (snapshot) in
let count = snapshot.value
let countStr = count as? String
let countInt = Int(countStr!)
let countValue = countInt!
Auth.auth().createUser(withEmail: self.user_id.text!, password: self.user_pass.text!, completion: { (user:User?, error:Error?) in
let countUp = countValue + 1
if let error = error {
print("Creating the user failed! \(error)")
return
}
if let user = user {
print("user : \(user.email) has been created successfully.")
self.ref.child("usercount").setValue(["count": "\(countUp)"])
let usercount = self.ref.child("usercount/count")
usercount.observe(DataEventType.value, with: { (snapshot) in
let usercountStr = snapshot.value as? String
//userにデータを追加する
self.ref.child("user").child("\(usercountStr!)").updateChildValues(["UID": user.uid])
self.ref.child("user").child("\(usercountStr!)").updateChildValues(["Follow": "0"])
self.ref.child("user").child("\(usercountStr!)").updateChildValues(["Follower": "0"])
self.ref.child("user").child("\(usercountStr!)").updateChildValues(["images": user.uid])
})
}
})
})
}
新規登録の所にusercountの値を上書き処理を新たに追加した。
そして新規登録時に、userにデータ(usernameとmsg以外)を追加する。
続いて、ログインしたユーザの情報によって遷移先を判別する画面遷移ページを作る。
import UIKit
import Firebase
let w3 = UIScreen.main.bounds.size.width
let h3 = UIScreen.main.bounds.size.height
class UserFlowViewController: UIViewController {
//DBアクセス
var ref: DatabaseReference!
override func viewDidLoad() {
//DBインスタンスを作成
ref = Database.database().reference()
super.viewDidLoad()
//usercount取得
let UserListNum = self.ref.child("usercount/count")
UserListNum.observe(DataEventType.value, with: { (snapshot) in
//取得したusercountをIntに戻す
let Usercount = snapshot.value as? String
let UsercountInt = Int(Usercount!)
let UserValue = UsercountInt!
//ログイン情報取得
let user = Auth.auth().currentUser
for i in 1 ... UserValue {
if let user = user {
//userのユーザUIDを取得する
let userData = self.ref.child("user/\(i)/username")
userData.observe(DataEventType.value, with: { (snapshot) in
let User = snapshot.value as? String
let userUID = self.ref.child("user/\(i)/UID")
userUID.observe(DataEventType.value, with: { (snapshot) in
let UID = snapshot.value as? String
if user.uid == UID! {
if User == nil {
//ユーザネーム&一言メッセージに遷移
let storyboard: UIStoryboard = self.storyboard!
let nextView = storyboard.instantiateViewController(withIdentifier: "UsernameAdd")
self.present(nextView, animated: true, completion: nil)
print("User転送")
} else {
//ユーザページに遷移
let storyboard: UIStoryboard = self.storyboard!
let nextView = storyboard.instantiateViewController(withIdentifier: "Image")
self.present(nextView, animated: true, completion: nil)
print("Image転送")
}
}
})
})
}
}
})
}
}
まず、userに登録されているユーザUIDとログインしたUIDが同じであり、
且つ、userのusernameがnilである場合は、ユーザネーム&一言メッセージ追加ページに遷移する。
これによって、初めてログインした人は、username未登録なのでnilとなり、ユーザネーム&一言メッセージに遷移、
過去にログインした事ある人は、そのままユーザページに遷移している。
ユーザネーム&一言メッセージ追加ページを追加
続いて、ユーザネーム&一言メッセージ追加ページを追加する。
import UIKit
import Firebase
let w4 = UIScreen.main.bounds.size.width
let h4 = UIScreen.main.bounds.size.height
class UsernamemsgAddViewController: UIViewController {
//DB参照作成
var ref: DatabaseReference!
//ユーザUID取得
let user = Auth.auth().currentUser?.uid
//ユーザネーム入力欄
let Username = UITextField(frame: CGRect(x: (w4 - 300) / 2, y: 100, width: 300, height: 50))
//一言メッセージ入力欄
let msg = UITextView(frame: CGRect(x: (w4 - 300) / 2, y: 200, width: 300, height: 200))
override func viewDidLoad() {
super.viewDidLoad()
//ユーザネーム入力欄の設定
Username.layer.cornerRadius = 5.0
Username.layer.borderColor = UIColor.black.cgColor
Username.layer.borderWidth = 1.0
view.addSubview(Username)
//一言メッセージ入力欄の設定
msg.layer.cornerRadius = 5.0
msg.layer.borderColor = UIColor.black.cgColor
msg.layer.borderWidth = 1.0
view.addSubview(msg)
//始めるボタン
let b = UIButton(frame: CGRect(x: (w4 - 100) / 2, y: 500, width: 100, height: 50))
b.setTitle("始める", for: UIControlState())
b.backgroundColor = .red
b.addTarget(self, action: #selector(UsernamemsgAddViewController.UsernameMsg(_:)), for: .touchUpInside)
view.addSubview(b)
}
//始めるボタン押した時に、データを格納&ユーザページに遷移する
@objc func UsernameMsg(_ :UIButton) {
//DBインスタンス作成
ref = Database.database().reference()
let usercount = self.ref.child("usercount/count")
usercount.observe(DataEventType.value, with: { (snapshot) in
let usercountStr = snapshot.value as? String
let usercountInt = Int(usercountStr!)
for i in 1 ... usercountInt! {
let userUID = self.ref.child("user/\(i)/UID")
userUID.observe(DataEventType.value, with: { (snapshot) in
let UID = snapshot.value as? String
if self.user! == UID {
self.ref.child("user").child("\(i)").updateChildValues(["username": "\(self.Username.text!)"])
self.ref.child("user").child("\(i)").updateChildValues(["msg": "\(self.msg.text!)"])
let storyboard: UIStoryboard = self.storyboard!
let nextView = storyboard.instantiateViewController(withIdentifier: "Image")
self.present(nextView, animated: true, completion: nil)
}
})
}
})
}
}
・完成品
・・・次回に続く。
次回
【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る!【ユーザページ完成編②】