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

朱偉

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

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

一、簡(jiǎn)介

本樣例是基于即時(shí)通訊(Instant messaging,簡(jiǎn)稱IM)服務(wù)實(shí)現(xiàn)的OpenAtom OpenHarmony(簡(jiǎn)稱“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

    文章

    2352

    瀏覽量

    42859
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16320

原文標(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)推薦

    一文洞悉PoC公網(wǎng)對(duì)講與DMR數(shù)模對(duì)講的優(yōu)劣之勢(shì)

    在通信領(lǐng)域,對(duì)講技術(shù)以其獨(dú)特的即時(shí)通訊特性,在眾多行業(yè)和場(chǎng)景中發(fā)揮著重要作用。其中,PoC公網(wǎng)對(duì)講和DMR數(shù)模對(duì)講作為兩種主流的對(duì)講技術(shù),各自具有獨(dú)特的優(yōu)勢(shì)和局限性。本文將對(duì)這兩種技術(shù)進(jìn)行詳細(xì)的比較
    的頭像 發(fā)表于 12-25 16:24 ?106次閱讀
    一文洞悉PoC公網(wǎng)對(duì)講與DMR數(shù)模對(duì)講的優(yōu)劣之勢(shì)

    [迅為RK3568開發(fā)板]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗(yàn)QT跨平臺(tái)能力

    [迅為RK3568開發(fā)板]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗(yàn)QT跨平臺(tái)能力
    的頭像 發(fā)表于 12-18 16:41 ?308次閱讀
    [迅為RK3568開發(fā)板]非科班也能<b class='flag-5'>玩轉(zhuǎn)</b>Android應(yīng)用,體驗(yàn)QT跨<b class='flag-5'>平臺(tái)</b>能力

    “恒峰國(guó)際”完成1億美金融資,推出區(qū)塊鏈平臺(tái)FO-X

    注入了強(qiáng)大的動(dòng)力。 與此同時(shí),“恒峰國(guó)際”還宣布將打造全新的區(qū)塊鏈平臺(tái)FO-X,并推出了該平臺(tái)下的首款產(chǎn)品——即時(shí)通訊軟件FoChat。據(jù)悉,F(xiàn)oChat不僅具備即時(shí)通訊的基本功能,還
    的頭像 發(fā)表于 12-13 10:41 ?1372次閱讀

    即時(shí)通話軟件音頻傳輸質(zhì)量測(cè)試方案

    使用過程中的音頻傳輸質(zhì)量。即時(shí)通話軟件基于移動(dòng)網(wǎng)絡(luò)鏈路傳輸信號(hào),通過本套測(cè)試方案中配套的網(wǎng)絡(luò)損傷仿真設(shè)備對(duì)傳輸鏈路添加不同的網(wǎng)絡(luò)影響,模擬軟件在不同網(wǎng)絡(luò)環(huán)境下的使用情況,進(jìn)而測(cè)得更接近真實(shí)應(yīng)用場(chǎng)景下的音頻傳輸質(zhì)量。 POLQA測(cè)試算法是基于心理聲學(xué)模型,模擬人類聽覺系統(tǒng)對(duì)
    的頭像 發(fā)表于 12-03 14:34 ?145次閱讀
    <b class='flag-5'>即時(shí)通</b>話軟件音頻傳輸質(zhì)量測(cè)試方案

    無線通信測(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 ?256次閱讀

    物聯(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 ?1452次閱讀
    物聯(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 ?431次閱讀

    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 ?1220次閱讀

    潤(rùn)開鴻“龍芯+OpenHarmony”開發(fā)平臺(tái)DAYU431先鋒派新品發(fā)布

    潤(rùn)開鴻基于全新龍芯2K0300芯片平臺(tái)的重磅新品潤(rùn)開鴻HH-SCDAYU431先鋒派開發(fā)平臺(tái)正式上市,成為潤(rùn)開鴻DAYU系列產(chǎn)品中符合OpenHarmony生態(tài)兼容性標(biāo)準(zhǔn)的第三款龍芯芯片平臺(tái)
    的頭像 發(fā)表于 08-07 14:50 ?521次閱讀
    潤(rùn)開鴻“龍芯+<b class='flag-5'>OpenHarmony</b>”開發(fā)<b class='flag-5'>平臺(tái)</b>DAYU431先鋒派新品發(fā)布

    直擊HDC2024:海思攜手OpenHarmony,產(chǎn)品力+生態(tài)圈引爆AIoT場(chǎng)景應(yīng)用

    海思攜手OpenHarmony,其構(gòu)成的核心競(jìng)爭(zhēng)力是什么?帶來哪些物聯(lián)網(wǎng)場(chǎng)景體驗(yàn)的提升?海思與OpenHarmony合作有哪些階段性的成果?跟隨電子發(fā)燒友記者的腳步,我們一起來海思+OpenH
    的頭像 發(fā)表于 06-28 09:15 ?4744次閱讀
    直擊HDC2024:海思攜手<b class='flag-5'>OpenHarmony</b>,產(chǎn)品力+生態(tài)圈引爆AIoT<b class='flag-5'>場(chǎng)景</b>應(yīng)用

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

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

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

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

    資訊速遞 | 廈門大學(xué)OpenHarmony技術(shù)俱樂部正式揭牌成立

    海嘉里樓報(bào)告廳舉行。 嘉賓合影 OpenHarmony是由開放原子開源基金會(huì)(OpenAtom Foundation)孵化及運(yùn)營(yíng)的開源項(xiàng)目,目標(biāo)是面向全場(chǎng)景、全連接、全智能時(shí)代,基于開源的方式,搭建一
    的頭像 發(fā)表于 01-02 16:51 ?515次閱讀
    資訊速遞 | 廈門大學(xué)<b class='flag-5'>OpenHarmony</b>技術(shù)俱樂部正式揭牌成立