色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙上實現多人聊天功能

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 2023-01-09 10:03 ? 次閱讀

本樣例是基于即時通訊(簡稱 IM)服務實現的 OpenHarmony 應用。

該應用允許兩人或多人使用互聯網即時地傳遞文字、圖片、文件、語音、emoji 等訊息,可應用于各類聊天場景,為人們帶來更加及時高效的通訊體驗。

此外即時通訊平臺具備較高的定制化特點,適用于多種行業,客戶可以根據自己的需求來定制,實現即時通訊的內部私有化。

設備端:

DAYU200(RK3568)開發板

OpenHarmony 3.1 release 系統

即時通訊實現原理

如下圖:

0f8d5868-8f42-11ed-bfe3-dac502259ad0.png

想要實現多個設備之間的無障礙即時通訊,需要多臺終端設備、終端應用和服務器配合一起使用。

首先應該將終端應用安裝到終端設備上,用戶通過應用向服務器申請注冊賬號。

隨后,用戶可以通過賬號進行查找,添加其他好友,并向好友發送文字、圖片、文件、語音、emoji 等訊息。

用戶發送的訊息會先送達服務器,由服務器判斷其好友的狀態(離線/在線),然后選擇發送或者暫時緩存消息等操作。

最后,好友的終端應用接收到消息。

實現即時通訊的設備需求:安裝應用的終端設備、網絡環境和云端服務器。

前提條件:用戶將應用安裝在終端設備上,并且擁有注冊賬號,且需要通訊的用戶也成功注冊了賬號并且添加了好友。

通訊原理:用戶在安裝了應用的終端設備上編輯信息(文字、圖片、文件、語音、emoji 等),通過網絡將消息發送至云端服務器。

當對方用戶在線時,云端服務器將把消息推送給對方用戶,對方用戶安裝了應用的終端設備也將接收到信息。當對方用戶不在線時,信息將被暫時緩存在云端服務器。

4步實現多人即時通訊

通訊功能是通過 TCP 協議實現的,我們將通訊接口 connect()、send()、receive() 的實現放置在 CPP 文件中,通過 NAPI 的方式對 JS 層暴露接口。

如下:

connect():客戶端和服務器建立連接

send():消息發送功能

receive():消息接收功能


