Vendor Message Classification and Quota Management Best Practices

Last updated:2026-07-28
Expand all
Vendor Message Classification and Quota Management Best Practices

Android vendor channels generally classify notification messages and apply different reminder styles, total push quotas, per-device receiving limits, and QPS limits to different message types. Properly using message classification and quota strategies can improve the delivery rate of important messages and prevent operation messages from consuming key resources or being restricted by vendors.

This document is for developers using JPush with Xiaomi, Huawei, Honor, OPPO, vivo, Meizu, FCM, ASUS, HarmonyOS, and other channels. It helps you understand message classification, quota deduction, delivery strategies, and troubleshooting.

Core Principles

  • Determine the business type first, then choose vendor classification fields. Do not set system-message fields only because you want a higher delivery rate.
  • For user-related messages that users need to know in time, apply for important-message classifications according to vendor rules.
  • For content recommendations, campaigns, platform announcements, and similar messages, use operation or marketing message classifications and configure frequency control.
  • When sending by API, prioritize options.classification to identify the message type and avoid conflicts between vendor fields.
  • For vendors such as Xiaomi and OPPO that support skip_quota, do not treat it as a way to bypass vendor limits. It only controls whether Jiguang-side quota judgment and deduction are skipped; vendor limits still apply.
  • Before forcing vendor-channel delivery, confirm that the vendor quota is sufficient. Otherwise, a quota-insufficient error may be returned directly.

Classification Quick Reference

Vendor Important / Service Messages Ordinary / Operation Messages Key Configuration
Xiaomi Private messages Public messages / default channel options.classification=1; every private message must include both third_party_channel.xiaomi.channel_id and mi_template_id, plus mi_template_param when the template contains variables
Huawei Service and communication messages Information and marketing messages options.classification=1, third_party_channel.huawei.importance, third_party_channel.huawei.category
Honor Service and communication messages Information and marketing messages options.classification=1, third_party_channel.honor.importance
OPPO Private / service and communication messages Public / operation messages third_party_channel.oppo.channel_id, category, notify_level; combine with skip_quota when needed
vivo System messages; Account and Assets, Schedule and To-dos, Device Information, Orders and Logistics, and Subscription Reminders can use template messages Operation messages options.classification=1; for template messages, set third_party_channel.vivo.vivo_push_type=4 and vivo_template_id, plus vivo_template_param when the template contains variables
Meizu Limited by business subscription and vendor rules Limited by business subscription and vendor rules Pay attention to business rate limits, subscription tag count, and device activity limits

Note: This table maps vendor classification concepts for easier understanding. Actual values and application methods must follow vendor official rules, the Jiguang vendor message classification guide, and your app review results.

API Field Priority

options.classification

options.classification is the core field used by Jiguang to adapt Android vendor message classification:

  • 0: operation message, default value.
  • 1: system message.
  • This field has the highest priority and overrides some vendor subfields, such as options.third_party_channel.vivo.classification and options.third_party_channel.honor.importance.
  • Jiguang does not judge or calibrate the message type specified by developers. Make sure the value matches the actual business content.

Vendor Subfields

Different vendors may require additional subfields:

  • channel_id: notification classification or notification channel identifier for Xiaomi, Huawei, OPPO, and other vendors.
  • importance: smart notification classification for Huawei and Honor.
  • category: message scenario identifier for Huawei, vivo, OPPO, and other vendors.
  • notify_level: OPPO notification reminder level. It usually needs to be used together with category.
  • mi_template_id / mi_template_param: Xiaomi private-message template delivery. Every private message must include mi_template_id. If the template contains variables, provide mi_template_param as a JSON string; for a template without variables, pass the string "{}" or null. JPush automatically splits a multi-target push into individual MiChannel vendor requests.
  • vivo_push_type: Specifies a special vivo push type. Set it to 4 for a template message.
  • vivo_template_id / vivo_template_param: vivo template message delivery. Set vivo_template_id to an approved template ID. If the template contains variables, provide vivo_template_param as a JSONObject with key-value pairs matching the template variables.
  • push_mode: vivo formal push or test push identifier.
  • skip_quota: currently effective only for Xiaomi and OPPO. It indicates whether Jiguang-side quota judgment and deduction are skipped.

Quota and QPS Management

Jiguang Platform Limits

