推送通知
工作原理

在网充商店中,您可以设置推送通知⸺即用户可直接在浏览器中接收的个人或批量消息。您可以通过推送通知,向用户告知新商品、促销活动和特别优惠等信息。
如需向用户发送通知⸺例如在用户战斗失败或资源耗尽后发送通知⸺请在游戏服务器侧调用艾克索拉发送通知API。
用户点击通知后,将进入网充商店,并可在其中购买所需商品。
推送通知需在艾克索拉建站器中配置,且仅适用于已发布的网充商店。
艾克索拉不会跟踪游戏内事件。您可以自行定义游戏服务器在何时调用API发送通知,例如:
| 游戏内事件 | 推送通知文本 |
|---|---|
| 每日、每周或每月首次登录。 | 欢迎回来!前往网充商店领取您的礼物。 |
| 战斗失败。 | 不要放弃!为您的英雄购买强化道具,完成复仇! |
| 能量或货币耗尽。 | 能量不足?前往网充商店补充能量,继续游戏! |
| 新内容解锁。 | 新关卡已解锁!前往网充商店购买强化道具,更轻松地通关。 |
| 连续多次挑战失败。 | Boss太强?网充商店中已有武器捆绑包整装待发,助您取胜。 |

交互过程
- 用户在浏览器中或通过已安装的PWA打开网充商店,并看到提示订阅通知的横幅。
- 用户点击Subscribe,并在浏览器系统提示中允许接收通知。
启用Auto-request permission选项时的订阅逻辑
如果在网站设置中启用了Auto-request permission选项,网充商店会在打开时请求发送通知的权限,而不会显示订阅横幅。如果用户此前已授予权限,订阅将自动完成。如果请求失败(例如浏览器阻止请求,或用户拒绝授权),则会显示订阅横幅。
flowchart LR
A[User opens Web Shop] --> B{Permission already granted?}
B -- Yes --> C[Automatic subscription]
B -- No --> D{Can the browser show the system prompt?}
D -- Yes --> E[System prompt]
D -- No --> F[Subscribe banner]
F --> E
E -- Allow --> G[Subscribed]
E -- Block --> H[Not subscribed]
网充商店会在艾克索拉系统中将用户注册为订阅者。该订阅会与用户设备上的浏览器或已安装的PWA关联。可向用户发送的通知类型取决于其授权状态:
- 如果用户已登录网充商店,其ID会与订阅关联⸺您可以向该用户发送个人通知。
- 如果用户未登录,您只能向其发送批量通知;用户登录后,订阅会自动与其用户ID关联。
游戏服务器调用艾克索拉API发送通知。
用户收到推送通知。
用户点击通知并进入网充商店⸺如果传递了
data.url参数,则进入该参数指定的页面;如果未传递该参数,则进入主页。如果用户在网充商店中存在活动会话,则会保持登录状态。
sequenceDiagram
participant U as User
participant WS as Web Shop
participant G as Game
participant X as Xsolla
note over U,X: Subscription
U->>WS: Opens the site / PWA
WS->>U: Displays the subscription banner
U->>WS: Subscribes and allows notifications
WS->>X: Registers the subscriber (User ID, browser / PWA)
X-->>WS: Confirms the subscription
note over U,X: Sending a notification
G->>X: Calls POST /messages/push/send
X-->>G: Returns message_id
X->>U: Sends the push notification
U->>WS: Clicks the notification, follows data.url
WS->>U: Displays store offers
如何获取
- 在发布商帐户中打开您的项目,然后前往Storefronts > Websites部分。
- 在所需网站的窗格中,点击Open Site Builder。
- 进入Push notifications部分。
- 打开Enable notifications开关。
- 复制Application ID、Client ID和Client secret key字段的值⸺从游戏服务器发送API请求时需要使用这些值。这些参数会在首次打开Enable notifications开关时创建一次,并用于整个项目:如果项目中有多个站点,所有站点都使用相同的值。
- 如有需要,设置订阅横幅:更改标题、描述、图标和按钮文本。
- 如需让站点在打开时自动请求用户授权发送推送通知,请打开Auto-request permission开关(可选)。如果该开关关闭,则仅在用户点击Subscribe按钮后请求权限。
- 要应用更改,请发布网站。

