0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

玩轉(zhuǎn)OpenHarmony社交場(chǎng)景:即時(shí)通訊平臺(tái)

OpenAtom OpenHarmony ? 來源:未知 ? 2023-01-01 08:05 ? 次閱讀

開源項(xiàng)目 OpenHarmony是每個(gè)人的 OpenHarmonyad914b52-8964-11ed-bfe3-dac502259ad0.jpg

朱偉

中國科學(xué)院軟件所

OpenHarmony知識(shí)體系工作組

一、簡介

本樣例是基于即時(shí)通訊(Instant messaging,簡稱IM)服務(wù)實(shí)現(xiàn)的OpenAtom OpenHarmony(簡稱“OpenHarmony”)應(yīng)用,允許兩人或多人使用互聯(lián)網(wǎng)即時(shí)地傳遞文字、圖片、文件、語音、emoji等訊息,可應(yīng)用于各類聊天場(chǎng)景,為人們帶來更加及時(shí)高效的通訊體驗(yàn)。 此外即時(shí)通訊平臺(tái)具備較高的定制化特點(diǎn),適用于多種行業(yè),客戶可以根據(jù)自己的需求來定制,實(shí)現(xiàn)即時(shí)通訊的內(nèi)部私有化。 設(shè)備端:DAYU200(RK3568)開發(fā)板,OpenHarmony 3.1 release系統(tǒng)。

二、即時(shí)通訊實(shí)現(xiàn)原理

想要實(shí)現(xiàn)多個(gè)設(shè)備之間的無障礙即時(shí)通訊,需要多臺(tái)終端設(shè)備、終端應(yīng)用和服務(wù)器配合一起使用。首先應(yīng)該將終端應(yīng)用安裝到終端設(shè)備上,用戶通過應(yīng)用向服務(wù)器申請(qǐng)注冊(cè)賬號(hào)。隨后,用戶可以通過賬號(hào)進(jìn)行查找,添加其他好友,并向好友發(fā)送文字、圖片、文件、語音、emoji等訊息。用戶發(fā)送的訊息會(huì)先送達(dá)服務(wù)器,由服務(wù)器判斷其好友的狀態(tài)(離線/在線),然后選擇發(fā)送或者暫時(shí)緩存消息等操作。最后,好友的終端應(yīng)用接收到消息。實(shí)現(xiàn)即時(shí)通訊的設(shè)備需求:安裝應(yīng)用的終端設(shè)備、網(wǎng)絡(luò)環(huán)境和云端服務(wù)器。前提條件:用戶將應(yīng)用安裝在終端設(shè)備上,并且擁有注冊(cè)賬號(hào),且需要通訊的用戶也成功注冊(cè)了賬號(hào)并且添加了好友。通訊原理:用戶在安裝了應(yīng)用的終端設(shè)備上編輯信息(文字、圖片、文件、語音、emoji等),通過網(wǎng)絡(luò)將消息發(fā)送至云端服務(wù)器。當(dāng)對(duì)方用戶在線時(shí),云端服務(wù)器將把消息推送給對(duì)方用戶,對(duì)方用戶安裝了應(yīng)用的終端設(shè)備也將接收到信息。當(dāng)對(duì)方用戶不在線時(shí),信息將被暫時(shí)緩存在云端服務(wù)器。

三、4步實(shí)現(xiàn)多人即時(shí)通訊

(1)通訊功能 通訊功能是通過TCP協(xié)議實(shí)現(xiàn)的,我們將通訊接口connect()、send()、receive()的實(shí)現(xiàn)放置在CPP文件中,通過NAPI的方式對(duì)JS層暴露接口。 ?connect():客戶端和服務(wù)器建立連接; ? send():消息發(fā)送功能 ? receive():消息接收功能;
//建立TCP連接
if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
    napi_create_int32(env, 0, &result);
} else {
    napi_create_int32(env, 1, &result);
    OH_LOG_INFO(LOG_APP,"C++ 接收線程啟動(dòng)");
    startRec();
}
 //發(fā)送消息
