日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网易云信集成视频教程(三):如何通过SDK实现自定义消息?

發布時間:2025/3/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易云信集成视频教程(三):如何通过SDK实现自定义消息? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上期我們介紹了Android如何通過Uikit集成單聊模塊,第三期視頻教程我們將教大家如何通過SDK實現自定義消息。

前期準備

  • 從官網開發文檔自定義消息流程(https://dev.yunxin.163.com/docs/product/IM%E5%8D%B3%E6%97%B6%E9%80%9A%E8%AE%AF/SDK%E5%BC%80%E5%8F%91%E9%9B%86%E6%88%90/Android%E5%BC%80%E5%8F%91%E9%9B%86%E6%88%90/%E6%B6%88%E6%81%AF%E6%94%B6%E5%8F%91?#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B6%88%E6%81%AF)
  • 參考BBS上如何通過SDK實現類似微信骰子的功能
  • (https://bbs.yunxin.163.com/forum.php?mod=viewthread&tid=23&highlight=%E9%AA%B0%E5%AD%90)

    ?

    ?

    代碼部分

    大概思路是這樣的

  • 第一步,定義自定義消息的類型
  • public interface CustomAttachmentType{int Guess=1;//猜拳int Craps=2;//骰子}

    ?

  • 第二步,定義一個自定義消息附件的基類,負責解析你自定義消息的公用字段,比如類型等
  • 注意: 實現?MsgAttachment?接口的成員都要實現 Serializable。

    public abstract class CustomAttachment implements MsgAttachment {protected int type;CustomAttachment(int type) {this.type = type;}public void fromJson(JSONObject data) {if (data != null) {parseData(data);}}@Overridepublic String toJson(boolean send) {return CustomAttachParser.packData(type, packData());}public int getType() {return type;}protected abstract void parseData(JSONObject data);protected abstract JSONObject packData();}

    ?

  • 第三步,繼承基類,實現“骰子”附件類型
  • 注意: 成員變量都要實現Serializable。

    public class CrapsAttachment extends CustomAttachment{public enum Craps {one(1, "1"),two(2, "2"),three(3, "3"),four(4, "4"),five(5, "5"),six(6, "6"),;private int value;private String desc;Craps(int value, String desc) {this.value = value;this.desc = desc;}static Craps enumOfValue(int value) {for (Craps direction : values()) {if (direction.getValue() == value) {return direction;}}return one;}public int getValue() {return value;}public String getDesc() {return desc;}}private Craps value;public CrapsAttachment() {super(CustomAttachmentType.Craps);random();}@Overrideprotected void parseData(JSONObject data) {value = Craps.enumOfValue(data.getIntValue("value"));}@Overrideprotected JSONObject packData() {JSONObject data = new JSONObject();data.put("value", value.getValue());return data;}private void random() {int value = new Random().nextInt(6) + 1;this.value = Craps.enumOfValue(value);}public Craps getValue() {return value;}}

    ?

  • 第四步,實現自定義消息的附件解析器
  • public class CustomAttachParser implements MsgAttachmentParser {private static final String KEY_TYPE = "type";private static final String KEY_DATA = "data";@Overridepublic MsgAttachment parse(String json) {CustomAttachment attachment = null;try {JSONObject object = JSON.parseObject(json);int type = object.getInteger(KEY_TYPE);JSONObject data = object.getJSONObject(KEY_DATA);switch (type) {case CustomAttachmentType.Guess:attachment = new GuessAttachment();break;case CustomAttachmentType.Craps:attachment = new CrapsAttachment();break;}if (attachment != null) {attachment.fromJson(data);}} catch (Exception e) {}return attachment;}public static String packData(int type, JSONObject data) {JSONObject object = new JSONObject();object.put(KEY_TYPE, type);if (data != null) {object.put(KEY_DATA, data);}return object.toJSONString();}}

    ?

  • 第五步,將自定義消息展示在UI上(這里簡單以文字展示)
  • public class MsgViewHolderCraps extends MsgViewHolderText{public MsgViewHolderCraps(BaseMultiItemFetchLoadAdapter adapter) {super(adapter);}@Overrideprotected String getDisplayText() {CrapsAttachment crapsAttachment = (CrapsAttachment) message.getAttachment();return crapsAttachment.getValue().getDesc()+"點!";}}

    ?

  • 第六步,發送自定義消息
  • public class CrapsAction extends BaseAction {public CrapsAction(){super(R.drawable.message_plus_guess_selector, R.string.input_craps);}@Overridepublic void onClick() {CrapsAttachment attachment = new CrapsAttachment();IMMessage message = MessageBuilder.createCustomMessage(getAccount(), getSessionType(), attachment.getValue().getDesc(), attachment);sendMessage(message);}}

    ?

  • 第七步,將附件解析器注冊到SDK中,為保證生成歷史消息時能夠正確解析自定義附件,注冊一般放在Applicaton的OnCreate中完成
  • 第八步,注冊擴展消息類型顯示的ViewHolder,由于這里使用我們Uikit,所以也需要注冊到Application的OnCreate里面
  • 第九步,添加“骰子”的按鈕到“+”中,Demo是在SessionHelper類中定制的單聊界面
  • 注:第七八九三步可以直接一起做,在Application中初始化SessionHelper,然后在SessionHelper中注冊解析器以及UI

    public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// SDK初始化(啟動后臺服務,若已經存在用戶登錄信息, SDK 將完成自動登錄)NIMClient.init(this, null, null);if(NIMUtil.isMainProcess(this)){//初始化UIKITNimUIKit.init(this);SessionHelper.init();}}}

    ?

    public class SessionHelper? {private static SessionCustomization p2pCustomization;public static void init(){//解析器NIMClient.getService(MsgService.class).registerCustomAttachmentParser(new CustomAttachParser());//猜拳的UINimUIKit.registerMsgItemViewHolder(GuessAttachment.class, MsgViewHolderGuess.class);//骰子的uiNimUIKit.registerMsgItemViewHolder(CrapsAttachment.class, MsgViewHolderCraps.class);NimUIKit.setCommonP2PSessionCustomization(getP2pCustomization());}// 定制化單聊界面。如果使用默認界面,返回null即可private static SessionCustomization getP2pCustomization() {if(p2pCustomization == null){p2pCustomization = new SessionCustomization();// 定制加號點開后可以包含的操作, 默認已經有圖片,視頻等消息了ArrayList<BaseAction> actions = new ArrayList<>();actions.add(new GuessAction());actions.add(new CrapsAction());p2pCustomization.actions = actions;}return p2pCustomization;}}

    這里就完美實現了Android自定義消息,趕緊去試試吧~

    想看更多集成視頻教程,請戳https://netease.im/videoTutorial

    總結

    以上是生活随笔為你收集整理的网易云信集成视频教程(三):如何通过SDK实现自定义消息?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。