一、前言
这样的需求也比较常见,实现起来也比较简单。但往往要控制谁能看见,谁不能看见的。
二、效果图
提示消息.png三、解决思路
正常的自定义消息应该你们会了。说下如何控制谁能看见问题。如果要通知栏显示,即消息需要有app服务器发送,服务端发送的api中有个setIsIncludeSender方法。不要通知栏的,app服务器发送透传消息给app,app判断后本地添加。
四、关键的提示消息体和模板代码
@MessageTag(value = "customize_tip_message", flag = 3)
public class CustomizeTipsMessage extends MessageContent {
public static final int DEFAULT_TYPE = 0; //0不进行任何跳转
public static final int JUMP_BAIDU_MATCH_TYPE = 1; //跳转到百度真人认证
public static final int JUMP_MY_AWARD = 2; //跳转到我的奖励(积分界面)
public static final int JUMP_CHAT_SETTING = 3; //跳转到聊天设置
public static final int JUMP_GIFT_DIALOG = 4; //弹起送礼物弹框
private String content; //整体文案,传的是html文本,因为有些文本需要高亮显示
private int showLeftTip; //默认0不显示 ,1为显示,用int,不用布尔型
// 示例
/**
* tvUsedTime.setText(Html.fromHtml("认证状态:<font color='#aaaaaa'>认证审核中</font>你们好"));
* 如果接口只需返回“认证状态:<font color='#aaaaaa'>认证审核中</font>你们好”
*/
private int jumpType; //用于判断点击跳转
private String outContent; //用于外面会话列表的文案,为空时统一用“温馨提示”文案
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getJumpType() {
return jumpType;
}
public void setJumpType(int jumpType) {
this.jumpType = jumpType;
}
public String getOutContent() {
return outContent;
}
public void setOutContent(String outContent) {
this.outContent = outContent;
}
public int getShowLeftTip() {
return showLeftTip;
}
public void setShowLeftTip(int showLeftTip) {
this.showLeftTip = showLeftTip;
}
public CustomizeTipsMessage(String content, int jumpType, int showLeftTip,String outContent) {
this.content = content;
this.jumpType = jumpType;
this.showLeftTip = showLeftTip;
this.outContent = outContent;
}
@Override
public byte[] encode() {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("content",getContent());
jsonObject.put("jumpType",getJumpType());
jsonObject.put("showLeftTip",getShowLeftTip());
jsonObject.put("outContent",getOutContent());
} catch (JSONException e) {
e.printStackTrace();
}
try{
return jsonObject.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public CustomizeTipsMessage(byte [] data){
String str = null ;
try{
str = new String(data,"UTF-8") ;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try{
JSONObject json = new JSONObject(str);
if(json.has("content")){
content = json.optString("content");
}
if(json.has("jumpType")){
jumpType = json.optInt("jumpType");
}
if(json.has("showLeftTip")){
showLeftTip = json.optInt("showLeftTip");
}
if(json.has("outContent")){
outContent = json.optString("outContent");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public CustomizeTipsMessage(Parcel in){
this.content = ParcelUtils.readFromParcel(in) ;
this.jumpType = ParcelUtils.readIntFromParcel(in);
this.showLeftTip = ParcelUtils.readIntFromParcel(in);
this.outContent = ParcelUtils.readFromParcel(in) ;
}
public static final Creator<CustomizeTipsMessage> CREATOR = new Creator<CustomizeTipsMessage>() {
@Override
public CustomizeTipsMessage createFromParcel(Parcel parcel) {
return new CustomizeTipsMessage(parcel);
}
@Override
public CustomizeTipsMessage[] newArray(int i) {
return new CustomizeTipsMessage[i];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
ParcelUtils.writeToParcel(parcel,content);
ParcelUtils.writeToParcel(parcel,jumpType);
ParcelUtils.writeToParcel(parcel,showLeftTip);
ParcelUtils.writeToParcel(parcel,outContent);
}}
CustomizeTipsMessageProvider
class CustomizeTipsMessageProvider : BaseMessageItemProvider<CustomizeTipsMessage>() {
override fun onCreateMessageContentViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val rootView =
LayoutInflater.from(parent.context).inflate(R.layout.rc_my_tip_item, parent, false)
ShapeUtils.setShapeCorner2Color(
rootView,
parent.context.resources.getColor(R.color.color_EA),
dp2px(parent.context, 6).toFloat()
)
//parent.setBackgroundColor(parent.context.getColors(R.color.rc_background_main_color))
return ViewHolder(parent.context, rootView)
}
override fun bindMessageContentViewHolder(
viewHolder: ViewHolder,
parentHolder: ViewHolder,
customizeTipsMessage: CustomizeTipsMessage,
uiMessage: UiMessage,
i: Int,
list: List<UiMessage>,
iViewProviderListener: IViewProviderListener<UiMessage>
) {
//Log.i("bindMessageContentViewHolder1",customizeTipsMessage.getContent());
//LogUtils.INSTANCE.o("bindMessageContentViewHolder1",customizeTipsMessage);
(viewHolder.getView<View>(R.id.tv_tip_content) as TextView).text =
Html.fromHtml(customizeTipsMessage.content)
viewHolder.setVisible(R.id.tv_tip_tag,customizeTipsMessage.showLeftTip== 1)
}
override fun bindViewHolder(
holder: ViewHolder,
uiMessage: UiMessage?,
position: Int,
list: MutableList<UiMessage>?,
listener: IViewProviderListener<UiMessage>?
) {
super.bindViewHolder(holder, uiMessage, position, list, listener)
holder.setBackgroundColor(R.id.rc_content,holder.context.getColors(R.color.rc_background_main_color))
}
override fun onItemClick(
viewHolder: ViewHolder,
customizeTipsMessage: CustomizeTipsMessage,
uiMessage: UiMessage,
i: Int,
list: List<UiMessage>,
iViewProviderListener: IViewProviderListener<UiMessage>
): Boolean {
LogUtils.i("onItemClickTip",customizeTipsMessage.jumpType.toString())
when (customizeTipsMessage.jumpType) {
CustomizeTipsMessage.JUMP_BAIDU_MATCH_TYPE -> {
AppRouter.goRealPersonAuth()
return true
}
CustomizeTipsMessage.JUMP_MY_AWARD -> {
CRouter.go(AppRouter.appProfit)
return true
}
CustomizeTipsMessage.JUMP_CHAT_SETTING -> {
CRouter.go(AppRouter.appChatSetting)
return true
}
CustomizeTipsMessage.JUMP_GIFT_DIALOG -> {
try {
val toUserId = AES128ECB.Decrypt(uiMessage.targetId).toInt() //解密 后对方的用户ID;
CommonViewModel(CommonRepository()).getGiftPrices(viewHolder.context!!,toUserId){ giftPrice, giftNum ->
ImUtils.sendGiftMessage(giftPrice.img,giftPrice.name,giftNum,
CustomizeGiftsMessage.NORMAL_GIFT_TYPE,uiMessage.targetId)
}
} catch (e: Exception) {
e.printStackTrace()
}
return true
}
}
return false
}
override fun isMessageViewType(messageContent: MessageContent): Boolean {
return messageContent is CustomizeTipsMessage
}
override fun getSummarySpannable(
context: Context,
customizeTipsMessage: CustomizeTipsMessage
): Spannable {
if (!customizeTipsMessage.outContent.isNullOrEmpty()){
return SpannableString(customizeTipsMessage.outContent)
}
return SpannableString(context.getString(R.string.warn_msg_tip))
}
/**
* @desc : 配置头像是否显示,居中显示
* @author : congge on 2022-02-18 18:14
*/
init {
mConfig.showPortrait = false
mConfig.centerInHorizontal = true
}}
有问题的可以私信我,解决融云IM的各种问题。
网友评论