if(send(sock_cli, data, strlen(data),0) == -1) {
    OH_LOG_INFO(LOG_APP,"zjf == send() : -1");
    napi_create_int32(env, 0, &result);
} else {
    OH_LOG_INFO(LOG_APP,"zjf == send() : !-1");
    napi_create_int32(env, 1, &result);
}
//接收消息
getStep(queue0,sharedMessage); //取出一條消息
const char *c_s=sharedMessage.c_str();//換為char*形式處理
napi_value result;
napi_create_string_utf8(env, c_s, sharedMessage.length(), &result);
std::string().swap(sharedMessage);//清空字符串
(2)文件消息的發(fā)送與接收adf71db0-8964-11ed-bfe3-dac502259ad0.png ? 文件轉(zhuǎn)發(fā)是即時(shí)通訊辦公場(chǎng)景下的重要功能。樣例中的文件功能支持文件消息的發(fā)送、接收和下載。用戶通過點(diǎn)擊聊天界面的“+”按鈕,選擇“文件”按鈕,完成本地文件的瀏覽,隨后可以選擇是否將文件發(fā)送給好友。這個(gè)功能的實(shí)現(xiàn)包括三個(gè)步驟:(1)文件的選擇;(2)文件上傳到服務(wù)器;(3)文件的接收。 ??文件上傳
//文件的選擇
let file1 = {filename: this.$app.$def.uid +'-'+ FILE_URL, name: 'file', uri: FILE_URL, type:fileType }
let fileId = this.guid();
let data = {};
let header = { "filename": this.selectedFileName.toString()};
//文件上傳到服務(wù)器
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', function callback(headers){
  _this.socketSendFile(fileId, timestamp);
  });
}).catch((err) => {
  console.error('fileSelect=====Failed to request the upload. Cause: ' + JSON.stringify(err));
})
//文件的接收
let downloadConfig = {  //下載參數(shù)
            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', function callback() {
                prompt.showToast({
                   message: '下載文件成功!',
                   duration: 1000,
                });
});
(3)語音消息的發(fā)送與接收 ae0ccc28-8964-11ed-bfe3-dac502259ad0.png ? 用戶通過點(diǎn)擊聊天界面的錄制按鈕,完成語音的錄制,隨后可以選擇是否將語音發(fā)送給好友。這個(gè)功能的實(shí)現(xiàn)包括三個(gè)步驟:(1)語音的錄制;(2)語音上傳到服務(wù)器;(3)語音的接收。 圖片消息的發(fā)送與語音消息的發(fā)送步驟相同,文章中不再贅述。
//語音錄制
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} case failed, audiorecorder is null`)
    }
}


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


//語音消息發(fā)送到服務(wù)器
request.upload({ url: myurl, header: header, method: "POST", files: [file1], data: [data] }).then((data) => {
            uploadTask = data;
            uploadTask.on('headerReceive', function callback(headers){
              _this.sendAudio(audioId)
            });
            uploadTask.on('progress', function callback(uploadedSize, totalSize) {
                console.info("dialogPages=====upload totalSize:" + totalSize + "  uploadedSize:" + uploadedSize);
            });
        }).catch((err) => {
            console.error('dialogPages=====Failed to request the upload. Cause: ' + JSON.stringify(err));
        })
//語音的接收
let downloadConfig = {    //下載參數(shù)
        url: item.content.path,
        header: {},  
        enableMetered: true,                      
        enableRoaming: true,                      
        filePath: filePath,               
        networkType: request.NETWORK_WIFI        
}
        let downloadTask;
        let _this = this
        request.download(downloadConfig, (err, data) => {
            if (err) {
                 return;
            }
            downloadTask = data;
            //下載完成
            downloadTask.on('complete', function callback() {
               let audio = {
                  content: { path: filePath }
                 }
                 _this.playAudio(audio)
});
(4)emoji消息的發(fā)送與接收 ae25034c-8964-11ed-bfe3-dac502259ad0.png ? emoji是即時(shí)通訊軟件不可缺少的一部分,可以更加生動(dòng)地表現(xiàn)用戶的聊天情感。在樣例中,用戶通過點(diǎn)擊聊天界面的emoji按鈕,即可找到目前應(yīng)用內(nèi)支持的所有樣式的emoji,隨后可以選擇具體樣式并將其發(fā)送給好友。
//引入emoji第三方組件
<element name="emojiExpression" src="../../common/components/emojiExpression/emojiExpression.hml">element>


//第三方組件的展示布局
<div id="moreContainer" if="{{showFace}}">
    <div id="moreOneLine">
        <div class="moreFillGap" style="flex: 1 1;">div>
        <text style="left: 25fp; top: 10fp;">所有表情text>
        <emojiExpression>emojiExpression>
        <div class="moreFillGap" style="flex: 1 1;">div>
    div>
div>

四、即時(shí)通訊功能總結(jié)

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

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

五、相關(guān)參考鏈接

樣例源碼

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

OpenHarmony知識(shí)體系工作組

https://gitee.com/openharmony-sig/knowledge


原文標(biāo)題:玩轉(zhuǎn)OpenHarmony社交場(chǎng)景:即時(shí)通訊平臺(tái)

文章出處:【微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2302

    瀏覽量

    42689
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3641

    瀏覽量

    16061

原文標(biāo)題:玩轉(zhuǎn)OpenHarmony社交場(chǎng)景:即時(shí)通訊平臺(tái)

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無線通信測(cè)試平臺(tái)的技術(shù)原理和應(yīng)用場(chǎng)景

    無線通信測(cè)試平臺(tái)的技術(shù)原理和應(yīng)用場(chǎng)景是無線通信領(lǐng)域的重要組成部分。以下是對(duì)這兩個(gè)方面的詳細(xì)闡述:一、無線通信測(cè)試平臺(tái)的技術(shù)原理無線通信測(cè)試平臺(tái)的技術(shù)原理主要基于無線信號(hào)傳輸和接收過程中
    發(fā)表于 11-06 14:29

    純血鴻蒙開啟公測(cè) 360織語內(nèi)測(cè)“嘗鮮版”主攻企業(yè)即時(shí)通訊

    鴻蒙
    的頭像 發(fā)表于 10-10 10:36 ?205次閱讀

    物聯(lián)網(wǎng)行業(yè)中MQTT通信協(xié)議詳解以及使用

    ,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布。 MQTT最大優(yōu)點(diǎn)在于, 用極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù) 。 作為一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,使其
    的頭像 發(fā)表于 09-20 17:08 ?1030次閱讀
    物聯(lián)網(wǎng)行業(yè)中MQTT通信協(xié)議詳解以及使用

    對(duì)等通訊協(xié)議有哪些類型

    對(duì)等通訊協(xié)議(Peer-to-Peer Protocols)是計(jì)算機(jī)網(wǎng)絡(luò)中允許兩個(gè)或多個(gè)節(jié)點(diǎn)直接相互通信而無需通過中間服務(wù)器的協(xié)議。這類協(xié)議在文件共享、即時(shí)通信、區(qū)塊鏈技術(shù)等領(lǐng)域有廣泛應(yīng)用。以下
    的頭像 發(fā)表于 09-09 17:11 ?300次閱讀

    Meta旗下社交平臺(tái)Threads推出新功能

    Meta旗下的新興社交平臺(tái)Threads近期宣布了一系列新功能的推出,旨在為企業(yè)用戶和數(shù)字創(chuàng)作者提供更加便捷和強(qiáng)大的內(nèi)容管理工具。此次更新不僅豐富了平臺(tái)的交互體驗(yàn),還進(jìn)一步提升了數(shù)據(jù)透明度與發(fā)布效率。
    的頭像 發(fā)表于 08-16 18:00 ?1156次閱讀

    潤開鴻全場(chǎng)景應(yīng)用開發(fā)實(shí)訓(xùn)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    近日,江蘇潤開鴻數(shù)字科技有限公司(以下簡稱“潤開鴻”)基于OpenHarmony的全場(chǎng)景應(yīng)用開發(fā)實(shí)訓(xùn)平臺(tái)通過OpenHarmony 3.2. Release版本兼容性測(cè)評(píng),為高校開展
    的頭像 發(fā)表于 01-22 10:08 ?630次閱讀

    潤開鴻基于OpenHarmony的全場(chǎng)景應(yīng)用開發(fā)實(shí)訓(xùn)平臺(tái)通過兼容性測(cè)評(píng)

    近日,江蘇潤開鴻數(shù)字科技有限公司(以下簡稱“潤開鴻”)基于OpenHarmony的全場(chǎng)景應(yīng)用開發(fā)實(shí)訓(xùn)平臺(tái)通過OpenHarmony3.2.Release版本兼容性測(cè)評(píng),為高校開展
    的頭像 發(fā)表于 01-20 08:02 ?480次閱讀
    潤開鴻基于<b class='flag-5'>OpenHarmony</b>的全<b class='flag-5'>場(chǎng)景</b>應(yīng)用開發(fā)實(shí)訓(xùn)<b class='flag-5'>平臺(tái)</b>通過兼容性測(cè)評(píng)

    歐盟強(qiáng)制科技巨頭遵守新規(guī),24家公司聯(lián)手指控谷歌、亞馬遜

     其中,根據(jù)歐盟《數(shù)字市場(chǎng)法案》,用戶規(guī)模超4.5億、市值達(dá)750億歐元(約合812億美元)以上者將被視作“看門人”,需嚴(yán)格遵守歐盟規(guī)定,例如開放即時(shí)通訊應(yīng)用互通性,設(shè)定設(shè)備預(yù)裝應(yīng)用由用戶決定等。此外,不得實(shí)施“偏袒自家服務(wù)”。
    的頭像 發(fā)表于 01-17 10:38 ?621次閱讀

    【飛騰派4G版免費(fèi)試用】3.JITSI視頻會(huì)議想開就開

    時(shí)長的會(huì)議軟件呢?答案是有的,你只需要在 飛騰派 上搭建JITSI ,就可以擁有一個(gè)開源的、安全、支持視頻會(huì)議和即時(shí)通訊平臺(tái)。 什么是JITSI Jitsi Meet 是一個(gè)開源的、安全、支持視頻會(huì)議
    發(fā)表于 12-25 18:44

    潤開鴻AT32開發(fā)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    、智慧城市等具體應(yīng)用場(chǎng)景的嵌入式設(shè)備開發(fā)及教學(xué)實(shí)訓(xùn)。 潤開鴻AT32開發(fā)平臺(tái) 就在10月中旬舉辦的第60屆高等教育博覽會(huì)上,潤開鴻全新發(fā)布了面向智慧交通綜合場(chǎng)景的基于OpenHarmony
    發(fā)表于 12-21 17:20

    潤開鴻AT32開發(fā)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開源項(xiàng)目 OpenHarmony 是每個(gè)人的 OpenHarmony 近期,江蘇潤開鴻數(shù)字科技有限公司(以下簡稱“潤開鴻”)AT32開發(fā)平臺(tái)通過OpenAtom
    的頭像 發(fā)表于 12-20 21:10 ?636次閱讀
    潤開鴻AT32開發(fā)<b class='flag-5'>平臺(tái)</b>通過<b class='flag-5'>OpenHarmony</b>兼容性測(cè)評(píng)

    openharmony開發(fā)應(yīng)用

    隨著智能設(shè)備的普及和多樣化,開發(fā)者們對(duì)于更加靈活、高效的操作系統(tǒng)需求與日俱增。在這個(gè)背景下,華為推出了OpenHarmony,一個(gè)全場(chǎng)景智能終端操作系統(tǒng)和生態(tài)平臺(tái)。本文將詳細(xì)探討
    的頭像 發(fā)表于 12-19 09:42 ?616次閱讀

    潤開鴻AT32開發(fā)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    近期,江蘇潤開鴻數(shù)字科技有限公司(以下簡稱“潤開鴻”)AT32開發(fā)平臺(tái)通過OpenHarmony3.2.Release版本兼容性測(cè)評(píng),助力潤開鴻基于該開發(fā)平臺(tái)全新研發(fā)推出的行業(yè)終端設(shè)備順利融入
    的頭像 發(fā)表于 12-15 08:02 ?575次閱讀
    潤開鴻AT32開發(fā)<b class='flag-5'>平臺(tái)</b>通過<b class='flag-5'>OpenHarmony</b>兼容性測(cè)評(píng)

    OpenHarmony Meetup北京站招募令

    OpenHarmony Meetup城市巡回北京站火熱來襲??! 日期:2023年11月25日14:00 地點(diǎn):中國科學(xué)院軟件園區(qū)五號(hào)樓B402 與OpenHarmony技術(shù)大咖近距離互動(dòng),分享技術(shù)
    發(fā)表于 11-20 14:54

    重磅!《兆芯&amp;中科方德生態(tài)聯(lián)合解決方案》全新發(fā)布

    角度、多個(gè)方向解決關(guān)基行業(yè)痛點(diǎn)。 此版《方案》,兆芯與中科方德聯(lián)合了眾多生態(tài)伙伴,推出文檔共享、云桌面、辦公自動(dòng)化、內(nèi)網(wǎng)安全管理、金融智腦、即時(shí)通訊、電子簽章、智慧教學(xué)、工業(yè)設(shè)計(jì)等各類技術(shù)解決方案,為關(guān)鍵基礎(chǔ)
    的頭像 發(fā)表于 11-16 20:10 ?667次閱讀
    重磅!《兆芯&amp;中科方德生態(tài)聯(lián)合解決方案》全新發(fā)布