Firebase云功能国际象棋游戏Swift

时间:2020-09-26 18:23:42

标签: swift google-cloud-firestore google-cloud-functions

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

经过身份验证和登录后,用户进入一个大厅,该大厅是一个tableViewController,仅显示当前登录的用户。

我想要实现的是,通过点击某行,点击了该行的用户会得到一个警告,提示他是否接受挑战或拒绝挑战。基于此,我继续游戏或做其他事情。

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

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

感谢您的任何反馈!

1 个答案:

答案 0 :(得分:0)

我认为快照监听器确实是唯一的方法。您可以使用其他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配置为字母数字,以便两个用户之间只能存在一个请求;但是,如果他们同时要求对方,则对方会覆盖对方,并且您必须处理这种潜在的边缘情况。有很多事情要考虑,但这是起点。