OPPO Fluid Cloud Push Guide

更新时间:
复制 MD 格式

Preparations

Before you can use the OPPO Fluid Cloud feature, you must complete the following preparations:

  1. Integrate the software development kit (SDK) and the OPPO channel. For more information, see Android SDK integration and OPPO channel integration.

  2. Refer to Access Preparation to clarify your requirements and contact OPPO for confirmation.

  3. Obtain the client_id and client_secret. Then, configure the Fluid Cloud ClientId and Fluid Cloud ClientSecret in the EMAS console. For more information, see Obtain client_id and client_secret and Configure channel keys.

Getting started

After you complete the preparations, follow these steps to quickly create a Fluid Cloud instance in a staging environment:

  1. Set up a staging environment on the client. For more information, see Environment setup.

  2. Call the Advanced push API. The following code provides a parameter example:

PushRequest pushRequest = new PushRequest();
// Basic parameters
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0 indicates the production environment, and 1 indicates the staging environment.

// Set the parameters for remotely creating a Fluid Cloud instance.
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": "Picking up",
            "legacyImg": "https://xxxx",
            "legacyText": "Picking up"
        },
        "primary": {
            "title": [
                { 
                    "text": "Driver is on the way",
                    "color": "#00FF00",
                    "darkColor": "#00FF00"
                }
            ],
            "content": "Yue BDG4251 Gray GAC Aion",
            "rightImg": "https://xxxx",
            "clickAction": "xxxx",
            "miniImg": "xxxx"
        },
        "secondaryData": {
            "type": "PROGRESS",
            "progress": 20,
            "indicatorImg": "https://xxxx",
            "style": "inside",
            "nodeLabels": ["Order accepted", "Pickup point", "Destination"]
        }
    }
}
""";
pushRequest.setAndroidOppoIntelligentIntent(startIntelligentIntent);

// Send the push notification.
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n", 
    pushResponse.getRequestId(), pushResponse.getMessageId());

The client displays the following:

screenshot_20251117_192953screenshot_20251117_193107

Core concepts

OPPO Fluid Cloud presents information in a lightweight, focused format. It flows freely between devices, consolidates various system interactions, and distributes them uniformly. The information is intelligently displayed in appropriate scenarios, so that users can receive it more intuitively.

Supported scenario types for Fluid Cloud

Scenario type

entityName value

Ride-hailing service

TAXI

Food delivery

DELIVERY

In-store pickup

PICKUP

Match scores

MATCH

Driving navigation

NAVIGATION

Task

TASK

Fluid Cloud style templates

Fluid Cloud currently offers five style templates: progress visualization, match, highlighted information, large graphic, and symmetrical.

Create, update, or end a Fluid Cloud instance on the client

When the application process is active, you can use ContentProviderClient to perform local operations on Fluid Cloud. For more information, see Intent Sharing (Client-side). For the parameter structure, see Intent Sharing Data Structure. For the actionStatus parameter, the values 0/1/2 correspond to the create, update, and end operations for Fluid Cloud, respectively.

Remotely create, update, or end a Fluid Cloud instance using the Mobile Push API

Mobile Push lets you remotely create, update, or end a Fluid Cloud instance using the Push or MassPush API.

Parameter settings

When you call the API, note the following key parameters:

  • PushType: Set this parameter to NOTICE when you push a Fluid Cloud notification.

  • AndroidTargetUserType or AndroidOppoIntentEnv: Set this parameter to 1 for the staging environment or 0 for the production environment.

  • AndroidOppoIntelligentIntent: A JSON string that represents the Fluid Cloud intent-sharing data structure IntelligentIntent, where actionStatus is set to 0/1/2 for creation, update, or end, respectively.

  • AndroidOppoDeleteIntentData: A JSON string that represents the data structure for deleting a Fluid Cloud intent. This parameter is typically used to forcibly end a Fluid Cloud instance when handling abnormal states. This parameter is invalid if the AndroidOppoIntelligentIntent parameter is also specified.

The following table describes the structure of AndroidOppoIntelligentIntent.

Parameter

Required

Parameter type

Description

intentName

String

Yes.

The name of the intent.

identifier

String

String

The unique ID for this intent sharing instance. You can generate a UUID or create an ID based on your business needs. This ID serves as the unique identifier for a single sharing record.

timestamp

Long

Yes, it is.

The system timestamp when the intent sharing occurs, in milliseconds.

serviceId

JSON

Yes, it is.

The card ID. Each serviceId corresponds to one card, and each entry point corresponds to one serviceId.

intentAction

JSON

JSON

Describes the action of the intent.

actionStatus

Int

Int

The operation type for the Fluid Cloud instance:

0. Creating Fluid Cloud

1. Update Fluid Cloud

2. Terminate Fluid Cloud.

intentEntity

JSON

Yes.

The entity information for intent sharing. This describes the content of the domain-specific entity.

entityName

String

Yes.

Vertical Domains

entityId

String

Yes, it is.

The entity ID. This is the unique identifier for the entity. You can use an identifier such as an order number.

milestone

JSON

Yes, it is.

The milestone status. For more information, see Domain Milestones.

capsule

JSON

Yes, it is.

The capsule information.

primary

JSON

JSON

The primary information for the card.

secondaryData

JSON

No

The extended information for the card.

extra

JSON

No.

Extended business data.

isSensitive

Boolean

No

Specifies whether sensitive data, such as amounts or geographical locations, is included. If you do not specify this parameter, no sensitive data is included by default.

...

-

No

Other business fields. These must be synchronized with OPPO.

Note

For more information about the AndroidOppoIntelligentIntent parameters for each style template, see the following documents:

The following table describes the structure of AndroidOppoDeleteIntentData.

Parameter

Required

Type

Description

intentName

String

Yes.

The name of the intent.

entityIds

List<String>

Yes, it is.

A list of entity IDs.

serviceId

JSON

JSON

A list of services.

Sample code

Remotely create a Fluid Cloud instance

PushRequest pushRequest = new PushRequest();
// Basic parameters
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0 indicates the production environment, and 1 indicates the staging environment.

// Set the parameters for remotely creating a Fluid Cloud instance.
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": "Picking up",
            "legacyImg": "https://xxxx",
            "legacyText": "Picking up"
        },
        "primary": {
            "title": [
                { 
                    "text": "Driver is on the way",
                    "color": "#00FF00",
                    "darkColor": "#00FF00"
                }
            ],
            "content": "Yue BDG4251 Gray GAC Aion",
            "rightImg": "https://xxxx",
            "clickAction": "xxxx",
            "miniImg": "xxxx"
        },
        "secondaryData": {
            "type": "PROGRESS",
            "progress": 20,
            "indicatorImg": "https://xxxx",
            "style": "inside",
            "nodeLabels": ["Order accepted", "Pickup point", "Destination"]
        }
    }
}
""";
pushRequest.setAndroidOppoIntelligentIntent(startIntelligentIntent);

