swift - Firebase 云函数 国际象棋游戏 Swift
问题描述
我正在制作一个具有 Firebase 后端的国际象棋应用程序,我正在使用云 Firestore 和云功能。基本上我正在使用节点 8 来避免云功能上的计费问题,我可以调用和触发,但我不知道如何在另一台设备上而不是我自己的设备上进行操作。
验证并登录后,用户进入一个大厅,它是一个 tableViewController,并且只显示当前登录的用户。
我想要实现的是通过点击某一行,点击它的用户会收到一个向他显示的警报,说明他是接受挑战还是拒绝挑战。基于此,我继续游戏或做其他事情。
问题是如何在其他用户的设备上触发此警报?
我还看到一些帖子可以在文档上使用 snapshotListener 来完成,但我再次遇到了理解如何在另一台设备上触发警报的问题。如果您还有其他好的想法,请分享!
感谢您的任何反馈!
解决方案
我认为快照侦听器确实是唯一的出路。您可以使用其他 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 配置为字母数字,这样两个用户之间只能存在一个请求;但是如果他们同时互相请求,一个会覆盖另一个,你必须处理那个潜在的边缘情况。有很多事情需要考虑,但这是起点。
推荐阅读
- c# - 编辑受密码保护的 Excel 二进制 (*.xls) 文件
- ajax - Ajax 不适用于移动设备
- javascript - 当我尝试在空手道中使用 javascript 时出现 gherking.lexer.lexingError
- git - 如果我们进行壁球提交,则无法确定功能分支是否与集成分支合并
- c# - ASP.NET 为整行 Datatable/Gridview 添加超链接
- postgresql - 如何使用 scala PlaySpec 和 Slick 回滚 DAO 测试
- javascript - node.js 动态模块(文件)导出
- ios - 如何将原始 NSData 以及一些 NSStrings 发布到我的服务器?
- java - 无法编写将单个字符串作为参数传递的简单步骤
- python - Python 代理请求和用户代理