ホスティングと審査

体験は独自の名前で、独自のオリジンから配信します。オリジンに必要なことと、ZenClubへの掲載前に確認する内容を説明します。

独自のオリジン

https://my-garden.exampleのように、ZenClubとは異なるオリジンで体験をHTTPS配信します。Cookieを設定せず、機密情報と共有しないでください。フレームで許可されるのはスクリプトと独自オリジンだけです。

フレームでできないこと

  • ポップアップや新しいウィンドウを開くこと、周囲のページを移動することはできません。
  • alert、confirm、promptのダイアログ表示、フォーム送信、ダウンロード開始はできません。
  • カメラ、マイク、位置情報、決済は利用できません。全画面表示は可能です。
  • 訪問者を特定することはできません。リファラーやプラットフォームのCookieも受け取りません。

セキュリティヘッダー

ZenClubだけがフレームに読み込めるようにし、本当に必要な場合を除いてネットワークアクセスを閉じてください。SDK自体にネットワークアクセスは必要ありません。

http
Content-Security-Policy: default-src 'self'; connect-src 'none'; frame-ancestors https://zenclub.app; base-uri 'none'; object-src 'none'
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer

変わり続ける対象ではなく、バージョンをリリースする

マニフェストとconnect()の両方で、リリースごとに新しいバージョンを指定します。バージョン付きパスまたはコンテンツハッシュでアセットを配信し、開始済みのセッションが同じファイルを使えるようにしてください。プレイ中の訪問者はそのバージョンを使い続け、新しい起動では有効なバージョンが使われます。

リリース内容を封印する

sealはビルドのSHA-256一覧を作成し、verifyは公開前にフォルダーと照合します。紛れ込んだファイルや変更されたファイルを検出します。署名ではありません。

shell
npx zenclub-plugin seal dist
npx zenclub-plugin verify dist

審査チェックリスト

カタログに掲載する前に、すべてのバージョンを審査します。最初に次の項目を確認します。

  • 一般的なスマートフォンで15秒以内に起動し、コンソールエラーがないこと。
  • 一時停止、再開、非表示、終了がすべて正しく動作し、一時停止中に何も再生されないこと。
  • 再読み込み後も進行状況が保たれ、競合時に保存データが黙って上書きされないこと。
  • 再起動しなくてもライトとダークのテーマ、動きを抑える設定が反映されること。
  • 幅390ピクセルのスマートフォンから幅広のデスクトップまで、タッチ、マウス、キーボードで動作すること。
  • すべての画面が訪問者の言語で表示されること。ZenClubは英語、簡体字中国語、繁体字中国語、日本語、韓国語、フランス語、ドイツ語、スペイン語に対応し、1つの画面で言語が混在しないこと。
  • 広告、トラッカー、カウントダウンによる圧力、ダークパターンがなく、落ち着いた設計であること。

審査を依頼する

マニフェスト、審査対象バージョンのエントリーURL、体験の概要を添えてお問い合わせください。指定されたバージョン、エントリー、機能の組み合わせを承認します。いずれかを変更した場合は、同じ方法で新しいリリースを送ってください。

街の節目については、正確な宣言と対応するセーブデータ形式を添えて審査を依頼してください。音に対応したゲームの前に1.5のプラットフォームを公開し、節目に対応したゲームの前に1.6のプラットフォームを公開してください。プラットフォームをロールバックする場合は、コードだけでなく互換性のある承認権限も戻してください。街のデータベーステーブルとプレイヤー記録は保持します。セーブデータ形式を変更する場合は、報告する前に承認済みの必要最小限の項目定義が必要です。