准备工作
在开始使用OPPO流体云功能之前,您需要完成以下准备工作:
已参考Android SDK接入与OPPO厂商通道集成完成SDK与OPPO厂商通道的接入。
已参考获取client_id和client_secret获取client_id与client_secret,并参考配置厂商通道密钥在EMAS控制台上配置流体云ClientId与流体云ClientSecret。
快速开始
完成准备工作后,您可以通过下面的步骤在测试环境快速创建一个流体云:
参考环境搭建,在客户端搭建测试环境。
调用Push - 高级推送接口,参数示例如下:
PushRequest pushRequest = new PushRequest();
// 基础参数
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0代表正式环境,1代表测试环境
// 设置远程创建流体云的参数
String startIntelligentIntent = """
{
"intentName": "Example.Progress",
"identifier": "d71ebd3119877b12ecdb6c4fe96b068e",
"timestamp": 1729485000989,
"serviceId": {
"launcher": "999800001",
"fluidCloud": "999900001"
},
"intentAction": {
"actionStatus": 0
},
"intentEntity": {
"entityName": "TAXI",
"entityId": "A580202509130712",
"milestone": {
"code": 30,
"text": "vehicle_coming"
},
"capsule": {
"leftImg": "https://xxxx",
"rightText": "接驾中",
"legacyImg": "https://xxxx",
"legacyText": "接驾中"
},
"primary": {
"title": [
{
"text": "司机正在赶来",
"color": "#00FF00",
"darkColor": "#00FF00"
}
],
"content": "粤BDG4251 灰 广汽埃安",
"rightImg": "https://xxxx",
"clickAction": "xxxx",
"miniImg": "xxxx"
},
"secondaryData": {
"type": "PROGRESS",
"progress": 20,
"indicatorImg": "https://xxxx",
"style": "inside",
"nodeLabels": ["接单", "上车点", "目的地"]
}
}
}
""";
pushRequest.setAndroidOppoIntelligentIntent(startIntelligentIntent);
// 发送推送
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n",
pushResponse.getRequestId(), pushResponse.getMessageId());客户端显示如下:


核心概念
OPPO流体云是信息的轻量形态,聚焦精炼,并能在不同设备之间自由流动,把系统中的多种交互形式进行了整合和归一,再统一分发,在适当的场景智能显示,让用户能够更直观地接收到这些信息。

流体云支持的场景类型
场景类型 | entityName取值 |
打车服务 | TAXI |
外卖配送 | DELIVERY |
到店取餐 | PICKUP |
赛事比分 | MATCH |
驾车导航 | NAVIGATION |
任务 | TASK |
流体云样式模板
流体云目前共有5种样式模板,分别为进度可视化模板、赛事模板、强调信息模板、大图形模板与对称模板。

