自定义消息
本节说明自定义消息的展示、存储、插入、更新和删除等扩展能力。
自定义消息
自定义消息展示
自定义消息通过 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;
}
}这篇文档有帮助吗?