// Send the push notification.
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n", 
    pushResponse.getRequestId(), pushResponse.getMessageId());

Remotely update a Fluid Cloud instance

PushRequest pushRequest = new PushRequest();
// Basic parameters
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0 indicates the production environment, and 1 indicates the staging environment.

// Set the parameters for remotely creating a Fluid Cloud instance.
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": "Boarding",
            "legacyImg": "https://xxxx",
            "legacyText": "Boarding"
        },
        "primary": {
            "title": [
                { 
                    "text": "Driver has arrived at the pickup point",
                    "color": "#00FF00",
                    "darkColor": "#00FF00"
                }
            ],
            "content": "Yue BDG4251 Gray GAC Aion",
            "rightImg": "https://xxxx",
            "clickAction": "xxxx",
            "miniImg": "xxxx"
        },
        "secondaryData": {
            "type": "PROGRESS",
            "progress": 50,
            "indicatorImg": "https://xxxx",
            "style": "inside",
            "nodeLabels": ["Order accepted", "Pickup point", "Destination"]
        }
    }
}
""";
pushRequest.setAndroidOppoIntelligentIntent(updateIntelligentIntent);

// Send the push notification.
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n", 
    pushResponse.getRequestId(), pushResponse.getMessageId());

Remotely end a Fluid Cloud instance

Method 1: End the instance using the AndroidOppoIntelligentIntent parameter

PushRequest pushRequest = new PushRequest();
// Basic parameters
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0 indicates the production environment, and 1 indicates the staging environment.

// Set the parameters for remotely creating a Fluid Cloud instance.
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": "Boarding",
            "legacyImg": "https://xxxx",
            "legacyText": "Boarding"
        },
        "primary": {
            "title": [
                { 
                    "text": "Driver has arrived at the pickup point",
                    "color": "#00FF00",
                    "darkColor": "#00FF00"
                }
            ],
            "content": "Yue BDG4251 Gray GAC Aion",
            "rightImg": "https://xxxx",
            "clickAction": "xxxx",
            "miniImg": "xxxx"
        },
        "secondaryData": {
            "type": "PROGRESS",
            "progress": 50,
            "indicatorImg": "https://xxxx",
            "style": "inside",
            "nodeLabels": ["Order accepted", "Pickup point", "Destination"]
        }
    }
}
""";
pushRequest.setAndroidOppoIntelligentIntent(stopIntelligentIntent);

