基於融雲的好友關係實現

好友關係是社交 IM 中 非常重要的一個模塊, 一般意義上的理解即是成爲好友關係以後。才能進行聊天溝通  但是對於融雲來說 只要你給了的 userid , 我知道了對方的 userid 就跟跟對方 發起聊天也就是發起會話。 我們不妨點擊來參考一下 bob 的講解好友關係的博客  你的 App 怎麼去定義好友關係  就看 你和你的 server 怎麼去維護這個關係 和 userid 了 下面我會通過 app 實例給大家講解一下好友關係的實現


一 : 實例展示 



gif 無法預覽的同學請點擊右邊鏈接 : 這邊不得不吐槽一下濤哥的平臺,我上傳的gif才1.7MB就死活上傳不上去.辛苦大家點我


下面對這個動圖做一下講解 

1 我們首先可以清晰的看到 兩個端的的用戶信息 然後我點擊了好友 目前可以清晰的看到現在好友列表裏面的是空的沒有一個好友數據

2 接下來 我點擊了社交 社交裏面有個 添加好友 我輸入 shenzhen  模糊查詢出了兩個好友點擊我們正在登陸的 shenzhen 添加好友 輸入我需要添加的好友信息 shenzhen ni hao

3 這個時候重點來了 beijing 給 shenzhen 發送好友請求同意後 我們可見 驗證消息上面的 未讀消息小紅點出現了 我們點擊進去 看到 beijing 申請添加我爲好友了

4 此時我們來看看 beijieng 端的 驗證消息模塊裏面 有什麼變化 第一次是展示的 請求添加 也就是我申請添加發出去了 等待對方響應 當 shenzhen 點擊同意添加以後 此時我再 下拉刷新了 我發出去的 申請添加狀態編程了 已添加 目前應該算是整個好友添加以及被同意的完整流程走完了

5 我們再來點擊 好友列表  發現兩個端彼此的好友列表裏面都有了對方 其實整個好友列表 item 下面就是藏了一個 userid 點擊後 會調用 stratPrivatechat 這就是所謂的 怎麼控制 userid 的出現來維護和實現好友關係

6 最後我們再來看會話列表 會話列表 此時也收到了服務端發來的同意對方成爲好友的消息 以及我添加對方時候的驗證消息  

注: 好友關係是非常靈活的 建議大家不要盲目被上面的概念固定死了思維 也可以自己有更好的方式去實現, 用目前的接口實現的好友關係 沒有立即拒絕添加  只有 同意添加 和 默認不處理 如果你的產品需求有立即拒絕添加 這個需要你和你的後臺看怎麼去設計接口了


二 : 代碼實現

相信大家看了上面的 gif 和 1-6 點的概念 腦海裏面已經比較清楚好友關係的實現了  方便大家理解得更加深刻 這邊再對代碼 和 接口做一下梳理(接口爲 Demo server的 接口) 自己的 App 應該有自己的接口


http://webim.demo.rong.io/ request_friend

請求方式:POST
參數:(Integer $id  String message)
返回成功json:

{"code":200}

{"code":304,"message":"unknow error"}

應該必須有個請求加對方爲好友的接口 當然搜索查詢用戶的接口肯定也得有 上面的代碼片段是請求加對方爲好友 我們再來看看接收到 這個好友申請的時候 服務端做了什麼事

服務端有個 好友列表  

http://webim.demo.rong.io/get_friend

請求方式:GET
參數:
返回成功json:
//status : 1 好友, 2 請求添加, 3 請求被添加, 4 請求被拒絕, 5 我被對方刪除

{
    "code": 200,
    "result": [
        {
            "id": "6754",
            "email": "[email protected]",
            "username": "Ariel@iPhone",
            "portrait": "http://www.gravatar.com/avatar/3f56d1043edd4b9657c465ac7a507067?s=82",
            "status": "1"
        },
        {
            "id": "19237",
            "email": "[email protected]",
            "username": "hahajaj",
            "portrait": "http://www.gravatar.com/avatar/6405153265d25fd4b6dccfacf0fe410c?s=82",
            "status": "1"
        }
    ]
}

這裏主要看維護的狀態的變化  當你發起 添加對方的好友申請以後 服務端 好友表的 status 這個字段有就有值了 目前是在兩個端看到的是不一樣 請求端是 請求添加 接收到這個被添加的請求端的 狀態是 請求被添加  此時服務端還做了一件事 發了一個 添加好友的消息(這裏的消息爲融雲內置消息) 給被請求好友端 被請求好友端 收到這個消息(接收消息的監聽) 去刷新好友列表的 status 狀態

1

 @Override
    public boolean onReceived(Message message, int i) {
        MessageContent messageContent = message.getContent();
        if (messageContent instanceof ContactNotificationMessage) {
            BroadcastManager.getInstance(mContext).sendBroadcast(FRIEND_MESSAGE);
        }

上面的代碼片段是接收消息的監聽 收到 服務端推來的好友消息後 發送一個廣播去通知刷新好友列表 在上面的 gif 圖當中也就是點開驗證消息後的界面


http://webim.demo.rong.io/process_request_friend

請求方式:POST
參數:(Integer $id, Boolean $is_access)
O false 不接收
1 true接收
返回成功json:

{"code":200}
{"code":111,"message":"credential is error"}
{"code":306,"message":"unknow error"}

上面的 接口也有是當我收到對方加我爲好友的消息後 在服務端存儲的狀態爲 3 也就是請求被添加時候使用的 這個時候 我可以發個請求同意對方添加我爲好友 去改變服務端 存儲的 status 這個時候狀態的 1 也就是你們互相爲好友關係了 其實說白了也就是 我請求 和 被請求都是去即使的查詢服務端存儲的好友關係的 status 如果爲 1 我們就把對方的 userid 

做成一個 好友實體 展示在好友列表了 


好了 ,相信你此時如果認真仔細的研讀了上面的 gif 圖片和 和 概念 還有接口代碼 , 我相信好友關係的實現對你來說並不是難事了!

相關資料提供:

筆者演示 gif 的開源項目地址 : https://github.com/13120241790/Seal 歡迎 star or fork 

融雲 Demo server 地址:https://github.com/rongcloud/demo-server-php

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章