//建立TCP連接
if(connect(sock_cli,(structsockaddr*)&servaddr,sizeof(servaddr))

②文件消息的發送與接收

0faf7d8a-8f42-11ed-bfe3-dac502259ad0.png

文件轉發是即時通訊辦公場景下的重要功能。樣例中的文件功能支持文件消息的發送、接收和下載。 用戶通過點擊聊天界面的“+”按鈕,選擇“文件”按鈕,完成本地文件的瀏覽,隨后可以選擇是否將文件發送給好友。

這個功能的實現包括三個步驟:

文件的選擇

文件上傳到服務器

文件的接收

文件上傳:

//文件的選擇
letfile1={filename:this.$app.$def.uid+'-'+FILE_URL,name:'file',uri:FILE_URL,type:fileType}
letfileId=this.guid();
letdata={};
letheader={"filename":this.selectedFileName.toString()};
//文件上傳到服務器
request.upload({url:"http://"+this.$app.$def.ip+"/file/fileUpload?fileSignature="+fileId+"&uid="+this.$app.$def.uid+"&fileType="+this.$app.$def.chatData[this.idx].unRead,header:header,method:"POST",files:[file1],data:[data]}).then((data)=>{
uploadTask=data;
uploadTask.on('headerReceive',functioncallback(headers){
_this.socketSendFile(fileId,timestamp);
});
}).catch((err)=>{
console.error('fileSelect=====Failedtorequesttheupload.Cause:'+JSON.stringify(err));
})
//文件的接收
letdownloadConfig={//下載參數
url:fileUrl,
header:{},
enableMetered:true,
enableRoaming:true,
filePath:'/data/storage/el2/base/haps/entry/files/'+downloadFileName,
networkType:request.NETWORK_WIFI
}
request.download(downloadConfig,(err,data)=>{
if(err){
return;
}
downloadTask=data;
//下載完成
downloadTask.on('complete',functioncallback(){
prompt.showToast({
message:'下載文件成功!',
duration:1000,
});
});
③語音消息的發送與接收 0fc981bc-8f42-11ed-bfe3-dac502259ad0.png 用戶通過點擊聊天界面的錄制按鈕,完成語音的錄制,隨后可以選擇是否將語音發送給好友。

這個功能的實現包括三個步驟:

語音的錄制

語音上傳到服務器

語音的接收

圖片消息的發送與語音消息的發送步驟相同,文章中不再贅述。

//語音錄制
startRecorder(config,callback){
if(typeof(this.audioRecorder)!=='undefined'){
this.audioRecorder.on('prepare',()=>{
this.audioRecorder.start()
})
this.audioRecorder.on('start',()=>{
callback()
})
this.audioRecorder.prepare(config)
}else{
logger.info(`${TAG}casefailed,audiorecorderisnull`)
}
}

//錄制好的語音文件的位置
letsrcPath='internal://cache/'+this.mainData.file+'.wav'
letfile1={filename:this.$app.$def.uid+'-'+this.mainData.path,name:'audio',uri:srcPath,type:"wav"};

//語音消息發送到服務器
request.upload({url:myurl,header:header,method:"POST",files:[file1],data:[data]}).then((data)=>{
uploadTask=data;
uploadTask.on('headerReceive',functioncallback(headers){
_this.sendAudio(audioId)
});
uploadTask.on('progress',functioncallback(uploadedSize,totalSize){
console.info("dialogPages=====uploadtotalSize:"+totalSize+"uploadedSize:"+uploadedSize);
});
}).catch((err)=>{
console.error('dialogPages=====Failedtorequesttheupload.Cause:'+JSON.stringify(err));
})
//語音的接收
letdownloadConfig={//下載參數
url:item.content.path,
header:{},
enableMetered:true,
enableRoaming:true,
filePath:filePath,
networkType:request.NETWORK_WIFI
}
letdownloadTask;
let_this=this
request.download(downloadConfig,(err,data)=>{
if(err){
return;
}
downloadTask=data;
//下載完成
downloadTask.on('complete',functioncallback(){
letaudio={
content:{path:filePath}
}
_this.playAudio(audio)
});

④emoji 消息的發送與接收

100142aa-8f42-11ed-bfe3-dac502259ad0.png

emoji 是即時通訊軟件不可缺少的一部分,可以更加生動地表現用戶的聊天情感。 在樣例中,用戶通過點擊聊天界面的 emoji 按鈕,即可找到目前應用內支持的所有樣式的 emoji,隨后可以選擇具體樣式并將其發送給好友。

//引入emoji第三方組件


//第三方組件的展示布局


所有表情

即時通訊功能總結

本樣例是基于 OpenHarmony 實現的即時通訊應用,目前已經支持文字、圖片、文件、語音、emoji 等訊息的快速發送與接收。 除此之外還實現了好友的添加與刪除、黑名單、安全登錄、私聊/群聊、個人信息設置(二維碼/頭像等)等功能的全方面支持。 代碼地址:

https://gitee.com/isrc_ohos/instant-message_ohos

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴

原文標題:鴻蒙上實現多人聊天功能

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    PHP實現簡單聊天功能

    php實現簡單聊天功能1、創建聊天消息表,其表的字段有消息內容,發送時間和發送者的名稱;SQL:CREATE TABLE `guanhui`.`message` ( `id` INT(
    發表于 06-05 15:09

    如何實現HarmonyOS Java端的氣泡聊天框?

      HarmonyOSJava端的氣泡聊天框怎么實現?android上有9圖可實現鴻蒙上有什么類似的方案沒?
    發表于 06-13 09:59

    請問一下鴻蒙如何實現分享功能

    , currentScores.getText().toString()));shareIntent = Intent.createChooser(shareIntent, "分享到");startActivity(shareIntent);鴻蒙如何實現類似android
    發表于 06-15 10:37

    java實現IM即時通訊聊天功能代碼

    從實際工程應用角度出發,以計算機網絡原理為指導,結合當前網絡中的一些常用技術,編程實現基于C/S架構的網絡聊天工具是切實可行的。本文為大家介紹java Smack整合Openfire服務器實現IM即時通訊
    發表于 01-24 16:10 ?2.8w次閱讀

    小程序如何實現聊天功能

    小程序即時聊天功能。 為小程序接入企達小程序IM后,可以實現用戶消息即時提醒,當有用戶發送消息,會像QQ一樣閃爍提醒,并彈窗提示客服人員進行接待,有效避免因接待不及時,而造成用戶流失。除了消息提醒,即時
    發表于 03-17 11:13 ?2489次閱讀

    鴻蒙系統有什么新功能

    鴻蒙系統有什么新功能?在前段時間,華為正式發布了鴻蒙系統,鴻蒙系統勾起了許多小伙伴的好奇心,那么應該有很多人好奇
    的頭像 發表于 07-06 16:22 ?7298次閱讀

    鴻蒙上使用Python進行物聯網編程

    在上一篇帖子《使用 Python 開發鴻蒙設備程序(1-GPIO 外設控制)》中,已經成功的使用 Python 對 GPIO 上的外設進行了控制。 這其實不是什么大不了的事,從功能的角度也著實不值得
    的頭像 發表于 09-28 09:55 ?4289次閱讀
    在<b class='flag-5'>鴻蒙上</b>使用Python進行物聯網編程

    鴻蒙版微信聊天UI效果實現

    ? 最近開發中要做一個類似微信聊天的工單系統客服中心界面(安卓版)所以想著也模仿一個鴻蒙版(基于 Java UI 的,JS UI 版本的后期更新哈) 那么廢話不多數說我們正式開始。 ??? 具體實現
    的頭像 發表于 11-15 09:35 ?3614次閱讀
    <b class='flag-5'>鴻蒙</b>版微信<b class='flag-5'>聊天</b>UI效果<b class='flag-5'>實現</b>!

    如何在鴻蒙上實現聊天列表滑動刪除功能

    ?? 本項目基于 ArkUI 中 TS 擴展的聲明式開發范式,關于語法和概念直接看官網。 ?? 基于 TS 擴展的聲明式開發范式 1 : https: / /developer.harmonyos.com/cn /docs/documentation /doc-guides/ui -ts-overview- 00000011 92705715 基于 TS 擴展的聲明式開發范式 2 : https: / /developer.harmonyos.com/cn /docs/documentation /doc-references/ts -framework-directory- 00000011115 81264 本文介紹列表滑動刪除: 列表中只允許滑出其中一項 如果有打開的項,點擊或滑動其他項都會關閉打開的項 點擊刪除,刷新列表界面
    的頭像 發表于 12-03 10:55 ?3137次閱讀

    鴻蒙上安裝按鈕實現下載、暫停、取消、顯示等操作

    今天給大家分享在鴻蒙上一個按鈕實現下載、暫停、取消、顯示下載進度操作。
    的頭像 發表于 01-04 14:32 ?2300次閱讀

    基于openHarmony適配移植的即時聊天功能實現

    項目介紹 項目名稱:NettyChat 所屬系列:openHarmony的第三方組件適配移植 功能實現了即時聊天功能 項目移植狀態:100%,移植完成即時
    發表于 04-12 09:29 ?5次下載

    鴻蒙上實現“數字華容道”小游戲

    本篇文章教大家如何在鴻蒙上實現“數字華容道”小游戲。
    的頭像 發表于 12-26 09:52 ?1240次閱讀

    鴻蒙上實現簡單的“每日新聞”

    這是一篇講解如何實現基于鴻蒙 JS 的簡單的每日新聞。
    的頭像 發表于 12-26 09:58 ?856次閱讀

    鴻蒙上開發“小蜜蜂”游戲

    小時候我們有個熟悉的游戲叫小蜜蜂。本文教大家在鴻蒙上學做這個小蜜蜂游戲。
    的頭像 發表于 04-03 11:27 ?1674次閱讀

    鴻蒙OS開發實例:【HarmonyHttpClient】網絡框架

    鴻蒙上使用的Http網絡框架,里面包含純Java實現的HttpNet,類似okhttp使用,支持同步和異步兩種請求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優雅使用注解、自動解析j
    的頭像 發表于 04-12 16:58 ?827次閱讀
    <b class='flag-5'>鴻蒙</b>OS開發實例:【HarmonyHttpClient】網絡框架
    主站蜘蛛池模板: 亚洲国产精品无码中文字幕| GAY东北澡堂激情2022| 欧美极限扩肛| 国产精品自在自线亚洲| 4388成人| 亚洲国产精品久久人人爱| 欧洲另类一二三四区| 黄色小说男男| 高h gl肉文| 99视频免费在线| 用震蛋调教女性下面视频| 忘忧草直播| 欧美性情video sexo视频| 久久棋牌评测| 国产永不无码精品AV永久| 阿片在线播放| 91交换论坛| 一本到道免费线观看| 先锋影音 av| 骚浪插深些好烫喷了| 女人精69xxxxx舒心| 久久精品AV无码亚洲色欲| 国产精品人成视频免费999| 成年人国产视频| 99久久99久久精品| 中文字幕永久在线观看| 夜里18款禁用的免费B站动漫| 无码国产成人777爽死| 色戒西瓜视频| 日韩av无码在线直播| 欧美一区二区三区激情视频| 男男肉肉互插腐文| 久久影院午夜理论片无码| 久久黄色精品视频| 精品手机在线1卡二卡3卡四卡| 国产亚洲精品久久久久久线投注 | jizzjizz3d动漫| 91嫩草私人成人亚洲影院| 2021国产精品视频一区| 中文字幕日本一区| 中文字幕成人|