我已经使用" Firebase" 在swift 4中的" JSQMessagesViewController" 的帮助下实现了一对一聊天我已将我的应用程序提交给Appstore。但是,app被拒绝并要求"用户阻止滥用用户的机制" 。
所以,我如何在swift 4中实现这个机制。我无法实现它,任何代码/建议都会更加欣赏。
提前谢谢。
答案 0 :(得分:2)
好的,可能有很多解决方案。但是我提供了用于实现块功能的过程。
1.您已为用户的每条消息创建密钥(例如“状态”)
2.当用户正在聊天时,在状态
中发送“0”3.当用户阻止其他用户发送状态为“1”的消息或空白消息时
4.这里状态“0”表示用户未被阻止,状态“1”表示用户被阻止
5.当用户收到消息时检查状态是否为“1”不要加载该消息
希望你有个主意。
答案 1 :(得分:2)
您需要的第一个是您的用户对象上的标记,类似于isBlocked
,或者您可以在Firebase
中创建一个新表,其中包含一个被阻止的用户(或ID)列表用户。您可以编写一个云函数,在返回设备之前过滤掉该信息,或者只是在设备上解析它。检查您的isBlocked
媒体资源,但不会在对话列表中显示这些内容。
第二个你需要一个入口点来实际将阻止的标志添加到用户。您可以通过多种方式实现这取决于您的设计。您可以在导航栏中添加一个按钮,向用户显示此选项
(请务必在ViewDidLoad()
)
func prepareNavbarButton() {
let button = UIBarButtonItem(image: #imageLiteral(resourceName: "conversation_Options_Image"), style: .plain, target: self, action: #selector(uploadContact))
navigationItem.rightBarButtonItem = button
}
或使用此方法的消息本身
override func collectionView(collectionView: JSQMessagesCollectionView, didTapMessageBubbleAtIndexPath indexPath: NSIndexPath!) {
super.collectionView(collectionView, didTapMessageBubbleAtIndexPath: indexPath)
presentOptions()
}
func presentOptions() {
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
actionSheet.addAction(UIAlertAction(title: "Block User", style: .default, handler: { _ in
blockUserAction()
}))
actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
}
func blockUserAction() {
//CODE TO ADD USER ID TO BLOCKED USER IN FIREBASE
}
第三,我会在“设置”页面中提供已阻止用户的列表,允许您从列表中删除人员。
我还建议您将JSQMessagesViewController
换成MessageKit,因为JSQMessagesViewController
已弃用且不会有未来的支持。 MessageKit是替代品,并且有一个任何人都可以加入的松散渠道。它也写在Swift 4
中,因此您不需要bridging-header-file
将其作为项目的一部分。它已经具有JSQMessagesViewController
的大部分功能,而且还有更多功能。
答案 2 :(得分:1)
对于JSQMessage,您可以使用提供的委托方法
override func collectionView(collectionView: JSQMessagesCollectionView, didTapMessageBubbleAtIndexPath indexPath: NSIndexPath!) {
super.collectionView(collectionView, didTapMessageBubbleAtIndexPath: indexPath)
print("Present option to block here.")
}
使用此功能,您可以获取消息索引并执行任何合适的操作