在手机端的消息推送、社交应用开发场景中,发送xml卡片是展示富文本信息、交互按钮的常用方式,不同平台的xml卡片结构和发送规则存在差异,需要针对性适配。

xml卡片的基本结构
xml卡片本质是符合特定平台规范的xml格式字符串,通常包含标题、描述、封面图、跳转链接、按钮等字段,不同平台对字段的命名和必填项要求不同。以企业微信的xml卡片为例,基础结构如下:
<xml>
<ToUserName><![CDATA[接收用户ID]]></ToUserName>
<FromUserName><![CDATA[发送方ID]]></FromUserName>
<CreateTime>1690000000</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[卡片标题]]></Title>
<Description><![CDATA[卡片描述内容]]></Description>
<PicUrl><![CDATA[https://ipipp.com/cover.jpg]]></PicUrl>
<Url><![CDATA[https://ipipp.com/detail]]></Url>
</item>
</Articles>
</xml>
手机端发送xml卡片的实现步骤
1. 确定目标平台的规范
首先需要明确要发送xml卡片的平台,比如企业微信、微信公众号、钉钉等,每个平台都有官方提供的xml卡片格式文档,需要严格按照文档定义字段,否则会出现发送失败或者卡片显示异常的问题。
2. 构造符合规范的xml字符串
根据平台规范拼接xml内容,注意所有文本内容如果包含特殊字符,需要放在<![CDATA[]]>标签中,避免xml解析错误。如果是动态内容,需要对特殊字符做转义处理。
3. 调用平台提供的发送接口
手机端如果是原生开发,需要通过对应平台的SDK调用消息发送接口,将构造好的xml字符串作为参数传入。如果是前端H5页面,通常需要通过后端中转,由后端调用平台的消息推送接口完成发送。
安卓端原生发送示例
以企业微信安卓端发送xml卡片为例,核心代码如下:
// 构造xml卡片字符串
String xmlContent = "<xml>" +
"<ToUserName><![CDATA[User123]]></ToUserName>" +
"<FromUserName><![CDATA[CorpApp]]></FromUserName>" +
"<CreateTime>" + System.currentTimeMillis() / 1000 + "</CreateTime>" +
"<MsgType><![CDATA[news]]></MsgType>" +
"<ArticleCount>1</ArticleCount>" +
"<Articles>" +
"<item>" +
"<Title><![CDATA[活动通知]]></Title>" +
"<Description><![CDATA[本周六有线下交流活动,点击查看详情]]></Description>" +
"<PicUrl><![CDATA[https://ipipp.com/activity.jpg]]></PicUrl>" +
"<Url><![CDATA[https://ipipp.com/activity]]></Url>" +
"</item>" +
"</Articles>" +
"</xml>";
// 调用企业微信发送接口
WeChatWorkApi.sendXmlMessage(xmlContent, new Callback() {
@Override
public void onSuccess() {
// 发送成功处理
}
@Override
public void onFail(String errorMsg) {
// 发送失败处理
}
});
常见问题排查
- 卡片显示空白:检查xml结构是否符合平台规范,必填字段是否缺失,文本内容是否做了正确的转义
- 发送失败报错:检查调用接口的权限是否配置,发送方的身份ID是否正确,xml字符串是否包含非法字符
- 跳转链接无效:确认链接地址是否正确,平台是否允许跳转外部链接,部分平台要求跳转链接必须在白名单内
注意:如果是个人微信场景,目前官方不支持自定义xml卡片的发送,仅企业主体相关的平台支持该能力,开发前需要确认平台的开放权限。