服务器到服务器 - SESSION 端点 API 参考

SESSION 端点 API 参考

通过 Singular 的 REST API 使用服务器到服务器(S2S)集成作为 SDK 实现的替代方案,跟踪用户会话并为应用安装、再互动和留存指标提供归因能力。


概述

服务器到服务器用例

当用户打开你的应用时,SESSION 端点会通知 Singular,从而支持安装和再互动归因以及留存指标。刚接触服务器到服务器?请参阅 S2S 基础指南 了解核心概念和通用设置。

支持的功能:

  • 安装归因: 针对营销广告系列的首次触点归因
  • 再互动归因: 针对回访用户的多触点归因
  • 留存指标: 基于会话的互动跟踪

会话管理

SESSION 端点向 Singular 通知应用打开事件,以便初始化用户会话用于归因和跟踪。

何时发送会话

会话触发条件

在以下应用生命周期事件中发送 SESSION 请求:

  • 全新安装: 安装后首次启动应用
  • 终止状态启动: 从完全关闭状态打开应用
  • 从后台切换到前台: 应用在超时时间过后返回前台(推荐:60 秒)

会话超时逻辑

实现会话超时机制,以防止应用短暂进入后台期间产生过多的 SESSION 请求。

推荐实现:

  • 超时时长: 60 秒(1 分钟)
  • 前台 < 超时: 如果应用在超时时间内返回前台,则不发送 SESSION
  • 前台 > 超时: 如果应用在后台停留超过超时时间,则发送 SESSION
  • 应用生命周期跟踪: 使用应用生命周期事件和计时器来管理会话状态

深度链接支持: 对于通过深度链接、Universal Links 或 App Links 打开应用且已填充 openuri 参数的情况,无论超时状态如何,都应始终发送 SESSION。


归因处理

基于会话的归因

Singular 会处理 SESSION 请求,以确定归因类型并触发相应的工作流程。

会话类型 Singular 处理 归因结果
首次会话(新安装) 触发安装归因流程 将安装归因到营销广告系列
符合再互动条件 触发再互动归因流程 将用户回访归因到广告系列或深度链接
标准会话 记录会话用于留存跟踪 计入用户活动和互动指标

了解更多: 再互动归因常见问题


事件顺序要求

会话和事件的时序会直接影响归因准确性和数据质量。

关键排序规则:

  1. 会话先于事件: 必须在该会话的任何事件之前收到单个 SESSION
  2. 实时事件传输: 应用内事件必须在其相应会话之后实时发送
  3. 顺序处理: 无效的会话顺序会导致数据不一致和归因错误

API 端点规范

SESSION 端点接受 POST 请求,参数以 application/x-www-form-urlencoded 形式发送。

端点

基础 URL 和方法

POST https://s2s.singular.net/api/v1/launch

必需的请求头:

Content-Type: application/x-www-form-urlencoded

请求格式:

POST /api/v1/launch HTTP/1.1
Host: s2s.singular.net
Content-Type: application/x-www-form-urlencoded

param1=value1&param2=value2

必需参数

所有 SESSION 请求都必须包含这些必需参数,并使用正确的值和格式。

API 身份验证

SDK Key

参数 详情
a

类型: 字符串
用于 API 身份验证的 Singular SDK Key。
获取途径: Singular UI → 主菜单 → Developer Tools

重要: 请勿使用 Reporting API Key。请求将被拒绝。

示例: sdkKey_afdadsf7asf56


设备标识符

特定平台标识符

参数 详情
idfa

平台: iOS
类型: UUIDv4
Identifier for Advertisers (IDFA) 用于支持广告跟踪和广告系列归因。
ATT 要求: iOS 14.5+ 要求用户通过 App Tracking Transparency 框架进行选择加入。
示例: DFC5A647-9043-4699-B2A5-76F03A97064B

  • 如果 IDFA 不可用(用户拒绝了 ATT 提示),请省略该参数。
  • 切勿传递 NULL 或空字符串。
  • 获取 IDFA
idfv

