🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

866閲覧

【Swift】ブロックしたユーザーを非表示にする方法

Shimura_Keita

総合スコア0

Firebase

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2021/01/13 10:05

前提・実現したいこと

#####掲示版、トーク、通知のスクショ
Twitterのようなアプリを作っています。

ブロックしたユーザーを「掲示板、トーク、お知らせ」に表示させないようにする方法をご教授いただきたいです。
なお、データはFirebaseで管理しております。

トーク画面 掲示板画面 お知らせ画面

現在の状況

現在、プロフィール画面のブロックボタンが押されると、
Firebaseの[user-blocking]に保存されるようにしてあります。
また、もう一度タップするとブロック解除されます。
イメージ説明
#####Firebase
イメージ説明

ブロックユーザーをFirebaseに追加するコード

Swift

1func blockUser(uid: String, completion: @escaping(DatabaseCompletion)) { 2 guard let currentUid = Auth.auth().currentUser?.uid else { return } 3 4 REF_USER_BLOCKING.child(currentUid).updateChildValues([uid: 1]) { (err, ref) in 5 REF_USER_BLOCKERS.child(uid).updateChildValues([currentUid: 1], withCompletionBlock: completion) 6 } 7 }

##掲示板、トーク、お知らせのデータ取得状況
###掲示板
現在、掲示板はTwitterとは異なり、フォローしているユーザーの投稿だけではなく、全てのユーザーの投稿が表示されるようになっています。

なので、ユーザーごとに取得する投稿を分けておりません。
#####Firebase
イメージ説明
#####投稿を取得するコード

Swift

1func fetchPosts(completion: @escaping([Post]) -> Void) { 2 var posts = [Post]() 3 4 REF_POSTS.observe(.childAdded) { snapshot in 5 guard let dictionary = snapshot.value as? [String: Any] else { return } 6 guard let uid = dictionary["uid"] as? String else { return } 7 let postID = snapshot.key 8 9 UserService.shared.fetchUser(uid: uid) { user in 10 let post = Post(user: user, postID: postID, dictionary: dictionary) 11 posts.append(post) 12 completion(posts) 13 } 14 } 15 }

###トーク
トークは自分とやりとりしているユーザーとのトークのみを取得し、表示するようにしています。
#####Firebase
イメージ説明
#####トークを取得するコード

Swift

1func fetchConversations(completion: @escaping([Conversation]) -> Void) { 2 var conversations = [Conversation]() 3 guard let uid = Auth.auth().currentUser?.uid else { return } 4 5 REF_USER_MESSAGES.child(uid).observe(.childAdded) { snapshot in 6 let uid = snapshot.key 7 guard let last = snapshot.children.allObjects.last as? DataSnapshot else { return } 8 9 self.fetchMessage(messageID: last.key) { message in 10 UserService.shared.fetchUser(uid: uid) { user in 11 let conversation = Conversation(user: user, message: message) 12 conversations.append(conversation) 13 completion(conversations) 14 } 15 } 16 } 17 }

###お知らせ
通知に関しても、トークと同様に自分に対するものだけを取得し、表示するようにしています。
#####Firebase
イメージ説明
#####お知らせを取得するコード

Swift

1fileprivate func fetchNotifications(uid: String, completion: @escaping([Notification]) -> Void) { 2 var notifications = [Notification]() 3 4 REF_NOTIFICATIONS.child(uid).observe(.childAdded) { snapshot in 5 guard let dictionary = snapshot.value as? [String: AnyObject] else { return } 6 guard let uid = dictionary["uid"] as? String else { return } 7 8 UserService.shared.fetchUser(uid: uid) { user in 9 let notification = Notification(user: user, dictionary: dictionary) 10 notifications.append(notification) 11 completion(notifications) 12 } 13 } 14 } 15 16 func fetchNotifications(completion: @escaping([Notification]) -> Void) { 17 let notifications = [Notification]() 18 guard let uid = Auth.auth().currentUser?.uid else { return } 19 20 REF_NOTIFICATIONS.child(uid).observeSingleEvent(of: .value) { snapshot in 21 if !snapshot.exists() { 22 completion(notifications) 23 } else { 24 self.fetchNotifications(uid: uid, completion: completion) 25 } 26 } 27 }

現在、このような状況なのですが、
ブロックしたユーザーをはじき、表示させないようにする方法をご教授いただきたいです。

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

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

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

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

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

guest

回答1

0

ブロックしたユーザーを「掲示板、トーク、お知らせ」に表示させないようにする方法とのことですが、ブロックしたユーザの何を表示したくないのでしょうか?

  • 名前?
  • アイコン?
  • ツイート?

まずはそこの詳細を決めましょう。

次に、表示させない方法ですが、次のようなアプローチが考えられます。
0. サーバからその情報を取得しないようにする
0. その情報を表示しないようにプログラム上で記述する

あなたのアプリにあった方法を検討してください。

投稿2021/03/05 14:57

errolizer

総合スコア441

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問