- 在游戏服务器上,实现推送通知发送逻辑。游戏服务器必须调用API发送通知,并在请求中传递用户ID。
发送通知
艾克索拉不会自动发送通知⸺通知始终由您的游戏服务器调用相应API发起。
基础URL:https://messaging-platform.xsolla.com
身份认证
请求通过OAuth 2.0协议进行身份认证。调用生成JWTAPI获取服务器JWT,并传递以下参数:
grant_type— JWT授权类型,传入client_credentials值client_id— Push notifications部分设置中的Client ID字段值client_secret— Push notifications部分设置中的Client secret key字段值
在Authorization: Bearer <token>请求头中传递收到的令牌。
向用户发送通知
通过用户ID向指定用户发送个人推送通知。通知会送达该用户已订阅通知的所有浏览器和已安装的PWA。
HTTP请求
POST https://messaging-platform.xsolla.com/api/v1/messages/push/send
请求头
| 请求头 | 必需 | 描述 |
|---|---|---|
| Authorization | 是 | Bearer <token> |
| Idempotency-Key | 是 | 唯一请求键。用于防止同一通知被重复发送。 |
| Content-Type | 是 | application/json |
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
app_id | string | 艾克索拉侧的应用程序ID,来自Push notifications部分设置。必需。 |
identity | object | 通知接收者数据。 |
external_user_id | string | 用户ID。必需。 |
title | string | 通知标题。必需。 |
body | string | 通知正文。必需。 |
image_url | string | 通知中显示的图片URL。 |
data | object | 附加通知数据。 |
url | string | 用户点击通知时打开的页面URL。如果未传递该参数,则打开网充商店主页。 |
响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
message_ids | array of strings | 已发送消息ID列表,采用UUID格式⸺用户订阅通知的每个浏览器或已安装的PWA对应一个ID。 |
请求示例
- json
1{
2 "notification_type": "user_validation",
3 "settings": {
4 "project_id": 123456,
5 "merchant_id": 789012
6 },
7 "user": {
8 "id": "11111111-1111-1111-1111-111111111111"
9 }
10}
响应示例
- json
1{
2 "message_ids": [
3"aa8ef5c2-front-4a3b-9d2e-example00001",
4"bb9fa6d3-front-4b4c-8e3f-example00002"
5 ]
6}
向所有用户发送通知
向所有或指定订阅用户发送推送通知。通知会送达该用户已订阅通知的所有浏览器和已安装的PWA。
HTTP请求
POST https://messaging-platform.xsolla.com/api/v2/messages/push/send_batch
请求头
| 请求头 | 必需 | 描述 |
|---|---|---|
| Authorization | 是 | Bearer <token> |
| Idempotency-Key | 是 | 唯一请求键。用于防止同一通知被重复发送。 |
| Content-Type | 是 | application/json |
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
app_id | string | 艾克索拉侧的应用程序ID,来自Push notifications部分设置。必需。 |
recipients | object | 定义通知接收者。 |
type | string | 接收者类型。可能值:all⸺所有订阅者;external_user_id⸺指定用户。 |
external_user_id | array of strings | 用户ID数组。如果type参数设置为external_user_id,则传递该参数。必需。 |
title | string | 通知标题。必需。 |
body | string | 通知正文。必需。 |
image_url | string | 通知中显示的图片URL。 |
data | object | 附加通知数据。 |
url | string | 用户点击通知时打开的页面URL。如果未传递该参数,则打开网充商店主页。 |
响应参数
请求示例
响应示例
发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。