Whale order, account, and other business messages can reach a Customer in two ways: Whale manages the cloud-push channels and delivers directly to devices, or Whale forwards the message to Broker Server and Broker decides whether and how to distribute it.
This page explains the overall options and responsibility boundaries. The original configuration fields and complete examples are retained in:
| Item | Whale-managed push | Broker-owned push |
|---|---|---|
| Path | Whale → cloud push → APNs / Android vendor → App | Whale → Broker Server → Broker channel → App |
| Broker Server development | None | Build message receipt, handling, and distribution |
| Cloud configuration | Broker securely provides App channel credentials to Whale | Broker manages credentials and normally does not provide them to Whale |
| Message control | Whale-configured templates and policies | Broker can filter, merge, delay, and select channels |
| App work | Register device and pass messages to WhaleApp SDK | Register Broker channel and pass the standard message to WhaleApp SDK |
| Best fit | Faster delivery with less server development | Existing message platform or custom distribution requirements |
Choose Broker-owned push when Broker already has a mature message center, marketing policy, or several downstream channels. Choose Whale-managed push when the goal is standard trading notifications with less development.
flowchart LR
A[Whale creates business message] --> B[Whale cloud-push service]
B --> C[Apple APNs]
B --> D[Android vendor channels]
C --> E[Broker App]
D --> E
E --> F[Pass standard message to WhaleApp SDK]
- Broker confirms production and UAT iOS Bundle IDs, Android Package Names, and required channels.
- Broker creates the App and enables push in Apple or Android vendor consoles, then generates credentials.
- Broker delivers credentials to Whale through the agreed encrypted channel.
- Whale creates and configures the cloud-push application for each environment.
- Broker App implements notification permission, device-token registration, and WhaleApp SDK message handling.
- Both parties test foreground, background, terminated-App, and notification-tap behavior.
Mark unused channels explicitly as unused. If production and UAT share a Package Name, only one set may be submitted, but confirm that the vendor console permits sharing across both environments.
| Channel | Required | Optional |
|---|---|---|
| HUAWEI | Client ID, Client Secret | Default receipt ID, Live View service-account key |
| HONOR | App ID, Client ID, Client Secret | — |
| Xiaomi | App Secret | Overseas App Secret |
| FCM | Service-account key | — |
| OPPO | App Key, Master Secret | — |
| Meizu | App ID, App Secret | — |
| vivo | App ID, App Key, App Secret | Default receipt ID |
For every environment, also record:
- Environment: UAT or production.
- Android Package Name.
- App name or project ID in the vendor console.
- Credential expiry, rotation contact, and planned rotation time.
Broker can provide either an APNs token-signing key (.p8) or certificate (.p12); normally only one is needed.
| Credential | Provide |
|---|---|
.p8 |
Key file, Key ID, Team ID, Bundle ID, and applicable environment |
.p12 |
Certificate, password, Bundle ID, and development/production environment |
If UAT and production share a Bundle ID, state this explicitly in the delivery form rather than assuming whether credentials can be reused.
Push credentials are production secrets. Never place them in Git, ordinary documents, plaintext chat, email bodies, or client packages. Use an approved secret-delivery channel and record custodian, scope, expiry, and rotation after delivery.
Whale sends standard business messages to an endpoint provided by Broker. Broker can apply filtering, template rendering, Customer preferences, and multi-channel distribution.
sequenceDiagram
autonumber
participant Whale as Whale message service
participant Endpoint as Broker endpoint
participant Center as Broker message center
participant Channel as Broker push channel
participant App as Broker App / WhaleApp SDK
Whale->>Endpoint: POST message with X-Api-Key and X-Trace-Id
Endpoint->>Endpoint: Authenticate and process post_id under project rules
Endpoint-->>Whale: Return processing result
Endpoint->>Center: Persist and apply distribution policy
Center->>Channel: Deliver to Customer device
Channel-->>App: title, body, user_info
App->>App: Pass standard message to WhaleApp SDK
- UAT and production HTTPS endpoints.
- Authentication method and secure key-delivery flow.
- Network allowlist, TLS, and optional mTLS requirements.
- Request timeout, maximum body size, and rate limit.
- Technical contact, monitoring method, and production-escalation channel.
The historical design uses POST with these headers:
| Header | Description |
|---|---|
X-Api-Key |
Endpoint authentication key supplied by Broker |
X-Trace-Id |
End-to-end trace identifier recorded by both parties |
Example request:
{
"member_ids": ["<member-id>"],
"template_key": "order_done_v2_lb",
"post_id": "<unique-message-id>",
"channel": "push",
"language": "en",
"title": "Buy order fully filled",
"body": "Security: Example Stock\nQuantity: 500",
"template_params": {
"quantity": "500",
"order_id": "<order-id>"
},
"pre_params": {
"member_real_name": "Example Customer"
},
"user_info": {
"t": "order_done_v2_lb",
"tn": "<event-trace-id>",
"id": "<unique-message-id>",
"lb_push_from": "xx",
"link": "broker-app://trade/order-detail?id=<order-id>",
"json": "{\"message_type\":\"order_done_v2_lb\"}"
}
}| Field | Meaning | Broker handling |
|---|---|---|
member_ids |
Whale Customer identifiers | Map to Broker users and devices; never display directly |
template_key |
Message-template identifier | Route templates; monitor or handle unknown values compatibly |
post_id |
Unique message identifier | Use as idempotency key to prevent duplicate visible notifications |
channel |
Target channel | Current example is push |
language |
Message language | Select localized template or content |
title / body |
Generated title and summary | Display directly or render under agreed rules |
template_params |
Business-template parameters | Vary by template; consumers must be forward compatible |
pre_params |
Whale preset parameters | May contain personal data; handle as sensitive |
user_info |
App pass-through data | Pass unchanged to WhaleApp SDK after device delivery |
Example response:
{
"success": true,
"message": "success",
"code": 0
}Under the historical convention, code: 0 means success and a non-zero code means failure. Agree retry policy, attempts, backoff, and retryable codes before go-live. The receiving side must not assume that every failure will be delivered again.
- Accept HTTPS only and validate
X-Api-Keyif required by the project; production keys should support rotation. - Use
post_idfor idempotency and retain deduplication records for the required business period. - Validate and durably accept quickly, then perform vendor delivery asynchronously to avoid upstream timeout.
- Tolerate unknown additive fields so new template parameters do not reject the message.
- Monitor authentication, validation, duplicates, persistence, and downstream delivery failures.
- Log
X-Trace-Id,post_id, and outcome without logging secrets or complete personal data. - Agree how partial failure across several
member_idsis represented and compensated.
Both server paths ultimately deliver the same structure to WhaleApp SDK:
{
"title": "Message title",
"body": "Message summary",
"user_info": {
"t": "message type",
"tn": "event trace ID",
"id": "message ID",
"lb_push_from": "message source",
"link": "navigation link",
"json": "business JSON string"
}
}Broker App integrating WhaleApp SDK must:
- Request OS notification permission and obtain the platform device token.
- Register the token with the selected push service and update its binding when the token, logged-in Customer, or logout state changes.
- Parse the same standard structure for foreground receipt, background taps, and cold-start taps.
- Pass
title,body, and completeuser_infoto the current WhaleApp SDK message handler. - Validate the
linkscheme, destination, and parameters against an allowlist before navigation. - Tolerate unknown message types and missing optional fields and record useful redacted diagnostics.
Specific method names and initialization locations vary by iOS and Android WhaleApp SDK version. Follow the documentation delivered for the project version. This page defines the stable responsibility boundary and message shape.
Cover at least:
- No mixing of UAT and production App identifiers, credentials, or messages.
- Correct mapping of one and several
member_idsto Customers. - Repeated delivery of one
post_idcreates only one visible notification. - Defined behavior in foreground, background, and terminated states.
- No incorrect delivery after logout, account switch, or disabled permission.
- Simplified Chinese, Traditional Chinese, English, and fallback language meet product expectations.
- Taps reach the correct page and invalid or expired links degrade safely.
- Broker endpoint timeout, failure response, and downstream vendor failure are observable.
- Credential rotation expires the old key as planned without interrupting delivery.
Message push is part of go-live acceptance alongside account, cash, and trading flows. See Broker onboarding overview for the full delivery lifecycle.