Non-VIP apps support vendor channels, but each push request has an upper limit on the number of users that can use vendor channels. Requests that exceed the vendor-channel quota do not necessarily mean the message cannot be delivered. Jiguang switches to the Jiguang channel according to device status and available strategies.

If your business has higher requirements for offline delivery rate, real-time delivery, or large-scale push, evaluate VIP service for more stable vendor-channel resources.

Vendor System Limits

Each vendor has its own quota and QPS limits:

  • When vendor quota is exceeded, Jiguang tries to deliver through the Jiguang channel.
  • When vendor QPS is exceeded, Jiguang slows down delivery according to vendor limits to reduce message loss caused by QPS limits.
  • Vendor system limits cannot be bypassed. Even VIP users must follow vendor rules.

Operation Message Limits

Operation messages are usually subject to per-device daily receiving limits. Xiaomi public messages, OPPO public messages, vivo operation messages, and Huawei/Honor information and marketing messages all need to be controlled according to vendor rules.

vivo devices receive operation messages from 7:00 to 23:00 each day. Operation messages sent outside this window return vivo error code 10071 and are not delivered. System messages are not subject to this delivery window.

Recommendations:

  • Enable the vendor operation message strategy in the console and configure the per-user daily operation message limit.
  • The vendor operation message limit should be less than or equal to Jiguang's per-device push frequency limit.
  • For marketing messages, use tags, user properties, segmentation, scheduling, and frequency control instead of occupying important-message classifications.
  1. Sort business message types and distinguish important messages from operation messages.
  2. Apply for important-message classifications, private-message channels, self-classification permissions, channels, or templates according to vendor requirements.
  3. Complete vendor channel SDK integration on the client and ensure that the corresponding notification channel, channel, or category has been created or approved. vivo subscription reminders additionally require client authorization for the subscription channel.
  4. Configure vendor parameters, vendor operation message strategies, and necessary frequency control rules in the console.
  5. When sending by API, set options.classification and add corresponding vendor fields.
  6. Select the third_party_channel delivery strategy according to the business goal.
  7. Continuously monitor through push records, statistics APIs, callback APIs, and vendor quota queries.

API Example

The following example shows where to configure fields for an important order-status notification. Actual vendor field values must follow your application results.

{ "platform": "android", "audience": { "registration_id": ["1104a89792xxxxxx"] }, "notification": { "android": { "alert": "Your order has shipped", "title": "Order status update", "channel_id": "order_status" } }, "options": { "classification": 1, "third_party_channel": { "xiaomi": { "distribution": "ospush", "channel_id": "your_xiaomi_private_channel_id", "mi_template_id": "your_xiaomi_template_id", "mi_template_param": "{\"order_no\":\"202607280001\"}" }, "huawei": { "distribution": "secondary_push", "importance": "NORMAL", "category": "TRAVEL" }, "honor": { "distribution": "secondary_push", "importance": "NORMAL" }, "oppo": { "distribution": "secondary_push", "channel_id": "your_oppo_private_channel_id", "category": "ORDER", "notify_level": 16 }, "vivo": { "distribution": "ospush", "category": "TODO", "vivo_push_type": 4, "vivo_template_id": "your_vivo_template_id", "vivo_template_param": { "order_no": "202607280001" } } } } }
          {
  "platform": "android",
  "audience": {
    "registration_id": ["1104a89792xxxxxx"]
  },
  "notification": {
    "android": {
      "alert": "Your order has shipped",
      "title": "Order status update",
      "channel_id": "order_status"
    }
  },
  "options": {
    "classification": 1,
    "third_party_channel": {
      "xiaomi": {
        "distribution": "ospush",
        "channel_id": "your_xiaomi_private_channel_id",
        "mi_template_id": "your_xiaomi_template_id",
        "mi_template_param": "{\"order_no\":\"202607280001\"}"
      },
      "huawei": {
        "distribution": "secondary_push",
        "importance": "NORMAL",
        "category": "TRAVEL"
      },
      "honor": {
        "distribution": "secondary_push",
        "importance": "NORMAL"
      },
      "oppo": {
        "distribution": "secondary_push",
        "channel_id": "your_oppo_private_channel_id",
        "category": "ORDER",
        "notify_level": 16
      },
      "vivo": {
        "distribution": "ospush",
        "category": "TODO",
        "vivo_push_type": 4,
        "vivo_template_id": "your_vivo_template_id",
        "vivo_template_param": {
          "order_no": "202607280001"
        }
      }
    }
  }
}

        
This code block is shown in the floating window