平台: iOS
类型: UUIDv4
Identifier for Vendors (IDFV) 在同一供应商的所有应用中保持一致。
始终必需: 无论 ATT 状态或 IDFA 是否可用,都必须包含此参数。
示例: 21DB6612-09B3-4ECC-84AC-B353B0AF1334

aifa

平台: Android
类型: UUIDv4
(Google Play)
Google Advertising ID (GAID) 在 Android 上支持用户可重置的广告跟踪。
示例: 8ecd7512-2864-440c-93f3-a3cabe62525b

  • 在 Google Play 设备上必需。
  • 在非 Google Play 设备上省略。
  • 如果不可用则省略——切勿传递 NULL 或空字符串。
  • 获取 AIFA
asid

平台: Android
类型: UUIDv4
(Google Play)
Android App Set ID 为同一开发者提供注重隐私的跨应用跟踪。
始终必需: 无论 GAID 是否可用,在 Google Play 设备上都必须包含此参数。
示例: edee92a2-7b2f-45f4-a509-840f170fc6d9

amid

平台: Android
类型: UUIDv4
(Amazon)
Amazon Advertising ID 适用于没有 Google Play Services 的 Amazon 设备。
示例: df07c7dc-cea7-4a89-b328-810ff5acb15d

  • Amazon Fire 设备必需。
  • 如果不可用则省略。
  • 获取 AMID
oaid

平台: Android
类型: UUIDv4
(中国 OEM 厂商)
Open Advertising Identifier (OAID) 适用于没有 Google Play Services 的中国制造设备(华为、小米、OPPO 等)。
示例: 01234567-89abc-defe-dcba-987654321012

  • 没有 Google Play 的中国 OEM 设备必需。
  • 如果不可用则省略。
  • 获取 OAID
andi

平台: Android
类型: 字符串
(非 Google Play)
Android ID 是设备生成的 64 位标识符。

受限使用: 在 Google Play 设备上禁止使用——请改用 AIFA 和 ASID。仅当没有其他可用标识符且应用不通过 Google Play 分发时才发送。

示例: fc8d449516de0dfb

sdid

平台: iOS、Android、PC、Xbox、PlayStation、Nintendo、MetaQuest、CTV
类型: UUIDv4
Singular Device ID 是客户端生成的匿名化 UUIDv4,代表一次唯一的应用安装。
主要标识符: 对于 PC 和主机应用而言,这是唯一相关的设备标识符。
示例: 40009df0-d618-4d81-9da1-cbb3337b8dec


设备参数

设备信息

参数 详情
p

类型: 字符串
应用所在的平台。
允许的值(区分大小写):
示例: Android

  • Android
  • iOS
  • PC
  • Xbox
  • Playstation
  • Nintendo
  • MetaQuest
  • CTV
ip

类型: 字符串
示例: 172.58.29.235

设备的公共 IPv4 地址。支持 IPv6,但为了与广告网络的归因兼容性,推荐使用 IPv4。
ve

类型: 字符串
示例: 9.2

会话时设备的操作系统版本。
ma

平台: iOS、Android
类型: 字符串
设备制造商(厂商名称)。必须与 mo (型号)一起使用。
获取设备制造商
示例: SamsungLGApple

mo

平台: iOS、Android
类型: 字符串
设备型号。必须与 ma (制造商)一起使用。
获取设备型号
示例: iPhone 4SGalaxy SIII

lc

平台: iOS、Android
类型: 字符串
IETF 区域设置标签——由下划线分隔的两位字母语言代码和国家/地区代码。
获取设备区域设置
示例: en_US

bd

平台: iOS、Android
类型: 字符串
设备构建标识符,经过 URL 编码。
获取设备构建版本
示例: Build%2F13D15


应用参数

应用信息

参数 详情
i

