FKInstall attribution lab / v1 + v2
正在连接本地服务

ANDROID · DIRECT APK · EXACT

输入邀请码,直接测试安装归因。

生成邀请链接,在手机邀请页下载并安装 APK,首次打开 App 后核对 MATCHED / EXACT / APK_TOKEN

  1. 01Invite输入测试邀请码
  2. 02Invitation Page打开邀请下载页
  3. 03Install手机安装并首启
  4. 04Attribution核对精确归因

ONE-FIELD TEST

Android 邀请链路测试

服务会自动准备个性化 APK 和一次邀请下载会话,不需要填写 Runtime key、Release 或 Artifact。

PERSONALIZED · EXACT
1–64 位;可用英文字母、数字、点、下划线和短横线,首位必须是字母或数字。
IDLE · 输入邀请码后生成邀请链接。
状态
PERSONALIZED · EXACT
Request ID
等待生成
链接有效期
等待生成

完整邀请链接不会显示在页面、日志或存储中;只保留在当前页面内存,用于“打开”和“复制”。

PHONE TEST

手机怎么测

  1. 如已安装旧 Demo,先卸载 com.fkinstall.demo 或清除 App 数据。
  2. 在电脑生成后,点击“复制到手机”,把完整邀请链接发送到测试手机并直接打开。
  3. 在邀请页点击下载,允许安装来源后安装 APK,并首次打开 App;公网测试包会通过 HTTPS 自动执行精确解析。
  4. 只有使用本地 127.0.0.1:8787 测试时,才需 USB 连接手机并执行 adb reverse tcp:8787 tcp:8787

EXPECTED RESULT

App 验收结果

  • 读取到本次填写的邀请码
  • MATCHED / EXACT / APK_TOKEN
  • 显示格式为 req_… 的 Request ID
代码日志 adb logcat -s FKInstallDemo 关注 APK_SLOT_SCAN_RESULT、RESOLVE_START、RESOLVE_RESULT;日志不会记录完整 Token 或邀请码。
高级控制台 展开 Runtime、Release、Artifact、Session、v1 模拟与诊断工具

RUNTIME & TRUST BOUNDARY

凭据只活在当前页面内存

当前服务是 Demo / in-memory 诊断环境。刷新页面会清除 API key;页面、事件和响应面板都不会显示完整 key 或 Token。

仅加入当前页面发出的 Authorization Bearer 请求;提交后清空输入,不写入 Web Storage、URL 或结果 DOM。
NOT CONFIGURED · v2 控制动作已禁用
CURRENT DEMO

进程内状态与本地 APK 模板

可验证状态机、CAS、固定会话和 fallback;服务重启后数据不保证保留。

PRODUCTION BOUNDARY

持久数据库 + OSS immutable object adapter

150 MB APK 应由 OSS/CDN 直传和 Range 服务承载;本 Demo 不伪装已连接生产对象存储。

非本 Demo 目标入口,需由生产部署注入适配器。

V2 · INVITATION SCOPE

Android 发布、邀请 Artifact 与固定下载会话

v2 EXACT 证明 APK 携带的可复用邀请绑定被精确恢复,不等同于 v1 的单次 click,也不证明同一自然人或物理设备。

REUSABLE ARTIFACT
账号由 runtime key 确定;多应用通过 scoped appKey 切换,不臆造账号或应用列表接口。
AUTH
NOT SET
APP
NOT APPLIED
SCOPE
INVITATION

输入 runtime API key 并应用 App Key 后,控制面动作才会启用。

DIRECT APK TEST · GUIDED MODE

4 步完成邀请下载与邀请码验证

按顺序操作;每一步完成后会自动变成 READY,并提示下一步。

ANDROID · EXACT

现在做:先输入 Runtime API key,再应用 App Key。

  1. 01 WAITING

    配置并注册 Release

    配置 Runtime key 和 App 上下文,再注册当前 APK 模板为 READY Release。

    等待 Runtime key、App Key 与 READY Release。
  2. 02 WAITING

    生成个性化 APK

    在 bindData 中填写测试邀请码,Ensure Artifact 并等待状态变为 READY。

    默认测试邀请码为 DEMO001。
  3. 03 WAITING

    上线并生成邀请链接

    让 Stable Rollout 指向该 Release,再创建 PERSONALIZED / EXACT Session。

    完整邀请链接不会显示,只能复制或安全打开。
  4. 04 WAITING

    下载、安装并核对 App

    在邀请页下载 APK,首次打开 App,核对邀请码和 EXACT 归因结果。

    生成后把完整邀请链接复制到测试设备,或在电脑下载后用 ADB 安装。

STEP 04 · DEVICE CHECK

手机 / 模拟器验收清单

  1. 如果装过旧 Demo,先卸载或清除数据,避免重放上一次首启结果。
  2. 在控制台点击“复制邀请链接”,通过安全方式粘贴到测试设备浏览器并直接打开;不要只打开服务根地址。
  3. 也可以在电脑点击“打开邀请页”下载 APK,再执行 adb install -r /path/to/downloaded.apk
  4. 安装并首次打开 App;公网测试包会通过当前 HTTPS 服务自动解析。
  5. 只有本地回环测试才需执行 adb reverse tcp:8787 tcp:8787,并使用 http://127.0.0.1:8787
