程序员的硬核浪漫 — 女友专属语聊房(内附源码)

1,148 阅读6分钟

人人都说找个程序猿做男朋友就是好,钱多话少 over 早。  

额。。。估计小编把文章发布出去后就要被公司的程序猿同胞们疯狂逮捕挨打了。  

虽然日常生活中大家对程序猿的标签大多是呆板、木讷、不懂浪漫,格子衫牛仔裤和黑框眼镜,整天宥与Coding(脱发),哪怕是红酒蜡烛鲜花围绕,一个告警也要立刻掏出电脑处理 。

不过但是说起程序猿的浪漫,逼格自然少不了,代码表白更是身为一名专业程序猿的必备技能。

就比如这句:

—— 遇你天长地久,失你度日如年。  

while True:
    if meet_you: life++
    else: life--

小刘是某公司程序员,每次都有新花样的他,今年女友生日计划再来点不一样的。

联想到年初clubhouse火热,女友求尽了朋友圈好友,可还是一码难求。

于是,一个奇奇怪怪的灵感涌现了 —— 做个语聊房送她!!!

既可以讲一些悄悄话,还可以让她和好友在里面聊天,真是一举两得啊!程序员,追求的就是氛围感拉满!

了解到即构最近也做了语聊房产品,于是我登陆即构官网尝试自己动手试一下,搭建一个语聊房。下面是详细的步骤,大家跟我一起看看吧!

一、开始准备

首先,在开始实现语聊房场景的 demo 之前,我们需要做一些开发前的准备工作:

1、开发环境准备:(以 android 为例)

  • Android Studio 2.1 或以上版本
  • Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本
  • Android 4.1 或以上版本,且支持音视频的 Android 真机设备
  • Android 设备已经连接到 Internet

2、账户注册:

开发环境搭建好之后,我们需要去 ZEGO 官网注册一个账户,进入管理控制台并创建应用、获取开发需要的 AppId 和 AppSign 。

具体的创建应用过程详见此文章: 控制台创建项目流程。控制台项目管理 - 开发者中心 - ZEGO即构科技

二、实现流程介绍

ZEGO 即构科技最近为了开发者能快速实现语聊房业务,特地封装了基于 Express SDK 和 ZIM SDK 的语聊房 SDK(ZIMChatRoom),所以我们能够快速接入语聊房所需要的业务功能,做到开箱即用。

同时,语聊房 SDK 是全开源提供的,那么我们还可以基于实际业务逻辑对源码进行定制化修改,可以说是相当贴心了!!!  

这里,需要先获取ZIMChatRoom 语聊房的示例源码,下载地址:storage.zego.im/ZIMChatRoom…

接下来,我们就要基于 ZIMChatRoom 实现语聊房最核心的业务逻辑。  

1、初始化

首先第一个步骤是初始化,而初始化所必须的 App 配置需要联系 ZEGO 技术支持获取。

Long appID = 214124124L;  // 联系 ZEGO 销售或售前工程师配置
String appSign = "xxx";   // 联系 ZEGO 销售或售前工程师配置
// 最后一个参数 application 指的是运行 ZIMChatRoom 的 Application 对象
ZIMChatRoom.getInstance().init(appID, appSign,this);
// 注册回调事件
ZIMChatRoom.getInstance().setZIMChatRoomEventHandler(new ZIMChatRoomEventHandler() {
    ......
});

2、用户登录

在登录IM业务时,我们需要使用 Token 鉴权的方式登录。ZIM 的鉴权 Token 详细获取方式可以参考 使用 Token 鉴权(Android即时通讯使用 Token 进行登录鉴权 - 开发者中心 - ZEGO即构科技)。

用户登录的代码如下:

ZIMChatRoomUserInfo user  = new ZIMChatRoomUserInfo();    // 设置user 的相关属性    
user.setUserID("USER_ID");    
user.setUserName("USER_NAME");   
String token = "xxx";  // 需要获取 
ZIMChatRoom.getInstance().login(user, token, new LoginCallback() {             
    @Override    
    public void onLogined(ZIMChatRoomErrorCode error) {    
    // 登录情况回调    
    } 
});

3、创建语聊房

 

做好了前边的流程,接下来就可以开始创建房间:(这里要补一个 RTC Token 的获取流程:开发者中心 - 即构科技)  

ZIMChatRoomInfo roomInfo = new ZIMChatRoomInfo();
// 根据需要设置房间的各种属性
roomInfo.setRoomID("ROOM_ID");
String rtcToken = "xxx";  // 需要获取 RTC Token
ZIMChatRoom.getInstance().createChatRoom(roomInfo, rtcToken, new CreateChatRoomCallback() {
   @Override
   public void onChatRoomCreated(ZIMChatRoomErrorCode error) {
       // 创建房间情况
   }
});

4、观众加入

