在 Firebase/Swift 上为两个匹配的用户创建聊天室的首选方式是什么? [关闭]

2023-12-01

我正在努力在 Firebase 100% 上创建 Tinder 克隆,从身份验证到实时聊天。我已经成功地在消息视图控制器的表格视图上向用户展示了他们共同感兴趣的匹配项。现在我的问题在于为匹配的用户创建一个聊天室。解决这个问题最有效的方法是什么?

我是否从 Firebase 基本引用创建聊天室对象,并将聊天室分配给两个用户,并将聊天室的密钥插入两个用户?

我只是对如何去做感到困惑,因为我已经编写了代码来开始上面的想法,但是我如何确保一旦创建了聊天室,用户将始终拥有该房间,而不是拥有为他们准备了一个全新的房间?我认为我的处理方式是错误的...按照我现在的代码方式,当我运行此代码块时,聊天室将在消息视图控制器上创建:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    currentUserKey = DataService.ds.REF_CURRENT_USER.key

    DataService.ds.REF_CURRENT_USER.observeSingleEventOfType(.Value, withBlock: { snapshot in

        if let matchesInterestedIn = snapshot.value["matchesInterestedIn"] {
            if matchesInterestedIn != nil {
                for (_, value) in matchesInterestedIn as! [String: String]  {
                    self.currentUserInterests.append(value)
                }
            }
        }
    })

    DataService.ds.REF_USERS.observeSingleEventOfType(.Value, withBlock: { snapshot in

        self.admirers = [Match]()
        self.matches = [Match]()

        if snapshot != nil {
            for potentialMatch in snapshot.children {
                let potentialMatchData = potentialMatch.valueInExportFormat()
                if potentialMatchData["matchesInterestedIn"] != nil {
                    if let potentialMatchInterests = potentialMatchData["matchesInterestedIn"] as? Dictionary<String, String> {
                        if potentialMatchInterests.values.contains(self.currentUserKey) {
                            let interestedMatch = Match(snapshot: potentialMatch as! FDataSnapshot)
                            self.admirers.append(interestedMatch)
                        }
                    }
                }
            }
        }
        if self.admirers.count > 0 {
            for potentialMatch in self.admirers {
                if self.currentUserInterests.contains(potentialMatch.key) {
                    self.matches.append(potentialMatch)

                    let chatRoomInitializer = ["user1": self.currentUserKey, "user2": potentialMatch.key]
                    let chatRoomRef = DataService.ds.REF_CHATROOMS.childByAutoId()
                    let chatRoomID = chatRoomRef.key

                    // For some odd reason, the next two lines of code create an endless amount of chatroom objects from the base reference
                    let currentUserChatRoomRef = DataService.ds.REF_CURRENT_USER.childByAppendingPath("chatrooms").childByAutoId()
                    currentUserChatRoomRef.setValue(chatRoomID)

                    let potentialMatchRef = DataService.ds.REF_USERS.childByAppendingPath(potentialMatch.key).childByAppendingPath("chatrooms").childByAutoId()
                    potentialMatchRef.setValue(chatRoomRef.key)

                    chatRoomRef.setValue(chatRoomInitializer)

                }
            }
        }

        self.tableView.reloadData()
    })
}

一种常见的方法是根据该房间中的用户创建房间名称。

所以如果你的uid是ron我的是puf,我们最终来到了一个房间puf_ron.

请注意,我在连接之前对 uid 进行了排序,因此无论谁恰好在用户列表中排在第一位,它们的顺序都是相同的。