客户端本地创建/更新/结束流体云
应用进程活跃时,可以参考意图共享(端侧)使用ContentProviderClient在客户端本地操作流体云,参数结构请参考意图共享数据结构。其中actionStatus参数设置为0/1/2时分别对应流体云的创建/更新/结束操作。
通过移动推送接口远程创建/更新/结束流体云
移动推送支持通过Push接口或MassPush接口远程创建/更新/结束流体云。
参数设置
调用接口时注意以下关键参数:
PushType: 推送流体云时固定设置为
NOTICE。AndroidTargetUserType或AndroidOppoIntentEnv: 测试环境设置为
1,正式环境设置为0。AndroidOppoIntelligentIntent: 流体云意图共享数据结构IntelligentIntent的JSON字符串,其中
actionStatus在创建/更新/结束时分别设置为0/1/2。AndroidOppoDeleteIntentData: 流体云意图删除数据结构data的JSON字符串,通常用于异常状态处理时强制结束流体云。当AndroidOppoIntelligentIntent参数已填写时此参数无效。
AndroidOppoIntelligentIntent的结构如下表所示:
参数 | 是否必选 | 参数类型 | 描述 |
intentName | String | 是 | 意图名称 |
identifier | String | 是 | 本次意图共享的唯一id,可用UUID生成,开发者按照自身业务需要生成,作为单条共享记录的唯一标识符 |
timestamp | Long | 是 | 意图共享发生的系统时间戳,单位为毫秒 |
serviceId | JSON | 是 | 卡片ID,每个serviceId对应一张卡片,每个入口对应一个serviceId |
intentAction | JSON | 是 | 用于描述意图的动作 |
actionStatus | Int | 是 | 流体云操作类型:
|
intentEntity | JSON | 是 | 意图共享实体信息,用于描述意图的垂域实体内容 |
entityName | String | 是 | 垂域名称 |
entityId | String | 是 | 实体ID,用于描述实体的唯一标识符,业务可传订单号之类的标识 |
milestone | JSON | 是 | 里程碑状态,详见垂域里程碑 |
capsule | JSON | 是 | 胶囊信息 |
primary | JSON | 是 | 卡片主要信息 |
secondaryData | JSON | 否 | 卡片扩展信息 |
extra | JSON | 否 | 业务扩展数据 |
isSensitive | Boolean | 否 | 是否包含敏感数据,如金额、地理位置等,不传默认不包含 |
... | - | 否 | 其他业务字段,需同步OPPO |
AndroidOppoDeleteIntentData的结构如下表所示:
参数 | 是否必选 | 参数类型 | 描述 |
intentName | String | 是 | 意图名称 |
entityIds | List<String> | 是 | 实体id列表 |
serviceId | JSON | 是 | 服务列表 |
示例代码
远程创建流体云
PushRequest pushRequest = new PushRequest();
// 基础参数
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0代表正式环境,1代表测试环境
// 设置远程创建流体云的参数
String startIntelligentIntent = """
{
"intentName": "Example.Progress",
"identifier": "d71ebd3119877b12ecdb6c4fe96b068e",
"timestamp": 1729485000989,
"serviceId": {
"launcher": "999800001",
"fluidCloud": "999900001"
},
"intentAction": {
"actionStatus": 0
},
"intentEntity": {
"entityName": "TAXI",
"entityId": "A580202509130712",
"milestone": {
"code": 30,
"text": "vehicle_coming"
},
"capsule": {
"leftImg": "https://xxxx",
"rightText": "接驾中",
"legacyImg": "https://xxxx",
"legacyText": "接驾中"
},
"primary": {
"title": [
{
"text": "司机正在赶来",
"color": "#00FF00",
"darkColor": "#00FF00"
}
],
"content": "粤BDG4251 灰 广汽埃安",
"rightImg": "https://xxxx",
"clickAction": "xxxx",
"miniImg": "xxxx"
},
"secondaryData": {
"type": "PROGRESS",
"progress": 20,
"indicatorImg": "https://xxxx",
"style": "inside",
"nodeLabels": ["接单", "上车点", "目的地"]
}
}
}
""";
pushRequest.setAndroidOppoIntelligentIntent(startIntelligentIntent);
// 发送推送
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n",
pushResponse.getRequestId(), pushResponse.getMessageId());远程更新流体云
PushRequest pushRequest = new PushRequest();
// 基础参数
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0代表正式环境,1代表测试环境
// 设置远程创建流体云的参数
String updateIntelligentIntent = """
{
"intentName": "Example.Progress",
"identifier": "d71ebd3119877b12ecdb6c4fe96b068e",
"timestamp": 1729485000989,
"serviceId": {
"launcher": "999800001",
"fluidCloud": "999900001"
},
"intentAction": {
"actionStatus": 1
},
"intentEntity": {
"entityName": "TAXI",
"entityId": "A580202509130712",
"milestone": {
"code": 30,
"text": "vehicle_coming"
},
"capsule": {
"leftImg": "https://xxxx",
"rightText": "上车中",
"legacyImg": "https://xxxx",
"legacyText": "上车中"
},
"primary": {
"title": [
{
"text": "司机到达上车点",
"color": "#00FF00",
"darkColor": "#00FF00"
}
],
"content": "粤BDG4251 灰 广汽埃安",
"rightImg": "https://xxxx",
"clickAction": "xxxx",
"miniImg": "xxxx"
},
"secondaryData": {
"type": "PROGRESS",
"progress": 50,
"indicatorImg": "https://xxxx",
"style": "inside",
"nodeLabels": ["接单", "上车点", "目的地"]
}
}
}
""";
pushRequest.setAndroidOppoIntelligentIntent(updateIntelligentIntent);
// 发送推送
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n",
pushResponse.getRequestId(), pushResponse.getMessageId());远程结束流体云
方式一:通过AndroidOppoIntelligentIntent参数结束流体云
PushRequest pushRequest = new PushRequest();
// 基础参数
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0代表正式环境,1代表测试环境
// 设置远程创建流体云的参数
String stopIntelligentIntent = """
{
"intentName": "Example.Progress",
"identifier": "d71ebd3119877b12ecdb6c4fe96b068e",
"timestamp": 1729485000989,
"serviceId": {
"launcher": "999800001",
"fluidCloud": "999900001"
},
"intentAction": {
"actionStatus": 2
},
"intentEntity": {
"entityName": "TAXI",
"entityId": "A580202509130712",
"milestone": {
"code": 30,
"text": "vehicle_coming"
},
"capsule": {
"leftImg": "https://xxxx",
"rightText": "上车中",
"legacyImg": "https://xxxx",
"legacyText": "上车中"
},
"primary": {
"title": [
{
"text": "司机到达上车点",
"color": "#00FF00",
"darkColor": "#00FF00"
}
],
"content": "粤BDG4251 灰 广汽埃安",
"rightImg": "https://xxxx",
"clickAction": "xxxx",
"miniImg": "xxxx"
},
"secondaryData": {
"type": "PROGRESS",
"progress": 50,
"indicatorImg": "https://xxxx",
"style": "inside",
"nodeLabels": ["接单", "上车点", "目的地"]
}
}
}
""";
pushRequest.setAndroidOppoIntelligentIntent(stopIntelligentIntent);
// 发送推送
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n",
pushResponse.getRequestId(), pushResponse.getMessageId());方式二:通过AndroidOppoDeleteIntentData参数结束流体云
PushRequest pushRequest = new PushRequest();
// 基础参数
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0代表正式环境,1代表测试环境
// 设置远程创建流体云的参数
String stopData = """
{
"intentName": "Example.Progress",
"entityIds": [
"A580202509130712"
],
"serviceId": {
"launcher": "999800001",
"fluidCloud": "999900001"
}
}
""";
pushRequest.setAndroidOppoDeleteIntentData(stopData);
// 发送推送
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n",
pushResponse.getRequestId(), pushResponse.getMessageId());流体云限制
流体云支持ColorOS15及以上的OPPO手机,测试环境需要参考环境搭建在客户端搭建。
不同的entityName具有不同的销卡延时,即场景退出时间,同一个订单超过该时间没有收到新的数据推送,则会销卡,流体云卡片所有入口和小布建议卡片都会消失;流体云胶囊受系统限制,在OS15最长只能显示5分钟(不同OS系统有差异),不受销卡延时控制。详情请参考垂域里程碑
问题排查
创建流体云失败
检查设备机型是否为ColorOS15及以上。
参考查询开关检查系统的意图共享特性开关是否打开。
检查是否已按照环境搭建在客户端搭建测试环境。
根据消息ID与设备ID在移动推送控制台的排查工具->排查消息页面检查流体云推送链路。
更新/结束流体云失败
检查
AndroidOppoIntelligentIntent参数或AndroidOppoDeleteIntentData中的entityId是否与创建流体云时的entityId相同。根据消息ID与设备ID在移动推送控制台的排查工具->排查消息页面检查流体云推送链路。