OpenApps フロントエンド
OpenAppsアプリのクライアントサイド:Webまたはモバイルアプリが呼び出すSDK、エンドユーザーの認証方法、およびホスティングされたフロントエンドの提供方法。クライアントからのすべての書き込みはポリシーによって管理されるため、クライアントアクションにルールや不変条件が必要な場合はopenapps-backendスキルと組み合わせ、ホスティングとドメインにはopenapps-deployスキルを使用します。ファミリー全体のルーティングについては、ルートのopenappsスキルを参照してください。
リファレンスルーター
現在のタスクまたは用語に一致する行のみを読み取ってください。
| タスクまたは用語 | 読む場所 |
|---|---|
SDKの読み取り、書き込み、サブスクリプション、ページネーション、queryAggregate、count、フィルター、ソート、カーソル、setMany、set(path, null) | SDKリファレンス |
| Webフロントエンドの構築 | Webアプリガイド |
ローカル開発サーバー(npm run dev、Vite、localhost)、ログインポップアップ失敗、redirect_uri origin is not a registered origin、ローカル開発中のCORS | localhostでの開発 |
リフレッシュタイマー、setInterval、ポーリング、「鮮度を保つ」、カウントダウン、古いUI | SDKリファレンス |
| React Native / モバイル向けの構築 | React Nativeガイド |
アプリユーザーのメールOTP、OAuth、openBoundedWidget、統合ログインウィジェット、デフォルトのTurnkey認証 | アプリ認証 |
独自ウォレットログイン;walletLogin、authMethod:'phantom'、supportsWalletSignIn、サポートされていないウォレット / Wallet Standard | ウォレットログイン |
リフレッシュでウォレットログインが消える、getCurrentUser()がnullを返す、bounded_last_auth_method、セッション復元方法 | ウォレットログイン - 「ウォレットセッションはリロード後も維持されます」 |
| ゲスト、匿名ユーザー、招待リンク、アカウントアップグレード | 匿名アカウント |
ユーザーのXアカウントをリンク、connect('x')、completeConnection、getConnections、確認済みXハンドル、__connections__ | 接続アカウント |
| ホスティングされたフロントエンドとアプリURL | フロントエンドホスティング |
CLI開発者ログインまたはopenapps login | 開発者アカウント |
埋め込みウォレット、auth.wallets、@user.address after email/social login | 埋め込みウォレット |
onramp()、カードでSOL/USDC購入、Coinbase Onramp、ウォレットチャージ | onramp |
経験則
- すべてのクライアント書き込みはポリシーによって管理されます。書き込み時の
403はクライアントのバグではなく、ルール拒否です。ルールについてはopenapps-backendスキルを参照してください。 - 拒否された読み取りは
403ではなく、空の200レスポンスを返します。 - デフォルトでライブ。絶対にポーリングしないでください。 すべてのコレクションはプッシュベースであるため、パスを再読み取りする
setIntervalはバグであり、チューニングの選択肢ではありません。Reactの場合はuseQuery、またはsubscribeを使用してください。カウントダウンは再読み取りではなく、ローカルクロック状態で動作します。ライブではない数少ない表面(runQuery、functions.invoke、サードパーティ)については、意図的にポーリングしてください:非表示タブで一時停止し、タイマーを必要な状態にスコープし、バックオフし、制限を設けてください。sdk-reference.mdを参照してください。 - 計算値のリストに対しては
runQueryManyでバッチ読み取りを行い、リストに対してrunQueryをマッピングしないでください。sdk-reference.mdを参照してください。 - プロバイダーAPIキーは(バックエンドの)OpenAppsシークレットに配置し、フロントエンドコードには絶対に配置しないでください。
npm auditで@solana/web3.js -> jaysonを介したuuid勧告GHSA-w5hq-g745-h8pqが報告された場合は、スコープ付きオーバーライドレシピを使用してください。この勧告に対処します。インストールされたロックファイルに対してnpm audit --omit=devを実行し、残りの検出結果は個別に調査してください。- ほとんどのアプリでは認証のデフォルトを維持してください。 「ウォレットを有効にする」ために
authModeやauth.walletsを追加しないでください。デフォルトのTurnkeyメール/ソーシャルログインには既に@user.addressが含まれています。外部キーペアセッション(独自ウォレットログイン、サーバーSDKキーペアクライアント、CLIキーペアデータレーン)に対してのみ"auth": { "wallets": true }をデプロイしてください。完全なルールとオプトアウト:embedded-wallets.md。 @user.id(アカウントID)はアイデンティティ/所有権、@user.addressはウォレットです。@user.id(常に存在)でキーの所有権、メンバーシップ、認証ガードを管理します。@user.addressはウォレット/オンチェーンセマンティクスのためにのみ使用し、決してアイデンティティキーとしては使用しないでください。- 電話でのウォレットログインにはSolana Mobileアダプターが必要です。 電話のブラウザはウォレットアプリを注入しません。
@solana-mobile/wallet-standard-mobileをインストールしたままにし(.npmrcでlegacy-peer-deps=true)、ウィジェットを開く前にwindow.solanaを事前チェックしないでください。Solana Mobileを参照してください。