【问题标题】:Firebase cloud functions chess game SwiftFirebase 云函数 国际象棋游戏 Swift
【发布时间】:2023-04-07 01:49:01
【问题描述】:

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

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

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

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

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

感谢您的任何反馈!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,在我提出问题后我已经想通了,但是这个想法比我的要好一些,与我最初的问题无关,您在致电 db 时遇到过问题吗? collection(a).document(id).getDocuments 它什么也没做?它没有显示错误,什么也没有,甚至没有进入闭包而只是退出了方法?
    • 您不能在单个文档上getDocuments,您只能从集合中获取文档s。相反,您不能在集合中getDocument,只能在文档中。
    • 对不起,这是我的问题中的错字,我在我的代码中最后没有 s 的 db.collection(a).document(id).getDocument 什么都不做,没有错误只是不去进入关闭状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多