Follow Anchor

功能介绍

在语聊场景下,关注主播功能是一种重要的互动方式,它允许观众选择关注特定的主播,从而在直播平台上建立长期的互动和关注关系。TUILiveKit 中已经通过 Chat 实现了关注主播的功能。
关注 功能允许用户选择他们感兴趣的其他用户,以便及时获取这些用户最新的动态、发布或活动信息,您可以根据用户的关注列表提供个性化的内容推荐。
粉丝 功能是指用户被其他人关注的状态,当用户 A 关注用户 B 时,A 就成为了 B 的粉丝。
通过关注和粉丝功能,社交应用和网站能够创建一个活跃的、相互连接的用户网络,促进信息的传播和社区的构建。

使用说明

说明:
TUILiveKit 的关注主播功能依赖于 Chat 的关注&粉丝相关的 API,所以需要开通 Chat 相关的套餐包。具体可参见 关注&粉丝 文档。
未关注状态
关注状态
主播信息面板









关注主播:您可以在直播界面的左上角的直播间信息区域点击

按钮关注主播
取消关注:您可以在直播界面的左上角的直播间信息区域点击

按钮可以取消关注主播
查看主播粉丝数:您可以点击直播界面左上角的直播间信息区域弹出直播间详情面板,该面板会展示主播的粉丝数量

功能定制

如果当前的 UI 不满足您的需求,您可以通过修改TUILiveKit/iOS/TUILiveKit/Source/Common/View目录下的源代码,来实现您满意的 UI 效果。为了您更方便的定制 UI,这里对关注功能相关的文件做了介绍。
// 文件位置:TUILiveKit/iOS/TUILiveKit/Source/Common/View/

View // 直播间信息UI组件的实现目录
├── RoomInfoPanelView.swift // 直播间信息详情面板视图的具体实现
└── RoomInfoView.swift // 直播间信息视图的具体实现,点击该视图,会展示详情面板视图

关键代码

关注主播

Swift
// 文件位置:TUILiveKit/iOS/TUILiveKit/Source/Service/UserService.swift

func followUser(userId: String) -> AnyPublisher<Bool, InternalError> {
return Future<Bool, InternalError> { [weak self] promise in
guard let self = self else { return }
self.imManager?.followUser([userId]) { result in
promise(.success(true))
} fail: { err, message in
let error = InternalError(error: TIMError.invalidUserId, message: TIMError.invalidUserId.description)
promise(.failure(error))
}
}.eraseToAnyPublisher()
}

取消关注主播

Swift
// 文件位置:TUILiveKit/iOS/TUILiveKit/Source/Service/UserService.swift

func unfollowUser(userId: String) -> AnyPublisher<Bool, InternalError> {
return Future<Bool, InternalError> { [weak self] promise in
guard let self = self, let imManager = self.imManager else { return }
imManager.unfollowUser([userId]) { result in
promise(.success(true))
} fail: { err, message in
let error = InternalError(error: TIMError.invalidUserId, message: TIMError.invalidUserId.description)
promise(.failure(error))
}
}.eraseToAnyPublisher()
}

查看主播关注状态

Swift
// 文件位置:TUILiveKit/iOS/TUILiveKit/Source/Service/UserService.swift

func checkFollowType(userId: String) -> AnyPublisher<V2TIMFollowType, InternalError> {
return Future<V2TIMFollowType, InternalError> { [weak self] promise in
guard let self = self, let imManager = self.imManager else { return }
imManager.checkFollowType([userId], succ: { result in
guard let followType = result?.first?.followType else { return }
promise(.success(followType))
}, fail: { err, message in
let error = InternalError(error: TIMError.invalidUserId, message: TIMError.invalidUserId.description)
promise(.failure(error))
})
}.eraseToAnyPublisher()
}

获取粉丝数量

Swift
// 文件位置:TUILiveKit/iOS/TUILiveKit/Source/Service/UserService.swift

func fetchFollowersCount(userId: String) -> AnyPublisher<Int, InternalError> {
return Future<Int, InternalError> { [weak self] promise in
guard let self = self, let imManager = self.imManager else { return }
imManager.getUserFollowInfo([userId], succ: { followInfo in
let followersCount = Int(followInfo?.first?.followersCount ?? 0)
promise(.success(followersCount))
}, fail: { err, message in
let error = InternalError(error: TIMError.invalidUserId, message: TIMError.invalidUserId.description)
promise(.failure(error))
})
}.eraseToAnyPublisher()
}