为你的Android应用程序添加聊天SDK的消息计数器
随着2020年4月聊天SDK v2的发布,许多人可能会问浮动消息计数器去哪了。在Chat SDK v1中,计数器会显示用户在没有出现在Chat屏幕上的情况下收到了多少条新消息。我们决定在Chat SDK v2中摆脱这种模式,原因有很多。主要原因是在应用程序中直接提供浮动按钮会导致许多设计问题,这很快就会让集成商难以解决。
但也有好消息。聊天SDK v2有能力检索数据,您需要创建自己的消息计数器按钮使用以下步骤为Android。
开始
本教程假设您已经了解了Chat SDK是如何嵌入和实现的。如果你之前没有嵌入SDK,快速入门指南和文档在继续学习教程之前可以使用这亚博电脑端些很好的资源。
方法中的以下代码的简要演练chat_v2_message_counter_sampleGitHub上的app:示例代码.
观察聊天状态
考虑下面的代码块:
公共UnreadMessageCounter(UnreadMessageCounterListener UnreadMessageCounterListener){
这.unreadMessageCounterListener=unreadMessageCounterListener;
闲谈,聊天.实例.供应商().chatProvider().observeChatState(新ObservationScope(),新观察者<ChatState>(){
@覆盖
公共无效更新(ChatState ChatState){
如果(chatState! =零& &!chatState.getChatLogs().isEmpty()){
如果(shouldCount& &lastReadChatLogId! =零){
updateCounter(chatState.getChatLogs(),lastReadChatLogId);
}
lastChatLogId=chatState.getChatLogs().得到(
chatState.getChatLogs().大小()-1
).getId();
}
}
});
}
class在类构造函数中包含ChatState观察器的实现。只要ChatState处于活动状态,这个观察者就会发布对ChatState所做的任何更改的更新。
您可以使用它来跟踪传入的聊天日志并更新计数器,同时还可以跟踪最后收到的消息ID。
连接到websocket
下一个也是最重要的部分是确保当MessagingActivity不再显示时,您有一个到WebSocket的打开连接。的代码示例上面的链接使用了一个非常简单的方法来启动计数器逻辑,将最近收到的聊天日志保存为最后一次读取,并打开web套接字连接。
公共无效startCounter(){
shouldCount=真正的;
lastReadChatLogId=lastChatLogId;
闲谈,聊天.实例.供应商().connectionProvider().连接();
}
我们目前没有提供任何UI生命周期事件,所以从你自己的应用程序中调用这个方法将取决于你的实现,而不是来自生命周期观察者的更新。
一旦连接激活,websocket将继续接收消息,就像聊天活动已经启动一样。
请注意:当套接字打开时,您将不会收到推送通知。
统计未读消息
一旦您有了一个活动WebSocket连接和一个接收ChatState更改的观察者,您就可以跟踪自用户上次看到Messaging屏幕以来收到的消息数量。
同步私人无效updateCounter(列表<ChatLog>聊天记录,字符串lastReadId){
为(ChatLogchatLog:聊天记录){
如果(chatLog.getId().=(lastReadId)){
int lastReadIndex=聊天记录.indexOf(chatLog);
列表<ChatLog>unreadLogs=聊天记录.子表(lastReadIndex,聊天记录.大小()-1);
unreadMessageCounterListener.onUnreadCountUpdated(unreadLogs.大小());
打破;}
}
}
该示例在聊天日志列表中找到最后一次读聊天日志的索引,并创建自那时以来收到的所有日志的子列表。然后,它将该子列表的大小发布给侦听器。
扩展此实现
应该可以扩展这个简单的实现来满足您自己的需求。当未读计数器被增加时,你可以使用Android的LiveData接口向观察者发布更新。你也可以使用后台服务来控制到WebSocket的连接。但是,这些超出了本指南的范围。希望这里的基本实现将帮助您实现更复杂的版本,以满足您的需求。