phantom-connect

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Phantom Connect SDK

Phantom Connect SDK

Build wallet-connected Solana applications with the Phantom Connect SDK ecosystem.
借助Phantom Connect SDK生态系统构建支持钱包连接的Solana应用。

SDK Selection

SDK选择

PlatformSDKPackage
React web appsReact SDK
@phantom/react-sdk
React Native / ExpoReact Native SDK
@phantom/react-native-sdk
Vanilla JS / Vue / AngularBrowser SDK
@phantom/browser-sdk
平台SDK包名
React网页应用React SDK
@phantom/react-sdk
React Native / ExpoReact Native SDK
@phantom/react-native-sdk
原生JS / Vue / AngularBrowser SDK
@phantom/browser-sdk

Prerequisites

前置条件

  1. Phantom Portal Account — Register at phantom.com/portal
  2. App ID — Get from Portal → App → Set Up
  3. Allowlisted URLs — Add domains and redirect URLs in Portal
  1. Phantom Portal账户 — 前往phantom.com/portal注册
  2. App ID — 从Portal → 应用 → 设置页面获取
  3. 白名单URL — 在Portal中添加域名和重定向URL

Auth Providers

认证提供商

ProviderDescriptionRequires appId
"injected"
Phantom browser extensionNo
"google"
Google OAuth (embedded wallet)Yes
"apple"
Apple ID (embedded wallet)Yes
提供商描述是否需要appId
"injected"
Phantom浏览器扩展
"google"
Google OAuth(嵌入式钱包)
"apple"
Apple ID(嵌入式钱包)

Critical Rules

重要规则

  1. Always use
    signAndSendTransaction
    signTransaction
    and
    signAllTransactions
    are NOT supported for embedded wallets
  2. Always use
    LAMPORTS_PER_SOL
    from
    @solana/web3.js
    for amount conversion — never hardcode
    1000000000
  3. Wrap all async SDK calls in try-catch — users can reject prompts at any time
  4. Check
    isConnected
    before signing
    — verify wallet connection before any operation
  5. React Native:
    react-native-get-random-values
    must be the FIRST import
    — before any other imports
  6. BrowserSDK must be a singleton — create one instance per app, never multiple
  7. Import
    AddressType
    from
    @phantom/browser-sdk
    only
  8. Use devnet for testing, mainnet-beta for production — never test against mainnet with real funds
  9. Never expose private keys — Phantom handles all signing internally
  10. Embedded wallet spending limit: $1,000 USD per day per app per user
  11. Social login sessions persist 7 days from last auth event — handle expiration gracefully
  1. 始终使用
    signAndSendTransaction
    — 嵌入式钱包不支持
    signTransaction
    signAllTransactions
  2. 始终使用
    @solana/web3.js
    中的
    LAMPORTS_PER_SOL
    进行金额转换
    — 切勿硬编码
    1000000000
  3. 将所有异步SDK调用包裹在try-catch中 — 用户可随时拒绝弹窗请求
  4. 签名前检查
    isConnected
    状态
    — 任何操作前先验证钱包连接状态
  5. React Native:
    react-native-get-random-values
    必须是第一个导入项
    — 早于其他所有导入
  6. BrowserSDK必须是单例 — 每个应用仅创建一个实例,切勿创建多个
  7. 仅从
    @phantom/browser-sdk
    导入
    AddressType
  8. 使用devnet进行测试,mainnet-beta用于生产环境 — 切勿使用主网进行真实资金测试
  9. 切勿暴露私钥 — Phantom会在内部处理所有签名操作
  10. 嵌入式钱包每日消费限额:每个应用每位用户每日1000美元
  11. 社交登录会话有效期:自上次认证事件起7天 — 需优雅处理过期情况

Quick Start

快速开始

React SDK

React SDK

tsx
import { PhantomProvider, useModal, usePhantom, darkTheme } from "@phantom/react-sdk";
import { AddressType } from "@phantom/browser-sdk";

