OPPO流体云推送指南

更新时间:
复制为 MD 格式

准备工作

在开始使用OPPO流体云功能之前,您需要完成以下准备工作:

  1. 已参考Android SDK接入OPPO厂商通道集成完成SDKOPPO厂商通道的接入。

  2. 已参考接入准备明确需求信息,并联系OPPO进行确认。

  3. 已参考获取client_idclient_secret获取client_idclient_secret,并参考配置厂商通道密钥EMAS控制台上配置流体云ClientId与流体云ClientSecret。

快速开始

完成准备工作后,您可以通过下面的步骤在测试环境快速创建一个流体云:

  1. 参考环境搭建,在客户端搭建测试环境。

  2. 调用高级推送接口,参数示例如下:

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());

客户端显示如下:

screenshot_20251117_192953screenshot_20251117_193107

核心概念

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

image

流体云支持的场景类型

场景类型

entityName取值

打车服务

TAXI

外卖配送

DELIVERY

到店取餐

PICKUP

赛事比分

MATCH

驾车导航

NAVIGATION

任务

TASK

流体云样式模板

流体云目前共有5种样式模板,分别为进度可视化模板、赛事模板、强调信息模板、大图形模板与对称模板。

image

客户端本地创建/更新/结束流体云

应用进程活跃时,可以参考意图共享(端侧)使用ContentProviderClient在客户端本地操作流体云,参数结构请参考意图共享数据结构。其中actionStatus参数设置为0/1/2时分别对应流体云的创建/更新/结束操作。

通过移动推送接口远程创建/更新/结束流体云

移动推送支持通过Push接口或MassPush接口远程创建/更新/结束流体云。

参数设置

调用接口时注意以下关键参数:

  • PushType: 推送流体云时固定设置为 NOTICE

  • AndroidTargetUserTypeAndroidOppoIntentEnv: 测试环境设置为 1,正式环境设置为0

  • AndroidOppoIntelligentIntent: 流体云意图共享数据结构IntelligentIntentJSON字符串,其中actionStatus在创建/更新/结束时分别设置为0/1/2

  • AndroidOppoDeleteIntentData: 流体云意图删除数据结构dataJSON字符串,通常用于异常状态处理时强制结束流体云。当AndroidOppoIntelligentIntent参数已填写时此参数无效。

AndroidOppoIntelligentIntent的结构如下表所示:

参数

是否必选

参数类型

描述

intentName

String

意图名称

identifier

String

本次意图共享的唯一id,可用UUID生成,开发者按照自身业务需要生成,作为单条共享记录的唯一标识符

timestamp

Long

意图共享发生的系统时间戳,单位为毫秒

serviceId

JSON

卡片ID,每个serviceId对应一张卡片,每个入口对应一个serviceId

intentAction

JSON

用于描述意图的动作

actionStatus

Int

流体云操作类型:

0: 创建流体云

1: 更新流体云

2: 结束流体云

intentEntity

JSON

意图共享实体信息,用于描述意图的垂域实体内容

entityName

String

垂域名称

entityId

String

实体ID,用于描述实体的唯一标识符,业务可传订单号之类的标识

milestone

JSON

里程碑状态,详见垂域里程碑

capsule

JSON

胶囊信息

primary

JSON

卡片主要信息

secondaryData

JSON

卡片扩展信息

extra

JSON

业务扩展数据

isSensitive

Boolean

是否包含敏感数据,如金额、地理位置等,不传默认不包含

...

-

其他业务字段,需同步OPPO

说明

各样式模板的AndroidOppoIntelligentIntent参数的详细说明请参考文档:

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系统有差异),不受销卡延时控制。详情请参考垂域里程碑

问题排查

创建流体云失败

  1. 检查设备机型是否为ColorOS15及以上。

  2. 参考查询开关检查系统的意图共享特性开关是否打开。

  3. 检查是否已按照环境搭建在客户端搭建测试环境。

  4. 根据消息ID与设备ID在移动推送控制台的排查工具->排查消息页面检查流体云推送链路。

更新/结束流体云失败

  1. 检查AndroidOppoIntelligentIntent参数或AndroidOppoDeleteIntentData中的entityId是否与创建流体云时的entityId相同。

  2. 根据消息ID与设备ID在移动推送控制台的排查工具->排查消息页面检查流体云推送链路。