微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何获取未读消息的数量PubNub

嘿,我正在使用pubnub服务为我的Titanium App添加聊天功能,但我想知道是否有办法获取未读消息的数量.
在api引用上没有关于此的信息

我试图在历史中保存消息的数量,然后重新加载新的历史记录并计算差异,但它是如此愚蠢和复杂的解决方案,任何人都知道如何实现这一目标?
谢谢

解决方法

跟踪PubNub上的已读/未读消息

多年前我们承诺,我们会在您的应用中使用非常简单的方法来跟踪未读消息计数.
现在终于有可能了!
使用PubNub Functions,
您可以将永久状态对象和值添加到多设备应用程序中.
您将使用PubNub Functions Key / Value Storage引擎中提供的原子方法.
PubNub功能存储引擎(kvstore)被复制到每个数据中心,使其快速可靠地存储/检索数据.

您只需要创建一个函数来递增,递减和检索未读消息的当前计数.

计算未读邮件

我们的函数将计算发送到通道的消息并使用原子递增和递减方法使用以通道和用户ID命名的键来保存值.
这是一种称为“传统命名空间”的实用设计模式.
这意味着您将使用消息中的提示和信息来创建基于消息中的信息可构造的名称.
我们将在此示例中使用通道名称作为常规名称间距.

一个函数将递增一个值以跟踪用户收件箱中的未读消息.

增加和减少未读消息计数器

Channel: room.*

Event: On-Before Publish

// Access to distributed Database
const db = require('kvstore');
export default (request) => { 
    // Conventionally build the Key ID based on the request parameters and channel name.
    let counterId = request.channels[0] + '/' + request.params.uuid;

    // Increment or Decrement the unread message counter
    let method = request.message.read ? -1 : 1;

    // Increment/Decrement and read the unread message counter
    return db.incrCounter( counterId,method ).then(()=>{
        return db.getCounter(counterId).then((counter) => {
            request.message.unread = counter || 0;
            return request.ok();
        });
    });
}

现在发布到此通道层次结构室的任何JSON消息.*将通过递增计数器来跟踪未读消息.
可以通过包括读标志来递减计数器.
如果需要,该读取方法也可以用作读取收据跟踪系统.
您可以在Adam Bavosa的文章中了解有关读取收据的更多信息:Read Receipts Pattern for Realtime Chat Apps.

使用计数器

将消息发布到room.john-smith,如下所示:

{ "message" : "Hello John!" }

John将收到您的消息,并在消息中添加未读消息计数器.
该消息将使用未读变量进行扩充.
现在消息看起来像这样:

{ "message" : "Hello John!","unread" : 1 }

约翰可以通过发布回复收据回复

{ "read" : true }

该消息将使用未读计数器更新已读回执.

{ "read" : true,"unread" : 0 }

而已!你做到了.模式将根据组和一对一消息传递应用程序进行更改.

原文地址:https://www.jb51.cc/js/158111.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