PC 和游戏机 S2S 集成指南
为 PC 和游戏机游戏归因实施服务器到服务器整合的全面指南,可跨桌面和游戏平台进行准确的营销活动测量和分析。
企业功能:PC 和控制台游戏归因是一项企业功能。要了解更多信息,请阅读PC 和控制台游戏归因常见问题解答或联系您的客户成功经理。
网络 SDK 要求:网络营销活动的 PC 和游戏机归因要求在营销登陆页面上实施 Singular Web SDK。当用户安装并启动您的游戏时,Web SDK 会捕获点击数据并实现归因匹配。
所需步骤:
- 在登陆页面上实施Singular Web SDK
- 用匹配的产品 ID(与游戏标识符相同)配置 Web SDK
- 实施游戏端 S2S 集成(本指南)
- 可选择实施匹配 ID 以提高归因准确性
概述
服务器到服务器集成
Singular 提供 REST API,支持服务器到服务器报告 PC 和主机游戏转换数据,用于归因分析、营销活动绩效衡量和用户行为跟踪。
集成功能:
- 游戏会话跟踪:报告跨游戏启动的用户会话和活动
- 安装归因:将新游戏安装归因于营销活动
- 事件分析:跟踪游戏内事件和用户互动,进行漏斗分析
- 收入测量:衡量游戏内购买和货币化绩效
- 跨平台支持:跨 PC、Xbox、PlayStation、任天堂和 Meta Quest 的统一跟踪
前提条件
在实施 PC 和控制台 S2S 集成之前,确保正确配置 Web SDK 以实现完整的归因工作流程。
| 组件 | 要求 |
|---|---|
| 网络 SDK |
需要:必须在营销登陆页面上实施,以捕获点击数据并启用归因。 实施指南:Web SDK 概述与入门
配置说明:Web SDK 产品 ID 必须与 S2S 集成中使用的游戏标识符( |
| SDK 密钥 |
从控制面板 → 开发工具 → SDK集成 → SDK密钥获取Singular SDK密钥 |
| 归因方法 |
查看可用的归因方法,并为您的实施选择合适的方法:
有关详细信息,请参阅归因方法。 |
集成架构
完整的 PC 和游戏机归因需要网络侧和游戏侧共同实施。
归因流程:
- 用户点击广告:用户点击您游戏的营销活动广告
- 登陆页面访问:用户到达实施了 Singular Web SDK 的登陆页面
- 点击捕获:网络 SDK 捕获点击数据,包括设备指纹和营销活动参数
- 游戏下载:用户从商店或直接下载下载并安装游戏
- 首次启动:用户首次启动游戏
- 会话报告:会话报告:游戏通过 S2S API 报告带有设备标识符的会话
- 归因匹配:基于指纹或匹配 ID,将游戏安装与网页点击进行单一匹配
- 活动归因:将安装归因于初始营销活动,以衡量投资回报率
文档资源
完整的 API 参考资料提供端点规格、参数和实施示例。
集成文档:
- 网络 SDK:网络 SDK 概述和入门
- S2S API 参考:PC 和控制台 S2S 端点参考
- 归属指南:PC 和控制台游戏归属常见问题解答
集成概念
与 Singular 实现功能完备的 PC 和控制台 S2S 集成的核心概念和要求。
身份验证
SDK 密钥要求
向Singular的PC和控制台S2S API提出的所有请求都需要在a 参数中进行SDK密钥验证。
| 参数 | 说明 |
|---|---|
a
|
用于 API 验证的 Singular SDK 密钥。 位置:Singular 控制面板 → 开发人员工具 → SDK 集成 → SDK 密钥 重要:请勿使用 "开发工具"→"API 密钥 "中的 "报告 API 密钥"。报告 API 密钥仅用于Singular 的报告 API。
示例: |
用户隐私
隐私合规性
Singular 建议为最终用户提供选择加入或退出跟踪的功能,以保护用户隐私并遵守相关法规。
实施方案:
- 方案 1:当用户选择退出时,不向 Singular 发送游戏事件数据
-
方案 2:发送游戏事件数据,但通过带有 "限制数据共享 "值的
data_sharing_options参数提供用户同意选择。
隐私框架:Singular 在用户隐私回传中使用 "限制数据共享",并将信息传递给合作伙伴,以符合法规要求。 请参阅用户隐私和限制数据共享了解完整详情。
支持的平台
平台定义
平台表示用户在哪里玩游戏,必须在所有 S2S API 请求中通过p参数传递。
支持的平台值:
-
pc- 个人电脑平台 -
xbox- 微软 Xbox 游戏机 -
playstation- 索尼 PlayStation 游戏机 -
nintendo- 任天堂游戏机 -
metaquest- Meta Quest VR 头显
操作系统和商店
除平台外,还可通过os参数指定操作系统/游戏系统,通过install_source 参数指定分发商店。
|
平台 ( p) |
操作系统/游戏系统 ( os) |
存储 ( install_source) |
|---|---|---|
| pc |
|
|
| xbox |
|
|
| 游戏机 |
|
|
| 任天堂 |
|
|
| 元征 |
|
|
自定义值:操作系统和商店参数支持自定义值,但 Singular 建议使用上述标准化值,以保持一致性和报告清晰度。
游戏标识符
应用程序标识
游戏标识符将游戏事件与特定游戏关联起来,必须在每次请求中通过i 参数传递。
关键要求:S2S 集成中使用的游戏标识符必须与 Singular Web SDK实施中配置的产品 ID完全匹配。这种匹配对于 Singular 将游戏安装归因于网络营销活动点击至关重要。
标识符要求:
-
格式:支持任何值,但 Singular 建议使用反向 DNS 符号(如
com.singular.game)。 - 网络 SDK 对齐:必须与着陆页上配置的网络 SDK 产品 ID 相匹配,才能发挥作用
- 跨平台一致性:在所有支持的平台上,同一游戏必须使用相同的游戏标识符
配置示例:
| 实施 | 配置 |
|---|---|
| 网络 SDK |
|
| S2S 应用程序接口(PC) |
|
| S2S API(Xbox) |
|
| S2S API(PlayStation) |
|
设备识别
唯一游戏安装跟踪
安装/设备标识符可关联同一游戏安装的多个游戏会话中的游戏事件,必须在每次请求中通过sdid参数传递。
标识符规格:
- 格式:推荐的 UUID 第 4 版格式
- 生成:首次启动游戏(安装)时由游戏/服务器生成的值
- 持续性:必须在整个游戏安装过程中持续存在
- 唯一性:每个游戏安装都需要唯一标识符
例如: sdid=40009df0-d618-4d81-9da1-cbb3337b8dec
匹配 ID 归因
通过从网络 SDK 向游戏安装传递唯一标识符,Match ID 可提高网络推广活动的归因准确性,提供确定性匹配,替代基于指纹的归因。
高级功能:利用 Match ID 进行归因是一项高级功能,需要在网络和游戏实施之间进行协调。 实施前请咨询 Singular 解决方案工程师。
匹配 ID 如何工作:
- 网络 SDK 生成匹配 ID:当用户访问登陆页面时,Singular 网络 SDK会生成唯一的匹配 ID。
- 检索匹配 ID:使用 Web SDK 方法从登陆页面检索匹配 ID
- 传递给游戏:在下载/安装过程中,您的实现将匹配 ID 从网页传递到游戏(例如,查询参数、深层链接、cookie
-
首次启动报告:游戏通过
match_id参数将匹配 ID 包含在发送给 Singular 的首次会话通知中 - 确定性匹配:Singular 使用匹配 ID 进行精确归属匹配
网络 SDK 匹配 ID 方法
本地实现
Singular Web SDK 提供本机方法,用于在登陆页面上检索、设置和清除匹配 ID 值。
可用方法:
| 方法 | 说明 |
|---|---|
getMatchID()
|
读取 Singular Web SDK 为当前网页会话生成的唯一匹配 ID。 返回值:包含匹配 ID 值的字符串 |
setMatchID(matchId)
|
为当前网络会话设置自定义匹配 ID,而不是使用 Singular 生成的值。
参数: |
clearMatchID()
|
清除通过 |
实现示例
本地网络 SDK 实现
在 Singular Web SDK 初始化后直接使用这些方法来检索和管理匹配 ID 值。
检索匹配 ID
// Get the Singular-generated Match ID
const matchId = window.singularSdk.getMatchID();
console.log('Match ID:', matchId);
// Store Match ID for passing to game
localStorage.setItem('singular_match_id', matchId);
设置自定义匹配 ID
// Set your own Match ID value
const customMatchId = 'your-custom-match-id-123';
window.singularSdk.setMatchID(customMatchId);
console.log('Custom Match ID set:', customMatchId);
清除匹配 ID
// Clear custom Match ID and revert to default
window.singularSdk.clearMatchID();
// Get the new default Match ID
const defaultMatchId = window.singularSdk.getMatchID();
console.log('Default Match ID restored:', defaultMatchId);
带下载按钮的完整示例
// Initialize Web SDK
const config = new SingularConfig(sdkKey, sdkSecret, productId)
.withInitFinishedCallback(() = {
console.log('Singular SDK initialized');
});
singularSdk.init(config);
// Handle download button click
document.getElementById('download-button').addEventListener('click', function() {
// Get Match ID before redirecting to download
const matchId = window.singularSdk.getMatchID();
// Pass Match ID to download page via query parameter
const downloadUrl = `https://example.com/download?match_id=${matchId}`;
// Redirect to download page
window.location.href = downloadUrl;
});
谷歌标签管理器实施
在 Google 标签管理器中创建自定义 HTML 标签,以管理匹配 ID 功能。
GTM 自定义 HTML 标签
<script>
// Match ID Management Functions for GTM
// Get Match ID from Singular Web SDK
function getMatchID() {
if (window.singularSdk && window.singularSdk.getMatchID) {
return window.singularSdk.getMatchID();
}
console.warn('Singular SDK not initialized');
return null;
}
// Set custom Match ID
function setMatchID(data) {
if (!data.matchId) {
console.warn('No matchId provided');
return;
}
if (window.singularSdk && window.singularSdk.setMatchID) {
window.singularSdk.setMatchID(data.matchId);
console.log('Match ID set:', data.matchId);
} else {
console.warn('Singular SDK not initialized');
}
}
// Clear Match ID
function clearMatchID() {
if (window.singularSdk && window.singularSdk.clearMatchID) {
window.singularSdk.clearMatchID();
console.log('Match ID cleared');
} else {
console.warn('Singular SDK not initialized');
}
}
// Make functions available globally
window.singularMatchID = {
get: getMatchID,
set: setMatchID,
clear: clearMatchID
};
</script>
使用 GTM 函数
// Get Match ID
const matchId = window.singularMatchID.get();
console.log('Match ID:', matchId);
// Set custom Match ID
window.singularMatchID.set({ matchId: 'custom-id-123' });
// Clear Match ID
window.singularMatchID.clear();
GTM 触发器示例
<script>
// Trigger on button click
document.addEventListener('DOMContentLoaded', function() {
const downloadButton = document.getElementById('download-button');
if (downloadButton) {
downloadButton.addEventListener('click', function() {
// Get Match ID via GTM function
const matchId = window.singularMatchID.get();
if (matchId) {
// Push to dataLayer for GTM
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'download_click',
'singular_match_id': matchId
});
// Redirect with Match ID
const downloadUrl = `https://example.com/download?match_id=${matchId}`;
window.location.href = downloadUrl;
}
});
}
});
</script>
将比赛 ID 传递给游戏
实施策略
从 Web SDK 获取匹配 ID 后,实施将值从登陆页面传递到游戏安装的机制。
常见方法:
| 方法 | 实施 | 使用案例 |
|---|---|---|
| 查询参数 |
在下载 URL 中添加匹配 ID 作为查询参数。
|
直接下载,下载页面可提取参数并传递给游戏安装程序 |
| Cookie 存储 |
在游戏下载页面可访问的第一方 Cookie 中存储匹配 ID。
|
多页面流程,其中匹配 ID 需要在页面导航中持续存在 |
| 本地存储 |
在浏览器本地存储中存储匹配 ID。
|
登陆页面和下载页面共享存储空间的同域场景 |
| 深度链接 |
在自定义深度链接方案中嵌入匹配 ID,以便直接启动游戏。
|
通过自定义协议处理程序实现高级功能 |
| 服务器端 API |
将匹配 ID 发送至服务器 API,游戏通过验证请求进行检索。 |
安全实施需要服务器端验证和用户认证 |
S2S API 实现
报告比赛 ID
游戏从网络实施中检索到匹配 ID 后,将其纳入向 Singular 发送的首次会话通知中,以便进行归属匹配。
关键时间:匹配 ID 必须包含在第一个游戏会话(安装)通知中,以便进行归属匹配。在后续会话中发送匹配 ID 无法实现归属匹配。
带有匹配 ID 的会话请求:
import requests
def report_first_session_with_match_id(sdk_key, game_id, device_id, platform, match_id):
"""
Report first game session with Match ID for attribution
"""
session_url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'os': 'windows',
'install_source': 'steam',
'ip': get_user_ip(),
'match_id': match_id # Include Match ID for attribution
}
response = requests.get(session_url, params=params)
return response.json()
# Example: First launch with Match ID
report_first_session_with_match_id(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
match_id='abc123def456' # Retrieved from landing page
)
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235" \
--data-urlencode "match_id=abc123def456"
async function reportFirstSessionWithMatchId(config) {
const sessionUrl = 'https://s2s.singular.net/api/v1/launch';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'ip': await getUserIP(),
'match_id': config.matchId // Include Match ID
});
const response = await fetch(`${sessionUrl}?${params.toString()}`);
return await response.json();
}
// Example: First launch with Match ID
reportFirstSessionWithMatchId({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
osVersion: 'windows',
store: 'steam',
matchId: 'abc123def456' # Retrieved from landing page
});
匹配 ID 最佳实践
实施清单
完整的实施要求:
- 网络 SDK 集成:在具有匹配产品 ID 的登陆页面上实施Singular Web SDK
-
匹配 ID 检索:使用
getMatchID()在 SDK 初始化后检索值 - 值传输:实施安全机制,将匹配 ID 从网页传递到游戏
- 游戏存储:将匹配 ID 保存在游戏中,直到首次启动/会话报告为止
-
仅首次会话:仅在首次会话通知中包含
match_id参数 - 值验证:验证网页和游戏实现之间的匹配 ID 值是否匹配
- 测试:测试从登陆页面点击到游戏安装和归因的整个流程
有关归因方法的完整细节和故障排除,请参阅PC 和控制台游戏归因常见问题解答。
游戏会话跟踪
在 PC 和控制台集成中需要向 Singular 报告游戏会话,以实现安装归因、重新参与跟踪和用户保留分析。
会话通知端点
实施要求
每次游戏启动时调用会话通知端点,通知 Singular 有关游戏会话的信息。
API 参考:有关完整的端点规范,请参阅会话通知端点文档。
会话处理
归因工作流程
会话通知使 Singular 能够根据会话上下文执行多种归因和分析功能。
处理逻辑:
- 第一次会话(安装):如果是唯一安装后的首次游戏会话,Singular 会识别新安装并触发安装归因流程
- 重新参与会话:如果会话符合重新参与条件(即将推出),Singular 会触发重新参与归因流程(请参阅重新参与常见问题
- 常规会话:否则,标记为游戏会话,用于用户活动和保留跟踪
实施最佳实践
异步数据收集
收集数据以报告游戏会话时,应等待异步函数返回并处理各种功能后再发送会话通知。
关键时间考虑因素:
- 匹配 ID 归属:使用匹配 ID 改进归属匹配时,只有在匹配 ID 可能可用后才报告第一个游戏会话
- 用户同意:如果游戏提供了对 Singular 营销和分析的选择权,则在报告游戏会话之前应等待收集到用户同意权
- 设备标识符:确保在首次会话通知前生成并存储 SDID
会话请求示例
实施示例
import requests
def report_game_session(sdk_key, game_id, device_id, platform, os_version, store):
"""
Report game session to Singular
"""
session_url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'os': os_version,
'install_source': store,
'ip': get_user_ip()
}
try:
response = requests.get(session_url, params=params, timeout=10)
if response.status_code == 200:
data = response.json()
if data.get('status') == 'ok':
print("Session reported successfully")
return True
else:
print(f"Session error: {data.get('reason')}")
return False
else:
print(f"HTTP error: {response.status_code}")
return False
except Exception as e:
print(f"Exception reporting session: {e}")
return False
# Example usage
report_game_session(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
os_version='windows',
store='steam'
)
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235"
async function reportGameSession(config) {
const sessionUrl = 'https://s2s.singular.net/api/v1/launch';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'ip': await getUserIP()
});
try {
const response = await fetch(`${sessionUrl}?${params.toString()}`);
const data = await response.json();
if (data.status === 'ok') {
console.log('Session reported successfully');
return true;
} else {
console.error('Session error:', data.reason);
return false;
}
} catch (error) {
console.error('Exception reporting session:', error);
return false;
}
}
// Example usage
reportGameSession({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
osVersion: 'windows',
store: 'steam'
});
游戏内事件跟踪
跟踪游戏内事件和用户互动,以分析营销活动效果、优化用户漏斗并衡量整个玩家旅程的参与度。
事件规划
事件定义
在实施 S2S 集成之前,请定义贵组织希望跟踪的事件,以便进行营销活动分析和用户行为测量。
事件规划指南:定义游戏内事件
事件通知端点
事件报告
当游戏中发生事件时,调用事件通知端点,通知 Singular 进行归因分析和营销活动优化。
API 参考:有关完整的端点规范,请参阅事件通知端点文档。
API 调用中包含的事件名称决定了事件在 Singular 报告、导出和回传中的标识方式。
事件命名最佳实践
标准事件
Singular 建议使用标准事件和属性命名规范,以简化合作伙伴集成和分析兼容性。
实施指南:
- 标准事件:使用Singular 的标准事件命名规范,以自动映射合作伙伴并简化集成。
- 英语:使用英文传递自定义事件名称和属性,以便与第三方合作伙伴和分析解决方案兼容
- 字符限制:事件名称限制为 32 个 ASCII 字符(UTF-8 转换为 32 字节
- 属性限制:事件属性和值限制为 500 ASCII 字符
收入事件跟踪
收入测量
跟踪来自游戏内购买的收入,以分析营销活动的绩效和投资回报率,数据可通过报告、日志导出和回传获得。
收入事件实施:使用带有附加收入参数的事件通知端点来指定收入事件。
所需收益参数:
-
is_revenue_event=true- 将事件标记为收入事件(如果事件名称为__iap__或金额大于零,则为可选参数 -
amt=1.99- 收入金额 -
cur=USD- ISO 4217 货币代码
事件请求示例
实施示例
标准事件
import requests
def report_game_event(sdk_key, game_id, device_id, platform, event_name, event_attributes=None):
"""
Report in-game event to Singular
"""
event_url = "https://s2s.singular.net/api/v1/evt"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'n': event_name,
'ip': get_user_ip()
}
if event_attributes:
import json
params['e'] = json.dumps(event_attributes)
response = requests.get(event_url, params=params)
return response.json()
# Example: Level complete event
report_game_event(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
event_name='sng_level_achieved',
event_attributes={
'level': '5',
'score': '1250'
}
)
收入事件
def report_revenue_event(sdk_key, game_id, device_id, platform, amount, currency):
"""
Report revenue event to Singular
"""
event_url = "https://s2s.singular.net/api/v1/evt"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': amount,
'cur': currency,
'ip': get_user_ip()
}
response = requests.get(event_url, params=params)
return response.json()
# Example: $9.99 purchase
report_revenue_event(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
amount=9.99,
currency='USD'
)
标准事件
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "n=sng_level_achieved" \
--data-urlencode 'e={"level":"5","score":"1250"}' \
--data-urlencode "ip=172.58.29.235"
收入事件
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "n=__iap__" \
--data-urlencode "is_revenue_event=true" \
--data-urlencode "amt=9.99" \
--data-urlencode "cur=USD" \
--data-urlencode "ip=172.58.29.235"
标准事件
async function reportGameEvent(config) {
const eventUrl = 'https://s2s.singular.net/api/v1/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'n': config.eventName,
'ip': await getUserIP()
});
if (config.attributes) {
params.append('e', JSON.stringify(config.attributes));
}
const response = await fetch(`${eventUrl}?${params.toString()}`);
return await response.json();
}
// Example: Level complete
reportGameEvent({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
eventName: 'sng_level_achieved',
attributes: {
level: '5',
score: '1250'
}
});
收入活动
async function reportRevenueEvent(config) {
const eventUrl = 'https://s2s.singular.net/api/v1/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': config.amount,
'cur': config.currency,
'ip': await getUserIP()
});
const response = await fetch(`${eventUrl}?${params.toString()}`);
return await response.json();
}
// Example: $9.99 purchase
reportRevenueEvent({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
amount: 9.99,
currency: 'USD'
});
下一步
利用其他资源和支持完成 PC 与控制台 S2S 集成。
其他资源
文档和支持
- 网络 SDK:网络 SDK 概述和入门
- API 参考:PC 和控制台 S2S 端点参考
- 归因指南:PC 和控制台游戏归因常见问题解答
- 事件规划:定义游戏内事件
- 标准事件:奇异标准事件参考
- 响应代码:S2S 响应代码和错误处理
支持渠道
获取帮助
联系 Singular 团队获取实施帮助和技术支持。
- 解决方案工程师:向 Singular 解决方案工程师咨询高级功能和集成规划。
- 客户成功经理:联系客户成功经理,了解企业功能启用和账户配置情况
- 支持团队:就技术问题和故障排除协助提交支持票据