这种方法不需要跟踪用户所在的房间,并确保相同的两个(或更多)用户始终位于同一个房间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Firebase/Swift 上为两个匹配的用户创建聊天室的首选方式是什么? [关闭] 的相关文章

  • Swift 中符合协议的泛型类型

    是否可以要求泛型类型的特定实例符合 Swift 中的协议 例如 假设我有一个名为的泛型类型Thing
  • CGFloat 和 NSNumber 之间的转换,无需不必要地提升为 Double

    众所周知 CGFloat 在 CoreGraphics UIKit 等中普遍存在 可以是 32 位或 64 位浮点数 具体取决于 处理器架构 In C CGFloat它是一个类型别名 到float or double 在 Swift 中它被
  • 如何在 Firebase 上随机获取相同的数据?

    我有用户表和这段代码 getOnline 代码和连接按钮 var onlineStatus firebase database ref users firebase auth currentUser uid online onlineSta
  • 使用仪器分配时 iOS 应用程序冻结

    当我想使用 Instruments Allocation 来分析应用程序的内存使用情况时 它在启动后立即冻结 它总是停留在启动屏幕 这是一个 Xamarin forms 应用程序 这是屏幕截图 其他信息 如果我创建一个新项目 然后使用 In
  • 快速以编程方式打开 viewController

    我想通过代码在按钮上打开新的 UIViewController 我已经在故事板中制作了控制器 只想链接它 而且我不想使用 XIB 接口或 nibName 要打开新视图控制器 您需要在按钮单击事件中写入以下行 self performSegu
  • 在 Swift 2.0 中以横向模式使用 UIImagePickerController

    我正在编写一个仅限 LandScape 的 iPad 应用程序 我需要从库中拍照以发送数据库 但图像上传屏幕仅适用于纵向模式 如何将其更改为横向模式 我读过一些关于 UIPickerControllerDelegate 不支持横向模式的内容
  • Gmail 中删除了 iOS 深层链接

    我正在尝试发送一封带有深层链接的电子邮件到我的 iOS 应用程序 使用 myapp 格式从电子邮件中将其打开 它可以在任何 iOS 邮件客户端 邮件 邮箱等 中运行 即点击它打开应用程序 但不能在 Gmail 应用程序 甚至网络 中运行 因
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 尽管我没有使用 AppEngine 或 Datastore,但我无法在项目上启用 firestore

    我正在尝试在一个项目上激活 firestore 但我没有使用 AppEngine 或 Datastore 并且出现此错误消息 无法为此项目启用 Firestore 目前无法在已使用 Cloud Datastore 或 App Engine
  • 如何将一个 SwiftUI View 作为变量传递给另一个 View 结构

    我正在实施一个very自定义 NavigationLink 称为MenuItem并希望在整个项目中重用它 它是一个符合以下条件的结构体View并实施var body some View其中包含一个NavigationLink 我需要以某种方
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • Xcode 8:使用 iOS 9.3 基础 SDK 编译?

    我在 Xcode 8 0 beta 8S128d 中将 iOS 应用程序升级到 Swift 3 0 我以为一切都已准备就绪 并将其上传到 iTunes Connect 当我点击 提交审核 时 它给了我一个包含 26 个错误的列表 每个嵌入式
  • 隐藏故事板中的导航栏

    谁能告诉我如何隐藏故事板中的导航栏 我下面的代码在模拟器中运行时工作正常 但它仍然出现在我的故事板中 这真的很烦我 因为它弄乱了我的图像的位置 有人可以帮忙吗 void viewWillAppear BOOL animated super
  • 如何清理 Firebase 托管中旧的部署版本?

    每次部署到托管的 Firebase 时 都会创建一个新的部署版本 以便您可以回滚并查看部署者 这意味着每次部署的每个文件都会被存储并占用更多空间 除了手动将每个已部署的版本一一删除之外 是否有任何自动化的方法来清理那些无用的文件 你是对的
  • TestFlight Beta 中的消息不可用

    I am seeing Unavailable message in TestFLight Beta App in iOS8 Please find the attached screenshot please tell me how to
  • 如何从 UI 测试访问 App Delegate?

    我想访问特定的属性router在 UI 测试期间从启动的应用程序的应用程序委托中获取 但我不知道这是否可行 我努力了 let appDelegate UIApplication sharedApplication delegate as A
  • 如何从TableViewCell上的自定义CollectionViewCell推送VC?

    我有一个tableView和细胞 在细胞上我有一个collectionView并在其上显示一些内容 我想发送一个有关选择的链接indexPath 我想从自定义中推送 呈现我的视图CollectionViewCell这是在TableViewC
  • 自定义信息窗口上的按钮未接收 ios 中的操作

    我在 iOS 应用程序中使用 Google 地图 并实现了一个自定义信息窗口来显示标记的标题 现在 我在该自定义信息窗口上添加了一个按钮 但我的问题是按钮操作方法没有被调用 自定义信息窗口 h import
  • 使用 firebase 过滤分页列表

    我正在尝试使用 firebase 和 swift 制作一个分页过滤列表 但请随意用您最喜欢的编程语言回答 而不过滤客户端上检索到的数据 假设我有这个结构 matches match 1 name Match 1 users user 1 o
  • iOS 上 Safari 中的 shift 键

    有没有办法在javascript中判断手机键盘上是否按下了shift键 并将其与大写锁定 按两次shift键 区分开来 一些事实 首先 让我们看一下有关 iOS 键盘的一些事实 我假设您已经知道了 当您进入键盘模式时 shift键始终处于激

