質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

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

Swift

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

Q&A

解決済

1回答

2820閲覧

【Firebase】【Swift】SNSの友達登録機能を考えた場合のデータベース設計について

street

総合スコア34

Firebase

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

Swift

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

0グッド

1クリップ

投稿2018/01/31 01:50

お世話になります。

FirebaseのRealtimeDatabaseを用いてSNSの友達登録機能を以下のデータベースで実現しようと考えています。
その中で疑問点があり、正しい設計なのかご相談したく投稿させて頂きました。

ユースケースとして、userID1のtanakaがuserID2のsatoに友達登録する場合です。
具体的には以下のとおりです。

  1. tanakaがsatoのappIDを検索し、userAppIDに存在するか確認する.
  2. 存在していれば、tanakaは自身とsatoのappIDと紐付くfriendID1をfriendListに追加する。
  3. tanakaはsatoのfriendListにもfriendID1を追加する。

この場合、データベース設計は以下を想定しています。

Json

1"userList":{ 2 "userID1":true, 3 "userID2":true 4}, 5 6"userAppID":{ 7 "tanaka0701":true, 8 "sato1001":true 9}, 10 11"userInfo":{ 12 "userID1":{ 13 "name":"tanaka", 14 "appID":"tanaka0701", 15 "friendList":{ 16 "friendID1":true 17 } 18 }, 19 "userID2":{ 20 "name":"sato", 21 "appID":"sato1001", 22 "friendList":{ 23 "friendID1":true // userID1がuserID2のfriendListを更新する必要があるか? 24 } 25 }, 26}, 27 28"friendInfo": { 29 "friendID1":{ 30 "sender":"tanaka0701", 31 "reciever":"sato1001", 32 "created":123456 33 } 34}

・疑問点 1
3.の時に、tanakaはsatoのfriendList(userInfo/userID2/friendList/)を更新して良いのでしょうか?
tanakaが自分以外のuserInfoを更新することに違和感をもっています。

・疑問点 2
3.の時に、tanakaからの登録通知を受け取るためにsatoはどのデータをオブザーブするべきでしょうか。
userInfo/userID2/friendList/を常時オブザーブするべきでしょうか。

・疑問点 3
ユニークIDとなるfriendID1はchildByAutoId()を用いたものと認識しています。
以下の実装であっていますでしょうか?

Swift

1let ref = Database.database().reference() 2 3let postRef = ref.child("friendInfo").childByAutoId() 4postRef.setValue(["sender":"tanaka0701", "reciever":"sato1001", "created":123456]) 5 6ref.child("userInfo").child(Auth.auth().currentUser.uid).child("friendList").setValue([postRef.key:true])

お手数ですがご教示お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

userID1userInfo/userID2/friendList/userID1 ならば更新できる,とすれば良いのではないでしょうか.
あるいはそもそも「一方的に友達登録できること」自体がどうなのかという考え方もあります.facebookのように申請&許可とするのであれば,更新はCloud Functionなどサーバサイドでやるのが良いでしょう.

2.
アプリのいわゆる通知という意味であれば,そもそもCloud Messagingを利用したほうが良いかと思います.

3.
1にも関わってきますが, userID を使いまわしたほうが便利かと思います.

投稿2018/01/31 03:06

Yatima

総合スコア1159

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

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

street

2018/01/31 06:10

ありがとうございます! 申請・許可を実現するとなるとそれを管理するサーバサイドが必要ということですね。。。 通知についてはCloud Messagingのプッシュ通知トリガーでデータベースのデータを取得しに行くよう実装します。 サーバーサイドを使わない場合はuserIDを使いまわすようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問