获取Firebase中每封邮件的个人资料图片的最佳方式

时间:2017-06-16 07:37:56

标签: ios swift firebase firebase-realtime-database chat

我有以下情况,我聊天并使用Firebase作为后端,我想找到解决下一个问题的最佳解决方案。如果群聊是打开的,则每个传入的消息都应具有发件人配置文件图像。聊天分为三种结构,即会话,用户对话和消息模型。消息模型仅包含senderID,因为我发现不建议存储profileImageURL,因为用户可以更改头像。我想到的第二个选项是将profileImageURL保存在Conversation模型中,当用户更改头像以使用云功能更改它时,这将起作用,但由于资源成本(例如,如果用户),这是一个非常糟糕的决定有300次对话,他每天都会改变头像。请告诉我,这种情况的最佳方法是什么?

消息模型

 "-KmfKFxY2BsLjpGixowG" : {
        "conversationID" : "-KmfK4m1t2nDKFX_MZr8",
        "creationTimeStamp" : 1.497523097283577E9,
        "id" : "-KmfKFxY2BsLjpGixowG",
        "senderID" : "xpyM19QVjJTgrtdntlbcJPkb0jB2",
        "sendingStatusIndex" : 0,
        "textMessage" : "3reds",
        "typeIndex" : 0
      },

会话模型

"-KmfK4m1t2nDKFX_MZr8" : {
        "id" : "-KmfK4m1t2nDKFX_MZr8",
        "lastMessage" : {
          "conversationID" : "-KmfK4m1t2nDKFX_MZr8",
          "creationTimeStamp" : 1.497591480636771E9,
          "id" : "-KmjP72nyEJUX7yQmwYp",
          "senderID" : "AoG6HmxXE8ahAESx98C2UZ0ieAh1",
          "sendingStatusIndex" : 0,
          "textMessage" : "C",
          "typeIndex" : 0
        },
        "typeIndex" : 0,
        "userAcitivities" : [ {
          "removedChatTimeStamp" : 0,
          "userID" : "xpyM19QVjJTgrtdntlbcJPkb0jB2"
        }, {
          "removedChatTimeStamp" : 0,
          "userID" : "AoG6HmxXE8ahAESx98C2UZ0ieAh1"
        } ]
      }

用户对话模型

 "AoG6HmxXE8ahAESx98C2UZ0ieAh1" : {
        "-KmeqR8RYXo-5Pt0gue1" : {
          "friendID" : "QscqImQoCGdAciaVMoRJN35KjEH2",
          "id" : "-KmeqR8RYXo-5Pt0gue1",
          "removedChatTimeStamp" : 0,
          "typeIndex" : 0
        },

更新说明

您好!我正在聊天! Firebase用作后端。问题是如何在群聊中最好地上传用户图像。消息模型当然在应用程序中有一个senderID。在每个单元格中出现的最糟糕的选项(我将不会使用它)是查询最新的URL并使用Kingfisher加载和缓存图像。启动应用程序/聊天时的第二个选项是更新或上传聊天室中可用的所有用户的头像,但这里存在两个问题。第一个问题,如果聊天将是50,并且在50个用户的每次聊天中,那么一次做2500个查询也不是一个选项。第二个问题,如果以某种方式避免,很多请求,那么从这些数据中可以创建一个字典并将其传输到一个单元格,并由senderID获取Kingfisher的实际网址,但我认为它&#39太可怕了,Plus可以说性能。这个或那个基于firebase的聊天最简单的例子。

还有几种选择,但它们都很糟糕。你能告诉我这样做最好吗?或者在哪里查找和阅读这个"模块的正确架构"。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题如下,当打开ChatViewController时,我使用云函数请求所有用户图像的链接,我在应用程序中获得了准备字典[userID:userAvatarPath]。

{'A': [<generator object <genexpr> at 0x7f998d0640f0>], 'C': [<generator object <genexpr> at 0x7f998d064140>], 'B': [<generator object <genexpr> at 0x7f998d0640a0>], 'D': [<generator object <genexpr> at 0x7f998d064050>]}