个人电脑和游戏机 - 游戏集成指南

文档

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 集成中使用的游戏标识符(i 参数)相匹配。这种匹配使 Singular 能够将网页点击与游戏安装连接起来。

SDK 密钥

从控制面板 → 开发工具 → SDK集成 → SDK密钥获取Singular SDK密钥

归因方法

查看可用的归因方法,并为您的实施选择合适的方法:

  • 指纹归属:根据设备特征自动匹配(默认
  • 匹配 ID 归因:使用从 Web SDK 传递到游戏的标识符提高准确性(高级

有关详细信息,请参阅归因方法


集成架构

完整的 PC 和游戏机归因需要网络侧和游戏侧共同实施。

归因流程

  1. 用户点击广告:用户点击您游戏的营销活动广告
  2. 登陆页面访问:用户到达实施了 Singular Web SDK 的登陆页面
  3. 点击捕获:网络 SDK 捕获点击数据,包括设备指纹和营销活动参数
  4. 游戏下载:用户从商店或直接下载下载并安装游戏
  5. 首次启动:用户首次启动游戏
  6. 会话报告:会话报告:游戏通过 S2S API 报告带有设备标识符的会话
  7. 归因匹配:基于指纹或匹配 ID,将游戏安装与网页点击进行单一匹配
  8. 活动归因:将安装归因于初始营销活动,以衡量投资回报率

文档资源

完整的 API 参考资料提供端点规格、参数和实施示例。


集成概念

与 Singular 实现功能完备的 PC 和控制台 S2S 集成的核心概念和要求。

身份验证

SDK 密钥要求

向Singular的PC和控制台S2S API提出的所有请求都需要在a 参数中进行SDK密钥验证。

参数 说明
a

用于 API 验证的 Singular SDK 密钥。

位置:Singular 控制面板 → 开发人员工具 → SDK 集成 → SDK 密钥

重要:请勿使用 "开发工具"→"API 密钥 "中的 "报告 API 密钥"。报告 API 密钥仅用于Singular 的报告 API

示例: sdkKey_afdadsf7asf56


用户隐私

隐私合规性

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
  • windows
  • linux
  • macos
  • steamos
  • steam
  • epicgamestore
  • microsoftstore
  • gog
  • humblestore
  • selfdistributed
xbox
  • xbox_one
  • xbox_360
  • xbox_series_s
  • xbox_series_x
  • xbox
游戏机
  • playstation_3
  • playstation_4
  • playstation_5
  • playstation
任天堂
  • nintendo_switch
  • nintendo
元征
  • metaquest
  • metaquest_2
  • metaquest_pro
  • metaquest

自定义值:操作系统和商店参数支持自定义值,但 Singular 建议使用上述标准化值,以保持一致性和报告清晰度。


游戏标识符

应用程序标识

游戏标识符将游戏事件与特定游戏关联起来,必须在每次请求中通过i 参数传递。

关键要求:S2S 集成中使用的游戏标识符必须与 Singular Web SDK实施中配置的产品 ID完全匹配。这种匹配对于 Singular 将游戏安装归因于网络营销活动点击至关重要。

标识符要求

  • 格式:支持任何值,但 Singular 建议使用反向 DNS 符号(如com.singular.game )。
  • 网络 SDK 对齐:必须与着陆页上配置的网络 SDK 产品 ID 相匹配,才能发挥作用
  • 跨平台一致性:在所有支持的平台上,同一游戏必须使用相同的游戏标识符

配置示例

实施 配置
网络 SDK
const config = {
  apiKey: 'YOUR_SDK_KEY',
  productId: 'com.singular.game',  // Must match S2S identifier
  // ... other config
};
S2S 应用程序接口(PC)
p=pc&i=com.singular.game
S2S API(Xbox)
p=xbox&i=com.singular.game
S2S API(PlayStation)
p=playstation&i=com.singular.game

设备识别

唯一游戏安装跟踪

安装/设备标识符可关联同一游戏安装的多个游戏会话中的游戏事件,必须在每次请求中通过sdid参数传递。

标识符规格

  • 格式:推荐的 UUID 第 4 版格式
  • 生成:首次启动游戏(安装)时由游戏/服务器生成的值
  • 持续性:必须在整个游戏安装过程中持续存在
  • 唯一性:每个游戏安装都需要唯一标识符

例如: sdid=40009df0-d618-4d81-9da1-cbb3337b8dec


匹配 ID 归因

通过从网络 SDK 向游戏安装传递唯一标识符,Match ID 可提高网络推广活动的归因准确性,提供确定性匹配,替代基于指纹的归因。

高级功能:利用 Match ID 进行归因是一项高级功能,需要在网络和游戏实施之间进行协调。 实施前请咨询 Singular 解决方案工程师。

匹配 ID 如何工作

  1. 网络 SDK 生成匹配 ID:当用户访问登陆页面时,Singular 网络 SDK生成唯一的匹配 ID。
  2. 检索匹配 ID:使用 Web SDK 方法从登陆页面检索匹配 ID
  3. 传递给游戏:在下载/安装过程中,您的实现将匹配 ID 从网页传递到游戏(例如,查询参数、深层链接、cookie
  4. 首次启动报告:游戏通过match_id 参数将匹配 ID 包含在发送给 Singular 的首次会话通知中
  5. 确定性匹配:Singular 使用匹配 ID 进行精确归属匹配

网络 SDK 匹配 ID 方法

本地实现

Singular Web SDK 提供本机方法,用于在登陆页面上检索、设置和清除匹配 ID 值。

可用方法

方法 说明
getMatchID()

读取 Singular Web SDK 为当前网页会话生成的唯一匹配 ID。

返回值:包含匹配 ID 值的字符串

setMatchID(matchId)

为当前网络会话设置自定义匹配 ID,而不是使用 Singular 生成的值。

参数: matchId (字符串)- 自定义匹配 ID 值

clearMatchID()

清除通过setMatchID()设置的自定义匹配 ID,并恢复为 Singular 生成的默认值。


实现示例

NATIVE JAVASCRIPTGOOGLE TAG MANAGER

本地网络 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;
});

将比赛 ID 传递给游戏

实施策略

从 Web SDK 获取匹配 ID 后,实施将值从登陆页面传递到游戏安装的机制。

常见方法

方法 实施 使用案例
查询参数

在下载 URL 中添加匹配 ID 作为查询参数。

https://example.com/download?match_id=abc123

直接下载,下载页面可提取参数并传递给游戏安装程序

Cookie 存储

在游戏下载页面可访问的第一方 Cookie 中存储匹配 ID。

document.cookie = `match_id=${matchId}; path=/; max-age=86400`;

多页面流程,其中匹配 ID 需要在页面导航中持续存在

本地存储

在浏览器本地存储中存储匹配 ID。

localStorage.setItem('singular_match_id', matchId);

登陆页面和下载页面共享存储空间的同域场景

深度链接

在自定义深度链接方案中嵌入匹配 ID,以便直接启动游戏。

mygame://install?match_id=abc123

通过自定义协议处理程序实现高级功能

服务器端 API

将匹配 ID 发送至服务器 API,游戏通过验证请求进行检索。

安全实施需要服务器端验证和用户认证


S2S API 实现

报告比赛 ID

游戏从网络实施中检索到匹配 ID 后,将其纳入向 Singular 发送的首次会话通知中,以便进行归属匹配。

关键时间:匹配 ID 必须包含在第一个游戏会话(安装)通知中,以便进行归属匹配。在后续会话中发送匹配 ID 无法实现归属匹配。

带有匹配 ID 的会话请求

PYTHONCURLJAVASCRIPT
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
)

匹配 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

会话请求示例

实施示例

PYTHONCURLJAVASCRIPT
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'
)

游戏内事件跟踪

跟踪游戏内事件和用户互动,以分析营销活动效果、优化用户漏斗并衡量整个玩家旅程的参与度。

事件规划

事件定义

在实施 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 货币代码

事件请求示例

实施示例

PYTHONCURLJAVASCRIPT

标准事件

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'
)

下一步

利用其他资源和支持完成 PC 与控制台 S2S 集成。

其他资源

文档和支持


支持渠道

获取帮助

联系 Singular 团队获取实施帮助和技术支持。

  • 解决方案工程师:向 Singular 解决方案工程师咨询高级功能和集成规划。
  • 客户成功经理:联系客户成功经理,了解企业功能启用和账户配置情况
  • 支持团队:就技术问题和故障排除协助提交支持票据