【问题标题】:Implementing Stories feature in Android在 Android 中实现 Stories 功能
【发布时间】:2020-09-06 16:23:57
【问题描述】:

我想在 Facebook 或 WhatsApp 中实现类似于 Stories 功能的功能。

可能的方法

  1. 起初,我想打开一个网络套接字,以便接收最新的 Stories 更新(来自朋友的新故事,或者如果故事被删除)。

  2. 还有另一种选择 - 使用 FCM 推送获取这些更新。 接收推送的服务使用 LocalBroadcastManager 广播“新故事”/“故事删除”广播,并且注册到此广播的合适活动接收该更新。

使用推送的方式,意味着即使应用被杀死,推送仍然可以触发。 好像有点浪费。

但考虑到可能会出现连接慢、掉线等问题,websocket 也是相当“脆弱”的。

另外,如果故事的 24 小时到期,我如何确保始终从故事列表视图中删除该故事而不继续显示它? 使用套接字,我们可能会失去连接。如果我们应该在收到故事时间到期的通知后重新连接,我们仍会显示该故事。

【问题讨论】:

    标签: android sockets websocket firebase-cloud-messaging


    【解决方案1】:

    只需将故事及其创建日期存储在某种数据库中即可。然后,客户端可以定期获取新故事。客户端可以根据创建日期计算故事的年龄并决定是否显示。

    如果客户看过一个故事,他可以将该信息存储在本地存储中,以便观看的故事可以显示为旧故事。

    现在对于清理部分,有两个选项。您可以编写一个 24/7 全天候在服务器上运行的程序,该程序就像客户端一样,定期从数据库中获取故事,检查它们的年龄并删除那些太旧的故事。另一种方法将使用相同的概念,但所有普通客户端都会从数据库中删除旧故事。

    不过,第二个选项非常不安全,因为年龄计算可能在客户端被操纵,无论是错误的还是攻击者。

    【讨论】:

    • 感谢您的回复。 1.您的方法意味着客户必须使用轮询,即 - 定期检查是否有任何故事更新。这就是为什么我更喜欢 websocket 方法,以避免轮询,并获得近实时的更新。 2.关于将日期存储在本地数据库中 - 这些创建时间必须由客户端转换为他们设备的时区?这里可能存在时间同步挑战,不是吗?正如你所说 - 用户可以操纵日期(或时区可能发生季节性变化),我不太明白如何解决这个问题?
    • 嗯,创建客户端已经可以计算过期日期并将其与时区信息一起保存,查看客户端可以毫无问题地将其转换为他的本地时区。关于实时更新,您仍然可以在应用程序在线时实现 FCM 或 Sockets 之类的东西,以通知客户端他必须从数据库中获取
    • 如果用户改变了他的时间,例如将它设置回几个小时,我认为时区计算在这里是无关紧要的
    • 即使只有两个用户,一个创建者和一个查看者,假设他们都检查故事是否过期并删除它们,两个用户都必须更改相同数量的时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多