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

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

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

玩轉(zhuǎn)OpenHarmony社交場景:即時通訊平臺

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

開源項目 OpenHarmony是每個人的 OpenHarmonyad914b52-8964-11ed-bfe3-dac502259ad0.jpg

朱偉

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

OpenHarmony知識體系工作組

一、簡介

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

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

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

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

(1)通訊功能 通訊功能是通過TCP協(xié)議實(shí)現(xiàn)的,我們將通訊接口connect()、send()、receive()的實(shí)現(xiàn)放置在CPP文件中,通過NAPI的方式對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++ 接收線程啟動");
    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ā)是即時通訊辦公場景下的重要功能。樣例中的文件功能支持文件消息的發(fā)送、接收和下載。用戶通過點(diǎn)擊聊天界面的“+”按鈕,選擇“文件”按鈕,完成本地文件的瀏覽,隨后可以選擇是否將文件發(fā)送給好友。這個功能的實(shí)現(xiàn)包括三個步驟:(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ā)送給好友。這個功能的實(shí)現(xiàn)包括三個步驟:(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是即時通訊軟件不可缺少的一部分,可以更加生動地表現(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>

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

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

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

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

樣例源碼

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

OpenHarmony知識體系工作組

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


原文標(biāo)題:玩轉(zhuǎn)OpenHarmony社交場景:即時通訊平臺

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


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

    關(guān)注

    57

    文章

    2295

    瀏覽量

    42644
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3614

    瀏覽量

    15994

原文標(biāo)題:玩轉(zhuǎn)OpenHarmony社交場景:即時通訊平臺

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

    潤開鴻AT32開發(fā)平臺通過OpenHarmony兼容性測評

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

    潤開鴻AT32開發(fā)平臺通過OpenHarmony兼容性測評

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

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

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

    潤開鴻AT32開發(fā)平臺通過OpenHarmony兼容性測評

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

    OpenHarmony Meetup北京站招募令

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

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

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

    OpenHarmony技術(shù)大會 | 應(yīng)用(北向)生態(tài)分論壇圓滿舉辦:眾行遠(yuǎn),攜手打造全場景生態(tài)

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開源項目 OpenHarmony 是每個人的 OpenHarmony場景時代下,用戶需求變得越來越多元化。軟件服務(wù)又稱北向應(yīng)用,應(yīng)用生態(tài)圍繞著一個共同的技術(shù)平臺
    的頭像 發(fā)表于 11-11 21:10 ?968次閱讀

    陳海波:OpenHarmony技術(shù)領(lǐng)先,產(chǎn)學(xué)研深度協(xié)同,生態(tài)蓬勃發(fā)展

    。 根深葉茂,OpenHarmony四大技術(shù)架構(gòu)競爭力領(lǐng)先,生態(tài)蓬勃發(fā)展 OpenHarmony以“面向萬物智聯(lián)世界,構(gòu)建分布式全場景協(xié)同的開源操作系統(tǒng)基座與生態(tài)系統(tǒng)”為技術(shù)愿景,秉持“生態(tài)統(tǒng)一
    發(fā)表于 11-06 14:35

    數(shù)智共創(chuàng),華為WeLink 賦能哈工大卓越發(fā)展

    復(fù)雜、應(yīng)用多分散、信息安全等方面的巨大挑戰(zhàn)。 自 2021 年哈工大與華為公司開展 WeLink 項目合作以來,哈工大基于華為云 WeLink 的專屬定制,構(gòu)建了移動端的協(xié)同辦公服務(wù)平臺“哈工大”APP,為校內(nèi)師生提供了即時通訊、校內(nèi)新聞、消息通知、郵
    的頭像 發(fā)表于 11-05 14:49 ?536次閱讀
    數(shù)智共創(chuàng),華為WeLink 賦能哈工大卓越發(fā)展