人人都说找个程序猿做男朋友就是好,钱多话少 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 语聊房的示例源码,下载地址:https://storage.zego.im/ZIMChatRoom/ZIMChatRoom-Android.zip

接下来,我们就要基于 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() {@Overridepublic void onChatRoomCreated(ZIMChatRoomErrorCode error) {// 创建房间情况}
});

4、观众加入

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

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

5、观众上麦

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

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

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

6、邀请好友

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

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

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

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

7、聊天

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

ZIMChatRoom.getInstance().sendRoomMessage("YOUR_MESSAGE", new SendRoomMessageCallback() {@Overridepublic 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() {@Overridepublic void onGiftMessageSent(ZIMChatRoomErrorCode error, List<String> sendFailToUsers) {// 接收发送礼物的结果以及接收礼物失败的用户列表}
});

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

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

9、下麦

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

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

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

三、效果呈现(示意图)

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

四、结语

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

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

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

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

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

最后,来一波双十一福利,9.9元起送语聊房最佳实践文档,Demo+源码+视频解说,还有额外 1 万分钟使用时长。扫码咨询

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

  1. java程序员的浪漫代码_程序员的“硬核”浪漫

    Do an act of kindness. Help one person SMILE! 昨天是世界微笑日,是唯一一个庆祝人类行为表情的节日. 但有这么一群人,在大家眼中他们是不善表达.思维怪异,甚 ...

  2. 程序员也可以很浪漫,精选10个圣诞节特效及源码

    最近离圣诞节不远了.整理了一些关于圣诞相关的前端特效网页设计和小游戏的代码送大家.直接上效果吧. 代码过长的 可预览获取 查看源码特效合集 圣诞节快乐 - 文字渐入动画 <body>< ...

  3. 程序员是怎么快速搭建专属语聊房的

    1 语聊房应用场景说明 七夕礼物准备好了吗?程序猿七夕礼物标配,给女友搭建专属语聊房,既浪漫又硬核! 语聊房在社交场景中使用比较广泛,社交APP中的语聊房场景的实现,主要由业务系统和移动/Web 客户 ...

  4. 程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房

    1 语聊房应用场景说明 七夕礼物准备好了吗?程序猿七夕礼物标配,给女友搭建专属语聊房,既浪漫又硬核! 语聊房在社交场景中使用比较广泛,社交APP中的语聊房场景的实现,主要由业务系统和移动/Web 客户 ...

  5. 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结【文末附源码】

    微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 文章目录 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 1️⃣ 写在前面 2️⃣ 蓝牙连接流程 3 ...

  6. 谁说程序员不懂浪漫——我的C语言结婚请柬(附源码)

    前言:但行好事,莫问前程--<增广贤文> 从上学起开始学C++,后面也做过H5,现在做Android.无论是学习用的,还是工作用的,上百个软件不止.但最另我骄傲的是,我用程序烂漫了一把. ...

  7. 520,一份给程序员的“硬核”脱单秘籍

    简介: 各位,520快乐! 今天是个粉红色的日子,我们来聊聊和技术无关的"技术活",比如:"如何表白?"当技术人碰上心动的姑娘,他的浪漫开关就打开了. 各位,5 ...

  8. 程序员如何应对中年危机,撸了大神写的spring源码笔记,超详细

    前言: 我们通常在面试的时候难免会慌张不已.想必,经历过的人都能体会.但是如果你提前预测和准备面试官要问你的问题,并想出合理的回答方式,就会轻松很多.所以接下来的面试题是我从自己和其他人的面试经历中总 ...

  9. C语言/C++程序员大神打造纯C的电子时钟(加图形库+源码)

    C语言/C++程序员大神打造纯C的电子时钟,每天看时间再也不麻烦了 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进 ...

最新文章

  1. 五分钟部署一台vCenter Server 5.0 -- vCSA问与答
  2. Shell 条件判断汇总
  3. jackson.ObjectMapper里enableDefaultTyping方法过期
  4. php合同在线签约功能_【市场在线】杭汽辅机实现海外发电市场重大突破 —成功签约阿联酋Fujairah F3 IPP项目表冷器合同...
  5. javascript网页自动填表_JavaScript脚本实现网页批量自动勾选及内容填写
  6. mysql一张表1亿天数据_1亿条数据在PHP中实现Mysql数据库分表100张
  7. 用php实现一个简易的web表单生成器,网络编程PHP Web表单生成器案例分析
  8. C++老话题:用指向函数的指针作函数参数
  9. SSM框架笔记15:SSM框架西蒙购物网(XML配置方式)
  10. 搜索引擎如何评估外贸网站内容?
  11. Mac安装prometheus+grafana监控
  12. web自动化知识点-03
  13. mysql 授权创建数据库_MySQL创建数据库与创建用户以及授权
  14. 为了USB3,吾还是换了电脑
  15. java编程基础 | 练习题
  16. Python爬虫【一】爬取移动版“微博辟谣”账号内容(API接口)
  17. CVPR 2021 预讲 · 华为诺亚专场,5 篇精华报告,覆盖NAS、蒸馏、检测和降噪
  18. 文化人类学课后习题答案
  19. c++笔记(超详细超完整)
  20. 未来的计算机儿童画,儿童画未来的科学幻想绘画优秀作品

热门文章

  1. MySQL高级day02
  2. 小程序如何使用订阅消息(PHP代码+小程序js代码)
  3. 决策树算法及Python 代码示例
  4. 秘鲁庆祝亚马逊河被评选为世界自然奇观十周年纪念日
  5. 微信小程序实现底部操作栏
  6. 江苏计算机专业专转本平均分,2020年江苏专转本各科目难度分析
  7. 云南大学软件测试,云南大学
  8. 读《javascript语法精粹》知识点总结
  9. python基础部分(二)
  10. 记录一次Error configuring application listener of class的解决