Skip to content

App ID

appId 是 Drop 钱包在边缘层用来查找每个 dApp 配置的一个 UUID。它控制 以下三项内容:

  1. 哪些父 origin 可以嵌入钱包。 Drop 钱包的边缘函数会在每个响应上 设置一个动态的 Content-Security-Policy: frame-ancestors <your-origins> 头。任何 试图从未注册 origin iframe 加载钱包的 dApp 都会在任何代码运行之前 被浏览器拦截。
  2. 特性开关。 各个 dApp 可以独立地启用或禁用特性(额外的链、额外 的资产等),不会影响到其他集成。
  3. 分析作用域。 存储、分析以及每个合作方的状态都以 appId 作为 键,因此你的集成是彻底隔离的。

INFO

appId本地开发时是可选的。你可以省略它或传入任意 UUID,钱包 会回落到仅限 localhost 的 CSP。一旦部署到公开 origin,它就是必需的。

注册 App ID

目前没有自助门户 —— 注册是通过向合作方数据库提交 PR 完成的。

  1. 生成一个 UUID v4(例如 uuidgencrypto.randomUUID())。

  2. 针对 apps/web/shared/partners.ts 提交一个 pull request,为你的 dApp 新增一条记录:

    ts
    const PARTNERS: Record<string, AppConfig> = {
      // ... existing entries
      '<your-uuid>': {
        domains: ['your-app.com', '*.your-app.com'],
        assets: { additionalEnabled: [] },
      },
    }
  3. PR 合并并且钱包重新部署后,该条目就会生效。

domains

字符串会使用 wildcard-match 与 浏览器报告的 frame-ancestors origin 进行匹配。你可以列出裸主机名 (your-app.com)、通配符(*.your-app.com),或包含协议的完整 origin(https://your-app.com)。当你传入主机名时,http://https:// 两种变体都会被接受。

无论 domains 如何配置,localhost127.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,它只允许 localhost127.0.0.1。钱包将无法在你的生产 origin 上加载, 浏览器控制台会出现 CSP 违规提示。
  • 错误的 domains —— 与上同:浏览器会在任何钱包代码执行之前阻止 iframe 加载。
  • 缺少 UUID —— 同上方的“未知 UUID”。这是有意为之,这样遗漏 appId 就不会意外地放宽你的允许列表。