// Send the push notification.
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n", 
    pushResponse.getRequestId(), pushResponse.getMessageId());

Method 2: End the instance using the AndroidOppoDeleteIntentData parameter

PushRequest pushRequest = new PushRequest();
// Basic parameters
pushRequest.setAppKey(appKey);
pushRequest.setPushType("NOTICE");
pushRequest.setDeviceType("ANDROID");
pushRequest.setTarget(target);
pushRequest.setTargetValue(targetValue);
pushRequest.setAndroidTargetUserType(1); // 0 indicates the production environment, and 1 indicates the staging environment.

// Set the parameters for remotely creating a Fluid Cloud instance.
String stopData = """
{
    "intentName": "Example.Progress",
    "entityIds": [
        "A580202509130712"
    ],
    "serviceId": {
        "launcher": "999800001",
        "fluidCloud": "999900001"
    }
}
""";
pushRequest.setAndroidOppoDeleteIntentData(stopData);

// Send the push notification.
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n", 
    pushResponse.getRequestId(), pushResponse.getMessageId());

Fluid Cloud limits

  • Fluid Cloud is supported on OPPO phones running ColorOS 15 and later. You must set up a staging environment on the client. For more information, see Environment setup.

  • Different entityName values have different card dismissal delays, which define the scenario exit time. The card is dismissed if no new data is pushed for the same order within this time. When the card is dismissed, all its entry points and the Breeno suggestion card disappear. The Fluid Cloud capsule has a system-imposed limit. On ColorOS 15, it is displayed for a maximum of 5 minutes, though this may vary on different OS versions, and is not affected by the card dismissal delay. For more information, see Domain Milestones.

Troubleshooting

Failed to create a Fluid Cloud instance

  1. Check if the device is running ColorOS 15 or later.

  2. Check if the intent sharing feature is enabled in the system. For more information, see Query switch.

  3. Check if a staging environment is set up on the client. For more information, see Environment setup.

  4. Use the message ID and device ID to check the Fluid Cloud push link on the Troubleshoot Message page of the troubleshooting tool in the Mobile Push console.

Failed to update or end a Fluid Cloud instance

  1. Check whether the entityId in the AndroidOppoIntelligentIntent or AndroidOppoDeleteIntentData parameter is the same as the entityId used when the Fluid Cloud instance was created.

  2. Use the message ID and device ID to check the Fluid Cloud push link on the Troubleshoot Message page of the troubleshooting tool in the Mobile Push console.