类型: 字符串
应用标识符(区分大小写)。
示例: com.singular.app

  • Android:包名(例如 com.singular.app
  • iOS:Bundle ID(例如 com.singular.app
  • PC/主机:你指定的标识符
app_v

类型: 字符串
示例: 1.2.3

应用版本。
att_authorization_status

平台: iOS
类型: 整数
App Tracking Transparency (ATT) 状态码(iOS 14.5+)。
状态值:

  • 0 - 未确定(未显示提示)
  • 1 - 受限(设备级跟踪已禁用)
  • 2 - 已拒绝(用户拒绝授权)
  • 3 - 已授权(用户已授予授权)

始终必需: 即使未实现 ATT,也要传递 0 (未确定)。

示例: 3

参数 详情
install

类型: 布尔值
指示该会话是否代表安装或重新安装后的首次会话。
用于: 重新安装跟踪功能
示例: true

  • true - 全新安装/重新安装后的首次会话
  • false - 后续会话(应用已安装)
install_time

平台: iOS、Android
类型: 整数
应用实际安装到设备上的 Unix 时间戳(秒),由操作系统报告。
示例: 1510040127

这是设备安装时间,而非 Singular 的归因安装时间。归因使用首次会话( install=true )的会话时间戳( utime )。

请参阅 设备数据检索指南 了解如何在 iOS 和 Android 上获取此值。

update_time

平台: iOS、Android
类型: 整数
应用在设备上最后一次更新的 Unix 时间戳(秒),由操作系统报告。
示例: 1510040127

请参阅 设备数据检索指南 了解如何在 iOS 和 Android 上获取此值。


反欺诈参数

安装来源验证

参数 详情
install_source

平台: Android、PC
类型: 字符串
安装来源包名或商店标识符。
Android: 安装来源包名
Android 示例: com.android.vending (Google Play Store)
PC 支持的商店:

  • steam
  • epic
  • microsoftstore
  • humblestore
  • gog
  • selfdistributed
install_receipt

平台: iOS
类型: 字符串
用于欺诈验证的 Base64 编码 iOS 安装收据。
示例(已截断): MIJF9wYJKoZIhvcNAQcCoIJF6DCCReQCAQExCzAJBgUrDgMCGgUAMII1m...


深度链接参数

深度链接支持

参数 详情
openuri

平台: iOS、Android
类型: 字符串
打开应用的深度链接、Universal Link 或 App Link,经过 URL 编码。
原始 URL: myapp://home/page?queryparam1=value1&queryparam2=value2
编码后示例: myapp%3A%2F%2Fhome%2Fpage%3Fqueryparam1%3Dvalue1%26queryparam2%3Dvalue2

ddl_enabled

平台: iOS、Android
类型: 布尔值
指示应用是否期望在响应中收到延迟深度链接 URL。
响应示例:

  • true - 期望在响应中收到延迟深度链接
  • false - 不期望收到延迟深度链接
{
  "deferred_deeplink": "myapp://deferred-deeplink",
  "status": "ok",
  "deferred_passthrough": "passthroughvalue"
}
singular_link_resolve_required

平台: iOS、Android
类型: 布尔值
请求将 Singular 短链接解析为长链接。必须与包含 Singular 短链接的 openuri 一起使用。
响应示例:

  • true - 返回展开后的长链接
  • false - 不解析链接
{
  "status":"ok",
  "resolved_singular_link":"https://myapp.sng.link/A59c0/nha7?_dl=myapp%3A%2F%2Fdeeplink&_ddl=myapp%3A%2F%2Fdeferred-deeplink&_p=passthroughvalue"
}

高级归因参数

平台归因增强

参数 详情
install_ref Native PC (Google Play Games)

平台: Android (Google Play)
类型: JSON
经过 JSON URL 编码的 Google Install Referrer 信息。为 Android 和 Google Play Games PC 安装提供最准确的归因。
Android JSON 结构:
Native PC JSON 结构:
用于:
更多信息:

URL 编码示例: %7B%22installBeginTimestampSeconds%22%3A%221568939453%22...

{
   "installBeginTimestampSeconds":"1568939453",
   "referrer":"utm_source=google-play&utm_medium=organic",
   "clickTimestampSeconds":"0",
   "referrer_source":"service",
   "current_device_time":"1568944524"
}
{
   "install_time_epoch_seconds":"1568939453",
   "install_referrer":"utm_source=google-play&utm_medium=organic"
}
  • Facebook 用户级导出
  • Data Destination 共享
  • Postback 准确性
meta_ref

平台: Android (Google Play)
类型: JSON

自 2025 年 6 月 18 日起: Meta Advanced Mobile Measurement (AMM) 无需再实现 Meta Install Referrer。如果已启用 AMM,则不推荐使用。

经过 JSON URL 编码的 Meta Install Referrer,用于细粒度的用户级归因数据。
JSON 结构:
了解更多: Meta Referrer 常见问题

{
  "install_referrer": {
    "utm_source":"apps.facebook.com",
    "utm_campaign": "fb4a",
    "utm_content": {
      "source":{
        "data":"c7e6b890bf18a059c2185650bdb1af3dced7...",
        "nonce":"24859720343e2381daee9f39ae61"
        },
      "app":533744218636280,
      "t":1731181327
      },
    "is_ct":1,
    "actual_timestamp":1731181444
  }
}
attribution_token

平台: iOS
类型: 字符串
来自 AdServices 框架的 Apple Search Ads 归因令牌(iOS 14.3+)。
获取方式: 在安装/重新安装后首次启动应用时使用 attributionToken()
示例(已截断): KztLg%2FIkNsWDMuBMOU%2BySnkPU5myJb4OFmeaMUE%2BTqQJP...


可选参数

可选参数可增强跟踪能力并支持高级功能。

时间戳参数

参数 详情
utime

类型: 整数
会话的 10 位 Unix 时间戳。
示例: 1483228800

umilisec

类型: 整数
含毫秒的 13 位 Unix 时间戳。
示例: 1483228800000


网络和位置参数

参数 详情
use_ip

类型: 布尔值
指示 Singular 从 HTTP 请求中提取 IP 地址,而不是使用 ip 参数。

限制:

  • 会阻止 Singular 基于 IP 进行地理定位。
  • 通过 country 参数提供两位字母的国家/地区代码。
  • ip 参数互斥——请勿同时使用两者。
  • 必须提供 ipuse_ip 之一,以避免数据被拒绝。

示例: true

country

类型: 字符串
ISO 3166-1 alpha-2 两位字母的国家/地区代码。
以下情况必需: IP 地址不可用或 use_ip=true
示例: US

ua

类型: 字符串
经过 URL 编码的 User Agent 字符串。
原始: Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15...
示例: Mozilla%2F5.0%20(iPhone%3B%20CPU%20iPhone%20OS%2014_0...

c

平台: iOS、Android
类型: 字符串
网络连接类型。
允许的值: wificarrier
示例: wifi

cn

平台: iOS、Android
类型: 字符串
示例: Comcast

互联网服务提供商的运营商名称。

自定义属性

参数 详情
global_properties

类型: JSON
经过 URL 编码的 JSON 对象,包含自定义键值对。
限制:
JSON: {"key1":"value1","key2":"value2"}
URL 编码后: %7B%22key1%22%3A%22value1%22%2C%22key2%22%3A%22value2%22%7D

  • 最多 5 个键值对
  • 每个键和值最多 200 个字符

卸载跟踪支持

参数 详情
apns_token

平台: iOS
类型: 字符串
经过十六进制编码的 Apple Push Notification Service (APNs) 设备令牌。
示例: b0adf7c9730763f88e1a048e28c68a9f806ed032fb522debff5bfba010a9b052

fcm

平台: Android
类型: 字符串
Firebase Cloud Messaging 设备令牌。
示例: bk3RNwTe3H0CI2k_HHwgIpoDKCIZvvD...MExUdFQ3P1


数据隐私参数

参数 详情
data_sharing_options

类型: JSON
经过 JSON URL 编码的终端用户数据共享同意信息。必须持久保存并在所有后续 SESSION 和 EVENT 请求中传递。
用户已同意(选择加入):
用户已拒绝(选择退出):
示例: %7B%22limit_data_sharing%22%3Atrue%7D

{"limit_data_sharing":false}
{"limit_data_sharing":true}
dnt

平台: iOS、Android
类型: 整数
Do Not Track 状态。
示例: 0

  • 1 - 已启用 Do Not Track
  • 0 - 已禁用 Do Not Track
dntoff

平台: iOS、Android
类型: 整数
指示 Do Not Track 是否为 OFF。
示例: 1

  • 0 - 已启用 Do Not Track(OFF=false)
  • 1 - 已禁用 Do Not Track(OFF=true)

跨设备支持

参数 详情
custom_user_id

类型: 字符串
用于跨设备跟踪的你的内部用户 ID。

禁止 PII: 请勿传递个人身份信息。请使用经过哈希处理或以其他方式匿名化的内部标识符,而不是原始的电子邮件地址、电话号码或姓名。

示例: 123456789abcd


SKAdNetwork 支持

参数 详情
skan_conversion_value

平台: iOS
类型: 整数
会话时的最新 SKAdNetwork 转化值。
了解更多: SKAdNetwork 实现
示例: 7

skan_first_call_timestamp

平台: iOS
类型: 整数
首次调用 SKAdNetwork API 的 Unix 时间戳。
示例: 1483228800

skan_last_call_timestamp

平台: iOS
类型: 整数
会话时最近一次调用 SKAdNetwork API 的 Unix 时间戳。
示例: 1483228800


Google Ads ICM 支持(Beta)

参数 详情
odm_info

平台: iOS
类型: 字符串
Google Ads Integrated Conversion Measurement(Beta)必需。
Google Ads ICM 文档

odm_error

平台: iOS
类型: 字符串
Google Ads Integrated Conversion Measurement(Beta)必需。
Google Ads ICM 文档


请求示例

示例代码演示了如何在多种编程语言中集成 SESSION 端点。

示例免责声明: 代码示例可能未包含所有必需参数。在生产环境实现之前,请先验证完整的参数列表。开发/测试时请使用唯一的 i (应用标识符)。

PYTHON CURL HTTP JAVA

Python 示例

import requests

url = 'https://s2s.singular.net/api/v1/launch'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
    'a': 'sdk_key_here',
    'p': 'Android',
    'i': 'com.singular.app',
    'ip': '10.1.2.3',
    've': '9.2',
    'ma': 'samsung',
    'mo': 'SM-G935F',
    'lc': 'en_US',
    'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
    'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
    'install': 'true',
    'n': 'MyCoolAppName',
    'bd': 'Build/13D15',
    'app_v': '1.2.3',
    'openuri': 'myapp://home/page?queryparam1=value1',
    'ddl_enabled': 'true',
    'install_source': 'com.android.vending',
    'install_time': 1510040127,
    'update_time': 1510090877
}

response = requests.post(url, data=data, headers=headers)
print(response.json())

响应码和错误

SESSION 端点返回 HTTP 状态码和 JSON 响应,指示请求成功或失败。

完整的错误文档: S2S 响应码和错误处理


测试和验证

在生产环境部署之前,使用 Singular SDK Console 进行实时数据验证,以验证 S2S 集成。

测试流程

端到端验证

  1. 注册测试设备: 获取设备广告 ID 并添加到 Singular SDK Console
  2. 启用 Console 日志记录: 在 SDK Console 中添加设备标识符以捕获测试数据
  3. 使用开发环境 App ID: 使用开发版本覆盖应用标识符(例如 com.singular.app.dev ),以将测试数据与生产数据分开
  4. 启动应用: 从终止状态打开应用以触发会话
  5. 验证客户端数据: 确认应用向你的服务器发送了所有必需的 Singular 数据点
  6. 验证服务器请求: 确认你的服务器向 https://s2s.singular.net/api/v1/launch 发送了包含所有必需参数的 SESSION 请求
  7. 检查 SDK Console: 几秒钟内,SESSION 事件应出现在 SDK Console 中
  8. 重复测试: 验证每次应用进入和切换到前台时都会触发 SESSION

SDK Console 会话事件

关键验证: 确认在任何 EVENT 请求之前,SESSION 事件都会在应用打开/切换到前台时发生。无效的顺序会导致归因错误。

成功指标: 如果 SESSION 出现在 SDK Console 中,说明你已成功完成端到端集成测试!


其他资源

测试文档

完整的测试指南: S2S 集成测试指南