App 应显示
  • 读取到的邀请码:DEMO001
  • MATCHED / EXACT / APK_TOKEN
  • 格式为 req_… 的 Request ID
代码日志 adb logcat -s FKInstallDemo 关注 APK_SLOT_SCAN_RESULT、RESOLVE_START、RESOLVE_RESULT;日志不会记录完整 Token 或邀请码。

01 / IMMUTABLE RELEASE

注册 Android Release

POST /v2/apps/:appKey/android-releases
Android Release 字段
可留空由服务生成;重复 versionCode 请求会返回原不可变 Release。
不知道两个 Digest 怎么填?展开查看命令

在启动服务的终端环境中执行;把输出的 SHA-256 hex 分别填入上面两个字段。

shasum -a 256 "$APK_TEMPLATE_PATH" "$ANDROID_HOME/build-tools/35.0.0/apksigner" verify --print-certs "$APK_TEMPLATE_PATH" 第二条取 Signer #1 certificate SHA-256 digest 的值,并去掉冒号、转成小写。

等待注册。成功后仅显示非敏感 ID、版本与状态摘要。

CONTROL only。必须先退出 stable/candidate/LKG;不会立即删除对象,但该 Release 的 Artifact 不再自动生成。

02 / IDEMPOTENT ENSURE

邀请码绑定与 Artifact ensure

POST /v2/apps/:appKey/invitation-artifacts

可信后端可在邀请创建时预生成;邀请页加载可低优先级预热;真实下载前再做一次幂等 ensure。预热本身不会刷新 7 天保留时钟。

邀请码 Artifact 字段
Artifact recipe 必须显式固定一个不可变 Release;不会从当前 rollout 隐式推断。
0 bytes

同一 invitation + binding revision + release 的请求应幂等收敛;页面不会显示完整 referral token。

03A / STABLE ROLLOUT

Rollout Policy 与原子切换

GET + PATCH /v2/apps/:appKey/android-rollout-policy

先读取 generation/ETag。PATCH 必须带当前 If-Match;陈旧写入返回 412,不会自动覆盖。

Rollout Policy CAS 字段
由最近一次 GET 自动填充,不接受盲写。

03B / INVITATION LINK

创建固定 DownloadSession

POST /v2/apps/:appKey/android-download-sessions
Artifact ensure 返回的公开不透明 ID;成功后会自动带入。
页面只显示摘要;完整值仅保存在当前内存并随请求发送。

BOUND 固定个性化 Artifact;FALLBACK 固定基础 APK 且归因预期 UNMATCHED。会话建立后不会因 rollout 改变而换包。

APK LANE NOT READY 等待固定 DownloadSession。
CLIPBOARD FALLBACK NOT READY 不会自动读取;仅在用户明确点击时请求并复制。
两条路径相互独立;辅助 Token 获取或剪贴板写入失败也会继续下载固定 APK,完整 grant URL 与 Token 均不显示。

MAINTENANCE / RETENTION & GC

7 天保留与两阶段清理

retention-policy + artifact-gc-runs
DEFAULT7 days按 App 配置
PHASE 1GC_PENDING重复检查引用与会话
PHASE 2TOMBSTONE精确对象版本删除

页面预热、状态轮询和解析不会刷新保留时钟;真实下载 Session / URL issuance 才会推进活跃时间。

06 / AUDIT STREAM

v2 App-scoped 事件

0 EVENTS
  1. 应用上下文就绪后,可读取 app-scoped 发布、ensure、session、fallback 与 GC 事件。

V1 · CLICK SCOPE

一次性 Click Token 首启归因实验

以下原有场景保持独立:每个 click token 只能由一个安装占用,EXACT、PROBABLE 与 UNMATCHED 语义不变。

ONE INSTALL

REACHABILITY

实时可达性

等待首个事件

EXACT 0% 0 次显式 Token 恢复
PROBABLE 0% 0 次唯一候选恢复
UNMATCHED 0% 0 次安全拒绝猜测
CLICKS 0 0 次恢复请求

STEP 01 / CLICK

创建点击

POST /v1/clicks
1–64 位安全标识符
0 / 2048 bytes
服务原样运输 JSON 对象,不验证邀请码业务含义。

TRANSPORT STATE

点击与传递信息

WAITING

等待创建测试点击

提交左侧表单后,这里会显示 clickId、一次性 Token、过期时间与平台传递入口。

STEP 02 / FIRST OPEN

首次启动模拟

POST /v1/install-resolutions
固定格式:ins_ + 32 位小写十六进制随机值

RESOLUTION RESULT

恢复结果

NO RESULT

选择一种首次启动模拟,响应会在这里按状态、方法和可信等级拆开显示。

OBSERVABILITY

事件时间线

0 EVENTS
  1. 暂无事件。创建点击后,关键阶段会按时间显示在这里。