如何在swift 4中使用JSQMessagesViewController帮助用户使用firebase阻止滥用用户的机制

时间:2017-12-04 06:33:19

标签: ios swift firebase jsqmessagesviewcontroller

我已经使用" Firebase" 在swift 4中的" JSQMessagesViewController" 的帮助下实现了一对一聊天我已将我的应用程序提交给Appstore。但是,app被拒绝并要求"用户阻止滥用用户的机制"

所以,我如何在swift 4中实现这个机制。我无法实现它,任何代码/建议都会更加欣赏。

提前谢谢。

3 个答案:

答案 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.")
}

使用此功能,您可以获取消息索引并执行任何合适的操作

  • 演示屏幕或任何操作
  • 您需要获得要阻止的USERID