首页 > 解决方案 > Firebase 云函数 国际象棋游戏 Swift

问题描述

我正在制作一个具有 Firebase 后端的国际象棋应用程序,我正在使用云 Firestore 和云功能。基本上我正在使用节点 8 来避免云功能上的计费问题,我可以调用和触发,但我不知道如何在另一台设备上而不是我自己的设备上进行操作。

验证并登录后,用户进入一个大厅,它是一个 tableViewController,并且只显示当前登录的用户。

我想要实现的是通过点击某一行,点击它的用户会收到一个向他显示的警报,说明他是接受挑战还是拒绝挑战。基于此,我继续游戏或做其他事情。

问题是如何在其他用户的设备上触发此警报?

我还看到一些帖子可以在文档上使用 snapshotListener 来完成,但我再次遇到了理解如何在另一台设备上触发警报的问题。如果您还有其他好的想法,请分享!

感谢您的任何反馈!

标签: swiftgoogle-cloud-firestoregoogle-cloud-functions

解决方案


我认为快照侦听器确实是唯一的出路。您可以使用其他 Firebase 服务,但这些服务不适合这项工作。考虑创建一个集合,也许称之为请求:

[requests]
    <userId-userId> (recipientUserId-initiatorUserId)
        initiator: string
        recipient: string
        date: date

每个用户都有一个快照侦听器来侦听此集合,其中他们自己的 userId 等于recipient。例如,您可以添加一个日期字段以按最近对列表进行排序。当一个用户想要挑战另一个用户时,他们需要做的就是在这个集合中创建一个文档:

<userId-userId> (recipientUserId-initiatorUserId)
    initiator: myUserId
    recipient: theirUserId
    date: now

收件人的客户将立即看到此文档。

您可以在此文档中包含着装数据,例如发起人的显示名称或他们头像的路径。但是这些数据在渲染时可能已经过时,因此另一种方法是使用 userId 从数据库中获取修整数据。您也可以自动生成文档 ID,但如果您配置它(像这样),它可以使删除等操作更简单。您还可以将 userIds 配置为字母数字,这样两个用户之间只能存在一个请求;但是如果他们同时互相请求,一个会覆盖另一个,你必须处理那个潜在的边缘情况。有很多事情需要考虑,但这是起点。


推荐阅读