function App() {
  return (
    <PhantomProvider
      config={{
        providers: ["google", "apple", "injected"],
        appId: "your-app-id",
        addressTypes: [AddressType.solana],
        authOptions: { redirectUrl: "https://yourapp.com/callback" },
      }}
      theme={darkTheme}
    >
      <YourApp />
    </PhantomProvider>
  );
}
tsx
import { PhantomProvider, useModal, usePhantom, darkTheme } from "@phantom/react-sdk";
import { AddressType } from "@phantom/browser-sdk";

function App() {
  return (
    <PhantomProvider
      config={{
        providers: ["google", "apple", "injected"],
        appId: "your-app-id",
        addressTypes: [AddressType.solana],
        authOptions: { redirectUrl: "https://yourapp.com/callback" },
      }}
      theme={darkTheme}
    >
      <YourApp />
    </PhantomProvider>
  );
}

React Native SDK

React Native SDK

tsx
// CRITICAL: Must be first import
import "react-native-get-random-values";
import { PhantomProvider, AddressType, darkTheme } from "@phantom/react-native-sdk";

// Requires app.json: { "expo": { "scheme": "myapp", "plugins": [...] } }
tsx
// 重要:必须是第一个导入项
import "react-native-get-random-values";
import { PhantomProvider, AddressType, darkTheme } from "@phantom/react-native-sdk";

// 需要在app.json中配置:{ "expo": { "scheme": "myapp", "plugins": [...] } }

Browser SDK

Browser SDK

ts
import { BrowserSDK, AddressType } from "@phantom/browser-sdk";

const sdk = new BrowserSDK({
  providers: ["google", "apple", "injected"],
  appId: "your-app-id",
  addressTypes: [AddressType.solana],
  autoConnect: true,
});
ts
import { BrowserSDK, AddressType } from "@phantom/browser-sdk";

const sdk = new BrowserSDK({
  providers: ["google", "apple", "injected"],
  appId: "your-app-id",
  addressTypes: [AddressType.solana],
  autoConnect: true,
});

Reference Docs

参考文档

For detailed implementation patterns, read these files:
  • references/react-sdk.md — Complete React SDK reference (hooks, components, theming)
  • references/react-native-sdk.md — Mobile setup, Expo config, deep links
  • references/browser-sdk.md — Vanilla JS patterns, events, wallet discovery
  • references/transactions.md — Solana transaction patterns (SOL, SPL tokens)
  • references/payments.md — Crypto payment flows (SOL, USDC, backend verification)
  • references/token-gating.md — Token-gated access (client-side, server-side, NFT)
  • references/nft-minting.md — NFT mint pages, Metaplex Core, compressed NFTs
如需详细的实现模式,请阅读以下文档:
  • references/react-sdk.md — 完整的React SDK参考(钩子、组件、主题)
  • references/react-native-sdk.md — 移动端设置、Expo配置、深度链接
  • references/browser-sdk.md — 原生JS模式、事件、钱包发现
  • references/transactions.md — Solana交易模式(SOL、SPL通证)
  • references/payments.md — 加密货币支付流程(SOL、USDC、后端验证)
  • references/token-gating.md — 通证门控访问(客户端、服务端、NFT)
  • references/nft-minting.md — NFT铸造页面、Metaplex Core、压缩NFT

Common Issues

常见问题

IssueSolution
"appId required"Add appId from Phantom Portal when using google/apple providers
Redirect not workingAllowlist redirectUrl in Phantom Portal
React Native crashesImport
react-native-get-random-values
as FIRST import
Extension not detectedUse
waitForPhantomExtension()
with timeout
signTransaction
error
Use
signAndSendTransaction
instead — embedded wallets don't support
signTransaction
问题解决方案
"appId required"使用Google/Apple提供商时,添加从Phantom Portal获取的appId
重定向不生效在Phantom Portal中将redirectUrl加入白名单
React Native应用崩溃
react-native-get-random-values
作为第一个导入项
扩展未被检测到使用带超时的
waitForPhantomExtension()
signTransaction
报错
改用
signAndSendTransaction
— 嵌入式钱包不支持
signTransaction

Resources

资源