七鱼开发文档中心
总览服务端 APIWebiOSAndroid鸿蒙Uniapp微信小程序插件三方接入

自定义消息

本节说明自定义消息的展示、存储、插入、更新和删除等扩展能力。

自定义消息

自定义消息展示

自定义消息通过 MsgCustomizationRegistry 注册,业务处理器实现 UnicornMessageHandler。

在平时使用 ListView 和 RecyclerView 的时候可以根据数据源的不同使用不同的 item 布局,SDK 也是采取了这种方式去展示消息的,当 SDK 收到消息时,会根据 IMessage(消息载体) 中不同的 Attachment(数据源) 展示不同的布局(每种布局都是一个 ViewHolder)。SDK加入了用户自定义处理消息的接口,App 可以通过该接口去实现消息的处理,App 可以根据消息中的 attachment 类型去做不同的处理,但这个处理不会影响SDK 的展示。

//告诉 SDK 语音消息不需要展示 UI 了
MsgCustomizationRegistry.hideViewForMsgType(AudioAttachment.class);
//注册 handler 的工厂
MsgCustomizationRegistry.registerMessageHandlerFactory(new MessageHandlerFactory() {
    @Override
    public UnicornMessageHandler handlerOf(UnicornMessage message) {
        //下面是根据不同的消息进行不同的处理
        if(message.getAttachment() instanceof AudioAttachment){
            return new AudioDemoHandler();  //自定义处理音频消息的 Handler
        }else if(message.getAttachment() instanceof ImageAttachment){
            return new ImageDemoHandler();  //自定义的图片消息
        }else if(message.getAttachment() instanceof ProductAttachment){
            return new ProductDemoHandler(); //自定义商品消息
        }else {
            return null;  //不做处理
        }
    }
});

当我们处理的消息不希望展示在客服界面的时候,可以使用MsgCustomizationRegistry.hideViewForMsgType去隐藏。

在 SDK 初始化的时候,可以注册一个 Factory,当 SDK 收到消息的时候回调用 handlerOf 方法,在 handlerOf 方法中可以根据不同的 attachment 返回不同的 handler,返回之后会调用 Handler 的 onMessage 方法,上面的三个 handler 都是需要 App 通过继承 UnicornMessageHandler 类去实现,下面的代码展示了如何自定义一个 handler:

public class DemoMsgHandler implements UnicornMessageHandler {
    /**
     *
     * @param context: 消息流所在的上下文
     * @param message:你将要处理的 message ,通过 message.getAttachment 可以拿到你注册的 attachment
     * @param handledOnce:之前是否已经成功处理过该消息,有些活动只需要处理一次,例如一条订单消息只需要弹一次订单列表,所以可以根据这个参数去判断是否需要处理
     * @return 是否处理了该消息,true 为处理了该消息,false 为没处理该消息
     */
    @Override
    public boolean onMessage(Context context, UnicornMessage message, boolean handledOnce) {
        //此方里面可以进行一些处理跳转界面,弹框等操作
        Intent intent = new Intent(context, OrderListActivity.class);
        context.startActivity(intent);
        return true;
    }
}

这篇文档有帮助吗?

目录