App ID
appId 是 Drop 钱包在边缘层用来查找每个 dApp 配置的一个 UUID。它控制 以下三项内容:
- 哪些父 origin 可以嵌入钱包。 Drop 钱包的边缘函数会在每个响应上 设置一个动态的
Content-Security-Policy: frame-ancestors <your-origins>头。任何 试图从未注册 origin iframe 加载钱包的 dApp 都会在任何代码运行之前 被浏览器拦截。 - 特性开关。 各个 dApp 可以独立地启用或禁用特性(额外的链、额外 的资产等),不会影响到其他集成。
- 分析作用域。 存储、分析以及每个合作方的状态都以
appId作为 键,因此你的集成是彻底隔离的。
INFO
appId 在本地开发时是可选的。你可以省略它或传入任意 UUID,钱包 会回落到仅限 localhost 的 CSP。一旦部署到公开 origin,它就是必需的。
注册 App ID
目前没有自助门户 —— 注册是通过向合作方数据库提交 PR 完成的。
生成一个 UUID v4(例如
uuidgen或crypto.randomUUID())。针对
apps/web/shared/partners.ts提交一个 pull request,为你的 dApp 新增一条记录:tsconst PARTNERS: Record<string, AppConfig> = { // ... existing entries '<your-uuid>': { domains: ['your-app.com', '*.your-app.com'], assets: { additionalEnabled: [] }, }, }PR 合并并且钱包重新部署后,该条目就会生效。
domains
字符串会使用 wildcard-match 与 浏览器报告的 frame-ancestors origin 进行匹配。你可以列出裸主机名 (your-app.com)、通配符(*.your-app.com),或包含协议的完整 origin(https://your-app.com)。当你传入主机名时,http:// 和 https:// 两种变体都会被接受。
无论 domains 如何配置,localhost 和 127.0.0.1 始终被允许, 因此你可以针对未注册或 domains 为空的 appId 进行本地开发, 无需额外配置。
assets.additionalEnabled
一个额外链 ID 列表,用于在钱包 UI 中在默认集合之外再展示这些链。 如果你只需要默认集合,就保留为 []。
使用你的 App ID
在创建钱包时将 UUID 作为 appId 传入:
tsx
const wallet = createWallet({
appId: '424306bd-e3ae-40c0-902b-dffb1f18c7cc',
providers: {
solana: true,
},
})SDK 会以 ?appId=<uuid> 的形式转发给 iframe —— 你无需执行任何运行时 握手。
如果 App ID 不正确会怎样?
- 未知 UUID —— 边缘函数会回落到
NO_APP_CONFIG,它只允许localhost和127.0.0.1。钱包将无法在你的生产 origin 上加载, 浏览器控制台会出现 CSP 违规提示。 - 错误的 domains —— 与上同:浏览器会在任何钱包代码执行之前阻止 iframe 加载。
- 缺少 UUID —— 同上方的“未知 UUID”。这是有意为之,这样遗漏
appId就不会意外地放宽你的允许列表。