From a64c8abd7d8cd9c1de67e7eda01c005cfc4c2866 Mon Sep 17 00:00:00 2001 From: Martin Mitrevski Date: Mon, 5 Aug 2024 15:21:35 +0200 Subject: [PATCH] Added cookbook for blocking users (#3359) --- docusaurus/docs/iOS/assets/blocked-users.png | Bin 0 -> 37610 bytes .../swiftui-cookbook/blocking-users.md | 197 ++++++++++++++++++ docusaurus/sidebars-ios.json | 3 +- 3 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 docusaurus/docs/iOS/assets/blocked-users.png create mode 100644 docusaurus/docs/iOS/swiftui/swiftui-cookbook/blocking-users.md diff --git a/docusaurus/docs/iOS/assets/blocked-users.png b/docusaurus/docs/iOS/assets/blocked-users.png new file mode 100644 index 0000000000000000000000000000000000000000..e58a48d24329fd39eeaf03bace6a2321c342d391 GIT binary patch literal 37610 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 H?4te!lGQ?v literal 0 HcmV?d00001 diff --git a/docusaurus/docs/iOS/swiftui/swiftui-cookbook/blocking-users.md b/docusaurus/docs/iOS/swiftui/swiftui-cookbook/blocking-users.md new file mode 100644 index 00000000000..dd0db60051f --- /dev/null +++ b/docusaurus/docs/iOS/swiftui/swiftui-cookbook/blocking-users.md @@ -0,0 +1,197 @@ +--- +title: Blocking Users +description: How to block and unblock users +--- + +## Introduction + +Blocking users is an essential feature in a chat app because it enhances user safety and experience. It allows individuals to protect themselves from harassment, spam, and unwanted interactions. By giving users control over their interactions, it helps maintain privacy, reduces the risk of online bullying, and promotes a respectful community atmosphere. + +As a result, some app stores require this functionality as part of their review process. + +## Stream Chat + +The Stream Chat SDK provides a way for blocking and unblocking users, as well as listing all of the blocked users. + +When you block a user, you won’t receive any direct messages from that user anymore. However, if you share a group with other participants, you will still receive messages from the blocked user. + +In this cookbook, we will see how to implement this feature in your chat apps, using the Stream Chat SDK. + +## Low-Level Client support + +The low-level client provides the following methods related to user blocking. + +### Block a user + +In order to block a user, you need to create a user controller with the id of the user you wish to block. + +```swift +let blockController = chatClient.userController(userId: userToBlock.id) +blockController.block { error in + if let error { + // handle error + } else { + // user was blocked + } +} +``` + +### Unblock a user + +Similarly, to unblock a blocked user, you need to create a user controller with the id of the user you wish to unblock. + +```swift +let unblockController = chatClient.userController(userId: userToUnblock.id) +blockController.unblock { error in + if let error { + // handle error + } else { + // user was blocked + } +} +``` + +### Listing blocked users + +In order to see the list of your blocked users, you need to create an instance of the `CurrentChatUserController`. From there, you can access the `currentUser`, and its property `blockedUserIds`: + +```swift +let userController = chatClient.currentUserController() +let blockedUserIds = userController.currentUser?.blockedUserIds ?? [] +``` + +You can use this code to check if a user is blocked, and show the corresponding block or unblock action. + +```swift +if blockedUserIds.contains(userId) { + // user is blocked. +} +``` + +## Message actions + +You can use the logic above to create your own custom message actions that will involve user blocking. + +However, the SwiftUI SDK provides message blocking actions out of the box - you just need to turn them on with the `userBlockingEnabled` property in the `MessageListConfig`: + +```swift +let utils = Utils( + messageListConfig: MessageListConfig(userBlockingEnabled: true), +) +let streamChat = StreamChat(chatClient: chatClient, utils: utils) +``` + +## Displaying blocked users + +Next, let’s see how we can build a custom UI that will show the list of blocked users. This will allow easier overview for the users about who they blocked, as well as provide an easy way to unblock them if needed. + +Here’s a screenshot showing how the list will look like. + +![Screenshot showing the blocked users UI](../../assets/blocked-users.png) + +First, let’s define the `BlockedUsersView`, which can be invoked from your user’s profile, for example. + +```swift +struct BlockedUsersView: View { + + @StateObject var viewModel = BlockedUsersViewModel() + + var body: some View { + ZStack { + if !viewModel.blockedUsers.isEmpty { + List { + ForEach(viewModel.blockedUsers) { blockedUser in + HStack { + MessageAvatarView(avatarURL: blockedUser.imageURL, size: .init(width: 48, height: 48)) + Text(blockedUser.name ?? blockedUser.id) + .font(.headline) + Spacer() + } + .listRowSeparator(.hidden) + } + .onDelete(perform: delete) + } + .toolbar { + EditButton() + } + .listStyle(.plain) + } else { + VStack { + Text("There are currently no blocked users.") + .padding() + Spacer() + } + } + } + .onAppear { + viewModel.loadBlockedUsers() + } + .navigationTitle("Blocked Users") + } + + func delete(at offsets: IndexSet) { + if let first = offsets.first, first < viewModel.blockedUsers.count { + viewModel.unblock(user: viewModel.blockedUsers[first]) + } + } +} +``` + +There’s nothing special in this view, it just shows the blocked users in a list, and exposes a delete action, which will remove the blocked user from the list. + +The data is populated from a `BlockedUsersViewModel`. Let’s see its implementation next. + +```swift +class BlockedUsersViewModel: ObservableObject { + + @Injected(\.chatClient) var chatClient + + @Published var blockedUsers = [ChatUser]() + + private let currentUserController: CurrentChatUserController + + init() { + currentUserController = InjectedValues[\.chatClient].currentUserController() + currentUserController.synchronize() + } + + func loadBlockedUsers() { + let blockedUserIds = currentUserController.currentUser?.blockedUserIds ?? [] + for blockedUserId in blockedUserIds { + if let user = currentUserController.dataStore.user(id: blockedUserId) { + blockedUsers.append(user) + } else { + let controller = chatClient.userController(userId: blockedUserId) + controller.synchronize { [weak self] _ in + if let user = controller.user { + self?.blockedUsers.append(user) + } + } + } + } + } + + func unblock(user: ChatUser) { + let unblockController = chatClient.userController(userId: user.id) + unblockController.unblock { [weak self] error in + if error == nil { + self?.blockedUsers.removeAll { blocked in + blocked.id == user.id + } + } + } + } +} +``` + +In the view model above, we are using the low-level client capabilities we explained at the beginning of the cookbook. + +In the UI, we also want to present the names and images of the blocked users. To do that, we need to load the `ChatUser` object based on the id. In the `loadBlockedUsers` method, we are checking if we have the user locally. If not, we create a user controller with the blocked user id, and fetch it from the backend. + +The `unblock` method is similar to the code sample we discussed above. + +## Summary + +In this cookbook we have seen the capabilities of the Stream Chat SDK for blocking users. We have also seen how to add message actions to block and unblock users, as well as a custom UI for displaying the blocked users. + +It is recommended to use these actions, in order to avoid issues during app store reviews, especially on the Apple platforms. \ No newline at end of file diff --git a/docusaurus/sidebars-ios.json b/docusaurus/sidebars-ios.json index d669c12ee07..a70ae020b05 100644 --- a/docusaurus/sidebars-ios.json +++ b/docusaurus/sidebars-ios.json @@ -101,7 +101,8 @@ "swiftui/swiftui-cookbook/list-alignment", "swiftui/swiftui-cookbook/custom-channel-list", "swiftui/swiftui-cookbook/custom-message-list", - "swiftui/swiftui-cookbook/creating-channels" + "swiftui/swiftui-cookbook/creating-channels", + "swiftui/swiftui-cookbook/blocking-users" ] }, {