vivo Template Message Configuration

  • The following five system-message categories can apply for and use message templates according to vivo rules: Account and Assets, Schedule and To-dos, Device Information, Orders and Logistics, and Subscription Reminders.
  • For API delivery, set options.classification=1 and options.third_party_channel.vivo.vivo_push_type=4, and provide an approved vivo_template_id. If the template contains variables, also provide vivo_template_param values that match those variables.
  • vivo subscription reminders require both client authorization for the subscription channel and server-side template configuration. Completing only one of these steps does not complete the integration.
  • A vivo vendor template ID is different from a JPush console push template ID. Do not use them interchangeably.
  • vivo message template rules apply to new apps starting October 31, 2026, and are scheduled to apply to all apps starting April 1, 2027. Complete template approval and integration testing in advance.

For complete requirements, see the vivo Message Classification Usage Guide and the vivo template message requirements in the Push API documentation.

Common Misunderstandings

Misunderstanding 1: Setting All Messages as System Messages

System messages, private messages, and service and communication messages usually have clear scenario boundaries. Setting marketing, campaign, or content recommendation messages as system messages may cause vendor review failures, channel restrictions, or reduced future push stability.

Misunderstanding 2: Passing Only classification Without Applying for Vendor Classification

classification is an important field for Jiguang-side vendor classification adaptation, but some vendors also require channels, self-classification permissions, templates, or categories to be applied for in advance. Without vendor-side configuration, pushes may still fail or be classified as ordinary messages.

Misunderstanding 3: Treating skip_quota as Bypassing Vendor Limits

skip_quota only indicates whether Jiguang-side quota judgment and deduction are skipped, and currently only applies to Xiaomi and OPPO. Vendor quota, QPS, and per-device quantity limits still exist.

Misunderstanding 4: Forcing ospush Without Checking Quota

ospush forces delivery through the vendor channel. If the specified vendor quota is insufficient, the push request may fail with a vendor-quota-insufficient error. For large-scale pushes, query quota first or use a safer delivery strategy.

Misunderstanding 5: Sending Test Messages Without Test Identifiers

Some vendors provide dedicated parameters for test messages. For example, vivo push_mode=1 means test push, while Jiguang test_model means test-mode push to test devices. They have different meanings and should be selected according to the scenario.

Misunderstanding 6: Configuring Only the Server-Side Template for vivo Subscription Reminders

vivo subscription reminders require both client authorization for the subscription channel and server-side template configuration. The client should process the channel status returned by the subscription authorization API, and the server should then deliver messages using an approved template ID.

Troubleshooting Recommendations

When the delivery rate of important messages is abnormal or vendor errors are returned, troubleshoot in this order:

  1. Check whether the vendor channel is integrated successfully and whether the vendor token is obtained normally.
  2. Check whether the message content matches the scenario requirements for system messages, private messages, or service messages.
  3. Check whether options.classification matches each vendor subfield.
  4. Check whether vendor channels, templates, self-classification permissions, and categories have been approved.
  5. For a vivo template message, check vivo_push_type, vivo_template_id, and whether template variables match. For a subscription reminder, also check the client authorization result.
  6. Check whether vendor quota, per-device daily quantity limits, or QPS limits are triggered. If a vivo operation message returns 10071, check whether it was sent outside 7:00–23:00.
  7. Check whether distribution, distribution_fcm, and distribution_customize match the message type.
  8. Review push records, statistics APIs, callback APIs, and vendor backend quota data.

Before sending, confirm the following:

  • Important messages and operation messages have been distinguished.
  • Vendor classification application and client notification channel configuration are complete.
  • The API request sets an accurate options.classification.
  • Vendor fields such as channel_id, importance, category, notify_level, and template fields comply with vendor rules.
  • vivo template messages set vivo_push_type=4 and use an approved template ID. Client authorization is complete for subscription reminders.
  • Operation messages have per-user frequency control and vendor operation message strategy configured.
  • Vendor quota and QPS are understood before large-scale push.
  • Quota is confirmed before forcing vendor-channel delivery.
  • Push records, statistics, and callbacks are integrated for continuous troubleshooting.
Was this document helpful?

Copyright 2011-2026, jiguang.cn, All Rights Reserved. 粤ICP备12056275号-13 Shenzhen Hexun Huagu Information Technology Co., Ltd.

Open in Docs Center