随机推荐

  • PreferenceActivity 中的自定义标题栏?

    我在所有活动中使用自定义标题栏 但我可以在 PreferenceActivity 中使用它 我在 PreferenceActivity 中能做的就是 Override protected void onCreate Bundle saved
  • Java中的重叠继承

    我有一个重叠的继承层次结构 系统了解可以是客户 提供商和代理的人员 一个人必须属于这些类别之一 但可以属于两个或三个 即一个人可以同时是客户和提供者 在数据库中 我认为问题已经解决 每个类一个表 人员 客户端 提供者和代理表 以及从子类表的
  • 从 Font Awesome 中提取 SVG

    我想从中获取 SVG 路径数据字体真棒字形 以便我可以在 HTML 中直接将它们用作 SVG 我认为这就像复制粘贴路径数据一样简单fontawesome webfont svg 但是当我在 HTML 中使用它时 符号全部呈现颠倒 有人知道为
  • LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值

    该网站上提出了许多与执行插入后检索 IDENTITY 相关的问题 我们获取身份的方法是在调用 SaveChanges 之后立即进行以下调用 context MyClass OrderByDescending c gt c Id FirstO
  • Angular7输入类型文件上传不起作用

    目前我正在工作 Angular Angular 7 输入类型 文件 不工作 Angular6 工作正常 Angular 6提交输入文件类型数据 我会得到这样的字段列表 但 Angular 7 只能得到这样的图像路径 只有我将 Angular
  • 使用 odeint 函数定义

    很菜鸟的问题 所以请耐心听我说 我按照这里给出的例子 gt http www codeproject com Articles 268589 odeint v2 Solving ordinary Differential equations
  • gensim - Doc2Vec:在英语维基百科上训练时出现 MemoryError

    我从英语维基百科转储中提取了 145 185 965 个句子 14GB 我想根据这些句子训练 Doc2Vec 模型 不幸的是我 只有 32GB RAM 并且得到了内存错误当尝试训练时 即使我将 min count 设置为 50 gensim
  • 未定义的类“FirebaseUser”

    我是颤振新手 我有一个问题Firebase 身份验证 Google 身份验证 The Firebase用户没有定义 代码 FirebaseAuth auth FirebaseAuth instance GoogleSignIn google
  • 字符串是不可变的,那么replace()是如何工作的呢?

    我试图用最后一个字母 字符替换字符串的第一个字母 字符 用第一个字母 字符替换最后一个字母 字符 例如 abcd gt dbca Java 中的字符串是不可变的 那么我们如何解释这个程序的行为呢 请看一下最终输出 str1 没有字符 a 但
  • R 中的分层随机抽样

    我正在努力使用具有 3078 个观察值的分层随机抽样来创建大小为 100 的分层样本 分层随机抽样必须满足的条件是 FARMS92600 为 分层 并采用比例分配 当我遵循分层函数时 我不明白如何继续 https gist github c
  • 如何在 SwiftUI 中检测点击手势位置?

    适用于 SwiftUI 而不是普通 UIKit 非常简单的示例代码 例如在灰色背景上显示红色框 struct ContentView View State var points CGPoint CGPoint x 0 y 0 CGPoint
  • 如何应用将向量返回到每个 numpy 数组元素的函数(并获取更高维度的数组)

    我们直接用代码写吧 注意 我将映射器 原始示例使用 x gt x 2 x 3 x 仅作为示例 编辑为通用黑盒函数 这导致了麻烦 import numpy as np def blackbox fn x I can t be changed
  • 将 Symfony2 缓存存储在其他地方?

    有没有办法将 symfony 2 缓存 应用程序 缓存 存储在文件系统以外的其他地方 Memcache S3 还是其他什么 有内置选项吗 您只能通过重载 AppKernel 类中的 getCacheDir 方法将其移出项目目录 将其移至 M
  • 为 UIWebView 请求设置 Cookie

    我想嵌入一个UIWebView进入我的 MonoTouch 应用程序中尚未本地实现的区域 为了对网站进行身份验证 我想设置一个包含当前会话密钥的 cookie 我尝试创建一个NSDictionary与 Cookie 的属性 然后创建一个新的
  • 是否可以修补 File::Find::Rule 以自动处理文件名字符编码/解码?

    假设我有一个名为 UNICODE 0xE6 UTF8 0xC3 0xA6 在当前目录中 然后 我想用File Find Rule找到它 use feature qw say use open qw std utf8 use strict u
  • CMake:在静态库中包含库依赖项

    我正在构建一个staticCMake 中的库 它依赖于许多其他静态库 我希望它们全部包含在输出 lib a 文件中 这样我就可以向客户发送一个大的 lib 文件 在 Visual Studio 2010 中有一个选项 链接库依赖关系 它正是
  • 根据滚动逐渐改变背景颜色

    我有一个滚动视图 当它向下滚动时 背景颜色会改变 我知道我可以使用 UIView 动画来实现此自动化 但我想根据滚动的百分比设置颜色 我想设置 0 和 100 颜色 并且当前颜色将被计算并设置为scrollViewDidScroll 0 5
  • Python中访问类变量的性能

    我想知道访问类变量 字典 时性能是否有任何差异在同一个类的方法内 using self class variable dict add some key some value and ClassName class variable dic
  • 如何将服务器响应日期转换为本地时区?

    在 api 调用响应中 我得到了不同时区的日期 我想将其转换为用户的本地时区 并且用户可以从 ios 时区列表中选择任何时区 这都是本地的 我们永远不会将选定的用户时区发送到服务器 在进行任何 api 调用时 假设我正在创建一个事件 并在选
  • 在 Firebase/Swift 上为两个匹配的用户创建聊天室的首选方式是什么? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在努力在 Firebase 100 上创建 Tinder 克隆 从身份验证到实时聊天 我已经成功地在消息视图控制器的表格视图上向用户展示了他们共同感兴趣的匹配项 现在我的问题