聊天室App 开发:初识Agora 信令 SDK

社会高度发展的今天,大家都离不开社交和社交网络。近几年,直播行业的稳定高速发展,背后隐藏一个事实,大家需要一个实时性更高的互联网环境,就像面对面沟通那样的及时有效。

这次尝试了一下 Agora Signaling SDK。

初识 Agora Signaling

Agora Signaling 是Agora 全家桶一员,主要用来实现即时点对点通信。Agora Signalling 是作为插件的形式服务于 Agora 全家桶,也可以单独用于实时消息通信的场景。

SDK

Agora 的 SDK 适配的常见的开发环境。端上、server,各种运行环境都有demo可供参考。

SDK 传送门

https://docs.agora.io/cn/Signaling/downloads

文档

Agora 官网已经提供了比较完善的文档资料。

以 Agroa Signaling 为例,我们可以看到官网分别就客户端集成和服务端集成进行了介绍,而客户端部分又针对常见客户端实现进行的清晰简单的讲解。

拥有一定开发经验的攻城狮很快便能上手。

当然我们也发现一个问题,文档上只有 quick start, 没有进一步介绍接口使用的注意事项。带着这个疑惑,笔者迅速浏览了API参考部分,所有接口都没有提供具体的demo code 和注意事项。

基本接入思路

  1. 初始化
创建实例

getInstance

回调设置

callbackSet
  1. 登录
login2
  1. 点对点消息
发消息

messageInstantSend

收消息

onMessageInstantReceive
  1. 频道消息
进频道

channelJoin

发频道消息

messageChannelSend

收频道消息

onMessageChannelReceive

离开频道

channelLeave
  1. 呼叫邀请
发起呼叫邀请

channelInviteUser2

接受呼叫邀请

channelInviteAccept

拒绝呼叫

channelInviteRefuse

结束呼叫

channelInviteEnd
  1. 注销
logout

demo

Agroa 官网提供了关于 Agora-Signaling 的各种demo,初略浏览一番,比较容易看懂,没有什么很奇怪的写法。

但是,这些demo都有一个问题,没有注释。这对不曾接触Agora产品的新手不是特别友好,可能要花比较多精力来熟悉这些接口。

可能的一些应用场景

通过Agora 官网及已经公布的API 。我们可以了解到,常见带身份信息的文本聊天完全不在话下,基于Agora Signaling的demo,我们只要关心一下自己的业务模型,端上套个皮就能实现聊天室、留言板等互动交流场景。

直播间的弹幕聊天

直播间聊天和弹幕聊天,本质上就是一个留言板和即时通讯的合体。而Agora Sinaling 本身就是为实时通信互动而生,实现这样的功能只要加一个聊天数据库来保留历史记录即可。

医患远程诊断

现实生活中,受距离、时间、心理等诸多因素影响,病患并不一定能及时到达医院,医生也未必能及时到达现场,这时候及时通讯网络可以提供诸多方便。病患或病患家属可以通过一个App 将患情通过 影像、声音、文字传递给医生,同时可以随时的沟通,就像现场问诊一样,病患可能也需要一个病友群或频道来分享交流。

消息通知

相信大家对手机短信、微信消息、qq消息都不陌生,我们借助 Agora Sinaling 也是可以实现简单版本的网络短信功能的。

客服功能

有些产品可能需要一个客服功能,这样遇到使用问题时,可以随时通过聊天窗口咨询,而且不需要额外的添加客服人员的微信。有效沟通,同时保护彼此隐私。

实时性比较高的设备间通信

比如我在A省有一批矿机,需要及时的了解机房状况,那么我在机房可以设置一个通信机,将采集到的数据通过 Agora Signaling 及时传回并记录在数据库。虽然这个场景可能并不是Agora Signaling 设计初衷,但作为一种可行的备选也是不错的。

Mooc 课堂在线互动

各种mooc 学堂的远程授课方案,包括远程考试等, 课堂互动可不局限于文字、语音、图像,通常要结合起来。

直播导购互动

如果有这样一种直播活动,画面上和电视导购没什么区别,但是可以通过更方便的方式下单,扫码,沟通,填写信息,付款,获取订单状态,以及端上的现场互动等。

科研领域

需要远程采集观测的各种数据等。实验展示等。实验数据实时采集处理等。

几乎能想到的任何需要 实时通信、点对点通信、或者分频道通信的场景,都尝试着去实现。

下一篇会分享一下个人的尝试过程,以及里面遇到的一些问题和应对方法。

1赞

你好,关于弹幕聊天,您说加一个聊天数据库来保存数据库即可,
请问服务器端怎么获取所有的用户的发言记录呢?

1赞

您好,
以channel 消息为例,可以调用
onMessageChannelReceive

具体怎么做数据持久,你可以集成你习惯的orm来做数据操作。也可以挂上redis之类

目前并没有发现有接口可以直接获得全部消息。

目前,我探索到的程度,信令可以完成手法,登陆,聊天室信息维护,用户信息维护的,但是并没有缓存全部聊天记录。

所以,自己搭建聊天室的话,需要自行实现数据持久

多谢。
onMessageChannelReceive 好像只能收到频道内的广播信息,有办法监听或者获取用户之间的点对点聊天信息吗?

这里要 @DiDa 官方的技术支持。帮忙看下 @wawa8900 的疑问,谢谢

点对点的可能是这个

public void onInviteMsg(Signal.LoginSession session, Signal.LoginSession.Call call, String extra)

具体得咨询一下官方技术大佬了

这没有方法监听的;除非你们自己将用户发送的消息保存起来

1赞

参考demo写吧。

这里override了 对应的消息事件。你可以把持久化数据放到里面。demo中已经有对应的数据结构,

    @Override
    public void onMessageChannelReceive(Signal.LoginSession session, Signal.LoginSession.Channel channel, String account, int uid, String msg) {

        if (currentChannelDialogueRecords != null && currentStatus == DialogueStatus.CHANNEL) {
            PrintToScreen.printToScreenLine(account + ":" + msg);
            DialogueRecord dialogueRecord = new DialogueRecord(account, msg, new Date());
            currentChannelDialogueRecords.add(dialogueRecord);
        }

    }

注意看这里

     DialogueRecord dialogueRecord = new DialogueRecord(account, msg, new Date());
     currentChannelDialogueRecords.add(dialogueRecord);

你可以在这个Override里加上自己存消息的业务, 点对点通信的也是一个道理


相关阅读:

弹幕的发言记录属于历史消息,这个也只是当收到频道消息时add每条消息保存起来,之前的消息是无法拿到的

没错,是这样的,需要自己实现存储。

弹幕有的为历史弹幕,比如电视剧的和短视频弹幕,这种是需要全部将历史消息保存起来的,需要自己实现。还有一种时实时弹幕,比如直播的弹幕,是不需要拿历史消息的

1赞

对的,是这样。有些没有回放的,不用存历史消息的。

实际上,目前,信令server端最方便的使用场景是做消息通知。聊天室之类的想要实现消息记录都需要自己实现。