房间搭建完毕,我们就可以先加入到房间:(这里要补一个 RTC Token 的获取流程:开发者中心 - 即构科技)  

String roomID = "ROOM_ID";
String rtcToken = "xxx";  // 需要获取 RTC Token
ZIMChatRoom.getInstance().joinChatRoom(roomID,rtcToken,new JoinChatRoomCallback() {
   @Override
   public void onChatRoomJoined(ZIMChatRoomErrorCode error) {
       // 加入房间情况
   }
});

5、观众上麦

  上麦。上麦成功后,SDK 将会自动采集麦克风声音并进行推流:

int seatIndex = 2;  // 麦位下标位置 
ZIMChatRoom.getInstance().enterSeat(seatIndex, new EnterSeatCallback(){    
    @Override
    public  void onSeatEntered(ZIMChatRoomErrorCode error){
        // 处理上麦结果
});

6、邀请好友

除了观众主动上麦之外,房主也可以主动去邀请房间内的好友进行上麦:

String toUserID = "USERID_OF_INVITED"; // 接收邀请方的 userID
ZIMChatRoom.getInstance().sendInvitation(toUserID, new SendInvitationStatusCallback() {
    @Override
    public void onInvitationStatusSent(ZIMChatRoomErrorCode errorCode) {
    // 发送邀请的结果回调
    }
});

当另一个用户收到邀请请求后,会收到此回调通知:  

// 接收邀请上麦处理
ZIMChatRoom.getInstance().setZIMChatRoomEventHandler(new ZIMChatRoomEventHandler() {
   @Override
   public void onReceiveInvitation(String fromUserID) {
       // 收到邀请信息,此时该用户可以主动调用上麦操作
   }
});

7、聊天

好啦,完成以上步骤之后我们就可以开始语音聊天了,而除了语聊房能实现的基本语音聊天之外,房间内的用户还可以进行公屏文字聊天:

ZIMChatRoom.getInstance().sendRoomMessage("YOUR_MESSAGE", new SendRoomMessageCallback() {
   @Override
   public void onRoomMessageSent(ZIMChatRoomErrorCode error) {
       // 发送房间聊天消息的结果
   }
});

8、送礼物

当然,你还可以为你的女朋友送上礼物:

int giftType = 1;  // 礼物类型可由开发者自定义,SDK 只作透传
ArrayList<String> toUserIDList = new ArrayList<>();  // 接收礼物的用户 ID 列表,需要开发者自己添加接收礼物的用户 ID
toUserIDList.add("GRIL_FRIEND");
ZIMChatRoom.getInstance().sendGiftMessage(giftType, toUserIDList, new SendGiftMessageCallback() {
   @Override
   public void onGiftMessageSent(ZIMChatRoomErrorCode error, List<String> sendFailToUsers) {
   // 接收发送礼物的结果以及接收礼物失败的用户列表
   }
});

这样,接受到礼物的用户将收到 onReceiveGiftMessage 通知,而房间内的其他用户将收到 onReceiveGiftBroadcastMessage 通知,便于在 UI 上展示一些酷炫文字和特效,提醒房间内的女友“你的男朋友为你送上礼物啦”~  

//接收礼物
ZIMChatRoom.getInstance().setZIMChatRoomEventHandler(new ZIMChatRoomEventHandler() {
   @Override
   public void onReceiveGiftMessage(int giftType, String fromUserID) {
   // 对接收礼物进行操作
   }
   @Override
   public void onReceiveGiftBroadcastMessage(List<String> toUSerIDList, int giftType) {
   // 对接收到礼物广播操作
   }
});

9、下麦

当你不需要再在麦上聊天时,调用下麦即可即刻停止发送音频数据:  

// 下麦操作
ZIMChatRoom.getInstance().leaveSeat(new LeaveSeatCallback(){
   @Override
   public void onSeatLeft(ZIMChatRoomErrorCode error){
       // 对下麦情况进行操作
   }
});

 

注意:在上麦之前要确保麦克风权限已打开哦

通过以上几个步骤,就基本上完成了语聊房的搭建上麦及其他操作,实现过程也很清晰一目了然,已经迫不及待要邀请女友上麦连线了!!!

三、效果呈现(示意图)

完整的搭建过程就是这样,保存了一些 demo 的截图,给大家看下:

配图-1@2x.png

配图-2@2x.png

四、结语

浪漫的方式有很多种,谁说程序员就不懂浪漫?

浪漫不只有鲜花和情话,还有程序员手写的代码。

不怕和程序员谈恋爱,只怕程序员懂浪漫。

毕竟他们浪漫起来,谁也招架不住。

女友的专属语聊房,你学废了嘛?赶快自己也动手搭一个,岂不美哉?  

点击链接,了解更多:双十一 · 年度底价 - ZEGO即构科技