TapFun デベロッパーポータル
Markdown 版 JAEN

はじめに

既知の問題(2026-10-02): ゲームパッドの 1 回の入力が 2 回分になる問題があります。詳細とワークアラウンドは こちら。

このページは、クラウドゲーミングで TapFun にゲームを提供するパブリッシャー・開発者向けの接続仕様書です。Windows 向け exe をクラウド上の Windows サーバーで実行し、プレイヤーのブラウザへストリーミング配信します。主にプレイ時間課金で、アセットの追加ダウンロードが無いタイトルに適しています。

ブラウザで動作するゲームを提供する場合は Web App 向けの仕様書 を参照してください。

テストプレイまで

  1. 実行可能な exe が格納された zip ファイルを提出いただきます。
  2. テスト環境でのプレイ用のリンクをお送りしますので、手触りなどをお試しください。
  3. 無料プレイ時間の終了後もテストされる場合は、エナジーやタイトルパスの購入が必要です。決済手段には「AmazonPay」を選択してください(テスト環境での決済方法)。

テストプレイの結果、大きな問題が無ければ以下に進みます。

コミュニケーション手段の確立

Publisher Console へのログイン

exe のアップデートや各種設定は、テスト環境の Publisher Console(https://<TEST_HOST>/publisher)で行えます。担当者がログイン権限を付与しますので、ログインされる方のメールアドレスをお伝えください。

リリース内容の調整

動作上の問題の解決の目処が立ちましたら、リリース時期や提供価格を調整します。

開発中の問題発生時の対応

「操作が反応しない」「意図しない動作がある」といった問題が発生した際は、以下を添えてコミュニケーションチャネルでお知らせください。

問題が正常な仕様に起因する場合、双方協議のうえで機能追加や変更を行う場合があります。

提出する exe の要件

exe の調整作業

リリースに向けて、exe の調整を行っていただきます。

テストからリリースまで

  1. テスト環境で確認する: テスト環境では、Basic 認証の後に、ご自身で作成した TapFun アカウントでログインします(プレイにはログインが必要です)。Publisher Console のバージョン一覧の「このバージョンで起動」からも起動できます。
  2. 本番環境で最終確認する: 本番の Publisher Console の権限は別途付与します。リリース前は非公開の状態で、本番でのテストプレイの方法で確認してください。
  3. 公開する: 公開作業は TapFun が行います。公開時刻は 10:00〜17:00 の間で調整できます。

デバッグ

ゲーム実行ページの URL に次のパラメータを付けると、クライアント API のやり取りを確認できます。

パラメータ 内容
?debugLog=1 ゲーム画面の上にログ表示領域を出します。TapFun が受け取ったクライアント API のリクエスト(consoleLog を含む)が表示されます。
?verbose=1 ブラウザのデベロッパーツールのコンソールに詳細なログを出します。consoleLog の data もここに出力されます。

プレイヤーからの問い合わせ

FAQ

Q. ゲーム画面をクリックするまで音が出ません。 A. ブラウザの制約による挙動(仕様)です。

Q. ゲームパッドが反応しません。 A. ゲーム画面をクリックした後に反応します。状況によってはクリックしなくても反応しますが、基本として最初にゲーム画面のクリックが必要です。

Q. iPhone でほかのアプリから戻ると、音が出なくなります。 A. 毎回ではありませんが、すべてのタイトルで起きることがあります。音が出ないまま一度ホーム画面に戻り、もう一度ブラウザに戻ると回復します。

環境

ホスト名

TapFun 環境 ホスト名 Web UI の Basic 認証
テスト 担当者にお問い合わせください(本ドキュメントでは <TEST_HOST> と表記) あり(ID / パスワードは担当者にお問い合わせください)
本番 https://tapfun.co.jp なし

テスト環境のホスト名と Basic 認証の ID / パスワードは秘匿情報です。このドキュメントには記載していませんので、TapFun の担当者にお問い合わせください。コード例などの <TEST_HOST> はテスト環境のホスト名に置き換えてください。社外や公開の場(公開リポジトリ、公開チャンネルなど)には記載しないでください。

テスト環境での決済方法

テスト環境でエナジーやタイトルパスを購入する際は、次のいずれかを使用してください。

本番でのテストプレイ

リリース前のアプリにアクセスするには、Publisher Console の基本情報でメンテナンスモードを有効にし、「メンテナンス例外メールアドレス」にテストプレイするユーザーのメールアドレスを入力してください。

本番で購入を伴うテストを行う場合は、TapFun 側でアプリごとにテストプレイ用アカウントを登録します。このアカウントには対象アプリでのみ使える TapFun クレジットが付与されます。テストプレイ用アカウントの購入は即座に取り消され、売上から相殺されます。

Publisher Console

基本情報

項目 説明
アプリ ID アプリの内部 ID です。
name 内部名です。
apiKey Web API を呼ぶ際の API キーです。
Bearer token Web API を呼ぶ際の Authorization: Bearer の値です(アプリID_apiKey の形式)。
メンテナンスモード 有効にするとメンテナンスモードになります。
メンテナンス例外メールアドレス メンテナンス中でもプレイできるユーザーのメールアドレスです(改行区切り)。リリース前の非公開アプリでも、メンテナンスモードを有効にするとこのアドレスのアカウントからアクセスできます。
folder アップロードするバイナリの zip 内のフォルダ名です。
exe zip 内で実行する exe のファイル名です。
exe 起動パラメータ コマンドライン起動オプションです。例: --debug=on --verbose
デスクトップ横幅 / 高さ クラウドレンダリングサーバー上のデスクトップ解像度です。既定は 1920x1080 です(横幅 720〜1920、高さ 480〜1080)。
セーブデータディレクトリ セーブデータのディレクトリです。中のファイルはすべてセーブデータとして保存・復元されるため、セーブデータ以外のファイルを入れないでください。変更はご相談ください(ユーザーデータの保存復元)。
ゲームパッド対応 ゲームパッドで操作できるタイトルで有効にします。有効にすると、スマートフォン・タブレットからもプレイできるようになります(対応する入力)。
バーチャルパッドデフォルト スマートフォン・タブレットで、画面上のバーチャルパッドを最初から表示するかどうかです。タップ操作だけで遊べるタイトルは無効にしてください。
ポインターデバイス対応 マウスで操作できるタイトルで有効にします。
マウスカーソル常時表示 マウスカーソルのキャプチャが必要なゲーム向けの設定です。

詳細情報(紹介ページ)

「詳細情報」タブでは、TapFun 上のゲーム紹介ページに表示する内容を編集します。

項目 説明
アイコン画像 ゲームのアイコンです。推奨解像度は 512x512(正方形)です。
2:1 画像 一覧や紹介ページで使う横長の画像です。推奨解像度は 1920x960 です。
ローディング画像 PC / SP ゲームの起動中に表示する画像です。推奨解像度は PC が 600x520、スマートフォンが 300x260 です。
操作説明画像 プレイ中に TapFun の画面から開ける操作説明の画像です(任意)。
スクリーンショット画像 紹介ページに表示するスクリーンショットです。
ゲームタイトル 紹介ページなどに表示するゲームの名前です。
開発元 / パブリッシャー 紹介ページに表示する開発元とパブリッシャーの名前です。
ゲーム詳細紹介文 紹介ページの本文です。Markdown 形式で書けます。
サードパーティー EULA ゲームに含まれるサードパーティーの使用許諾など、紹介ページに表示する規約の文面です。

操作説明画像とスクリーンショット画像は、ドラッグで並べ替えられます。削除するときは、画像をクリックして削除マークを付けたあと、「追加アップロード & 順序を保存」を押すと反映されます。

販売情報

「販売情報」は表示のみです。DLC 以外の変更は TapFun にご相談ください。

項目 説明
お試し分数 1 回あたりの無料プレイ時間です。1 回分は 12 時間後に回復します。
パス未所有時 1 エナジープレイ分数 タイトル利用パスを持っていないプレイヤーが、エナジー 1 つでプレイできる時間です。
タイトル利用パス価格 タイトル利用パスの価格です。
タイトル利用パス購入後無料時間 タイトル利用パスの購入後に、無料でプレイできる時間です。
タイトルパス所有時 1 エナジープレイ分数 タイトル利用パスを持っているプレイヤーが、エナジー 1 つでプレイできる時間です。
DLC (YAML) DLC の定義です。

DLC

yaml
- name: Digital Deluxe Upgrade
  code: digital_deluxe_upgrade
  price: 3270
  bundlePrice: 2000
  archived: false
  description: |
    通常版を Digital Deluxe Upgrade 版にアップグレードします。
    ・コラボ衣装(6 着)
    ・撮影機能「フォトフレーム」(6 種)
キー 型 説明
name string 商品名です。
code string DLC の識別子です。--dlcs に渡される値です。
price number DLC 単体の金額です。
bundlePrice number タイトルパス同梱版として販売する際の金額です。タイトルパス価格+この金額が同梱版の価格になります。
archived bool true にすると追加コンテンツ(および同梱版)として非表示になります。
description string 通常版購入者向けの説明文です。改行が反映されます。

Steam

Steam のストアページがあるタイトルでは、PC 幅のプレイ画面に Steam ストアの購入ウィジェットを表示します。

項目 説明
Steam AppID 表示する Steam のアプリ ID です。変更は TapFun にご相談ください。
追跡用パラメータ (utm) Steam ストアへのリンクに付ける utm_source / utm_medium / utm_campaign / utm_term / utm_content です(各 100 文字まで)。Steam が引き継ぐのはこの 5 種類だけです。

バイナリ更新方法

リリース時のセッションの扱い

状況 挙動
アップロード中・アップロード直後 プレイヤーには影響しません。プレイヤーが起動するのは「First Release」にしたバージョンだけです。
「First Release」を押したとき 新しいバージョンが使われるのは、リリース後に新しく開始したセッションからです。TapFun 側から、実行中のセッションを終了させることはありません。
実行中のセッション リリース前に開始したセッションは、そのまま続きます。プレイヤーが新しいバージョンを遊ぶには、ゲームを終了して起動し直す必要があります。
セーブデータ TapFun アカウントごとに保持され、バージョンを切り替えても引き継がれます。新旧のバージョンで同じセーブデータを読めるようにしてください。
前のバージョンに戻す 戻したいバージョンの「Revert Version」を押します。挙動は「First Release」と同じで、戻したあとに開始したセッションから適用されます。
リリース前に動作を確認する バージョン一覧の「このバージョンで起動」で、リリースしていないバージョンも新しいセッションで起動できます(ほかのプレイヤーには影響しません)。

「バイナリ」タブの画面:

ゲームの起動

アプリ画面上部の「アプリページ」から、次のオプションを付けてゲームを起動できます(デバッグ)。リリース前のアプリには「非公開状態」と表示されます。

オプション 説明
新規セッション 既存のセッションを使わず、新しいセッションでゲームを起動し直します。
パフォーマンスモニタ PC のプレイ画面にパフォーマンスモニタを表示します。
ログ表示 画面上に consoleLog API などのログを表示します(URL の ?debugLog=1 と同じ)。
verbose ブラウザのコンソールに出すログの量を増やします(URL の ?verbose=1 と同じ)。

そのほかのタブ

タブ 内容
月別売上 日ごとの購入回数・売上・取消と、売上区分(Platform / Publisher)ごとの内訳です。
CustomEvents クライアント API で送られたリクエスト(custom_event)の記録です。
Leaderboards リーダーボードとエントリーの一覧です。
Times プレイヤーごとのプレイ時間(無料・お試し・エナジー・合計)と、タイトル利用パスの購入日時などの記録です。
紹介ページ TapFun 上のゲーム紹介ページを別タブで開きます。

クラウド実行環境

動作概要【重要】

TapFun は「リモートデスクトップ方式」でゲームをサーバー内で起動し、ブラウザからリモート操作します。クラウドゲーミングの基盤には Tencent CAR を使用しています。

サーバー性能

プラン CPU メモリ GPU 性能 GPU Furmark 2 1080p スコア GPU 性能目安
S 4 コア 8 GB 2TF SP/30T Tesla T4 / GRID T4-8Q 他 2600〜3200 GTX 1650
M 4 コア 16 GB 4TF SP/30T Tesla T4 / GRID T4-8Q 他 2600〜3200 RTX 3050〜3060

ネットワーク要件

ゲーム実行環境からゲームサーバーへ通信する場合の要件です。

ユーザーデータの保存復元

ユーザーデータは起動時に自動で復元され、終了時に自動で保存されます。

保存先の例:

ゲームエンジンなど 保存先の例
Unity(Application.persistentDataPath) C:\Users\%UserName%\AppData\LocalLow\<会社名>\<製品名>
Godot 4 C:\Users\%UserName%\AppData\Roaming\Godot\app_userdata\<プロジェクト名>
Electron(localStorage を含む) C:\Users\%UserName%\AppData\Roaming\<アプリ名>
アクションゲームツクールMV C:\Users\%UserName%\AppData\Local\<フォルダ名>\save

対応する入力

プレイヤーの操作は、クラウド上の Windows に次の入力として届きます。

プレイヤーの操作 exe から見える入力
キーボード(PC) Windows の通常のキーボード入力
マウス(PC) Windows の通常のマウス入力。Publisher Console の「ポインターデバイス対応」を有効にしたタイトルで使えます
タッチ(スマートフォン・タブレット) マウスクリック
ゲームパッド(PC)・バーチャルパッド(スマートフォン・タブレット) 仮想ゲームパッド

ゲームパッド

ほとんどの場合、そのままゲームパッドで操作できます。

既知の問題(2026-10-02): ゲームパッドの 1 回の入力が 2 回分になる

  • 現象: ゲームパッドを接続すると、クラウド上の Windows に仮想パッドが 2 台(Xbox 360 互換と DualShock 4 互換)作られ、同じ入力が両方に届きます。接続中のすべてのパッドを読むゲーム(Unity の Input System、SDL、Windows.Gaming.Input の RawGameController など)では、1 回押すと 2 回分の入力になります(例: 移動が 2 マス進む、拾う操作ですぐ置いてしまう)。XInput だけを読むゲームでは起きません。
  • 対象: PC のゲームパッド、スマートフォン・タブレットのバーチャルパッドの両方。
  • 原因と状況: クラウドゲーミングの基盤(Tencent CAR)側の問題です。TapFun から修正を依頼しています。修正され次第、このページを更新します。
  • 対処: 修正までの間は、下記のワークアラウンドをご検討ください。

ワークアラウンド

ゲーム側で、入力を受け付けるゲームパッドを 1 台に絞ります。

  1. 最初に入力(ボタンかスティック)があったゲームパッドを「担当」にし、それ以外のゲームパッドの入力は無視する。
  2. 担当が切断されたら担当を解除し、次に入力があったゲームパッドを新しい担当にする。
  3. 通常の PC でプレイヤーがパッドを持ち替えた場合に備えて、担当の入力が 1 秒ほど無いときだけ、ほかのゲームパッドの入力で担当を切り替える。

クラウド上の 2 台には数ミリ秒差で同じ入力が届くため、どちらが担当になっても操作は変わりません。パッドの種類や名前で判定しないので、通常の PC でも、基盤が修正されて 1 台に戻った後も、そのままで問題なく動きます。

起動パラメータ

TapFun と API 連携するアプリに限り、exe の起動パラメータに --tapfun-user-id などを付与して起動します。既定では付与しません。 必要な場合は TapFun 担当者にご連絡ください(管理画面で有効にします)。付与しない場合、exe には Publisher Console の「exe 起動パラメータ」の値だけが渡ります。

text
C:\Apps\%UserName%\TapFunDebugConsoleApp.exe --type car --port 10100 --bearer-token 123_AAABBBCCC --api-host <TEST_HOST> --sig-key FFFGGGHHH --is-paid-timer 0 --is-sp 0 --tapfun-user-id PLYR01HE2R3JV6Y2NEGRMS4KZQB861DBG --dlcs delux_upgrade,special_upgrade --username=%E3%81%82%E3%81%84
パラメータ 説明
--type car 固定です。
--port CAR Data Channel 用の UDP ポート番号です。通常は 10100 固定です。
--bearer-token Web API および クライアント API の送信 で使う Bearer token です。
--api-host Web API のホスト名です(例: 本番は tapfun.co.jp)。
--sig-key Publisher Console の署名用キー(sigKey)です。
--tapfun-user-id TapFun ユーザー ID です。秘匿データではありませんが、画面上には表示しないでください。
--dlcs 購入済みの DLC の code をカンマ区切りで渡します。
--username ユーザー名です。URL エンコード済みの UTF-8、デコード後 1〜12 文字、絵文字不可です。
--is-paid-timer 1: 有料タイマーユーザー / 0: 無料タイマーユーザー
--is-sp 1: スマートフォンユーザー / 0: それ以外

クライアント API

exe と、プレイヤーのブラウザ上の TapFun との通信用 API です。送信データは一旦ユーザーのブラウザを通るため、秘匿情報は含めないでください。

API 概要
openUrl 別タブで URL を開く
inputTextSingleLine 1 行文字入力モーダル
inputTextMultiLine 複数行文字入力モーダル
inputTextMultiLineChunkText 複数行入力の初期テキストを分割送信
copyText クリップボードへコピーできるモーダル
showText テキストモーダル
getPlayerEnvironment プレイヤー環境の取得
launchSuccessNotice 起動成功通知
consoleLog ログ表示
clientStatus クライアント状態の通知(自動送信)

通信仕様

送信は TapFun の HTTP API への POST、受信は exe 内での UDP 待ち受けです。送信には --tapfun-user-id と --bearer-token が必要です(起動パラメータ)。

送信

項目 内容
送信先 https://<環境のホスト名>/api/v1/custom_event?userId=<TapFunユーザーID>
メソッド HTTP POST
Content-Type application/x-www-form-urlencoded
認証 Authorization: Bearer <Bearer token>(例: Authorization: Bearer 123_NWU0MjlkY2ViYTVkOTdiYjIw)
文字コード UTF-8
最大サイズ 10 MB
ブラウザへの伝達 WebSocket

受信

項目 内容
方式 CAR Data Channel。ローカル UDP ポート 10100(--port)で LISTEN
文字コード UTF-8
データ形式 クエリストリング形式(例: from=getPlayerEnvironment&isSP=0)。半角スペースは %20 でエンコードされます。

サンプル Unity プロジェクト

送信のサンプル(Unity / C#):

csharp
public IEnumerator SendCustomEventToCar(string userId, WWWForm formData)
{
    // config.apiHost = --api-host, config.bearerToken = --bearer-token
    string url = $"https://{config.apiHost}/api/v1/custom_event?userId={userId}";
    using (UnityWebRequest www = UnityWebRequest.Post(url, formData))
    {
        www.SetRequestHeader("Authorization", $"Bearer {config.bearerToken}");
        yield return www.SendWebRequest();
    }
}

受信のサンプル(Unity / C#):

csharp
private UdpClient udpServer;
private IPEndPoint udpEndPoint;
private Thread serverThread;
private int udpServerPort = 10100; // --port
private bool isDataChannelReceiveLoopRunning = false;

public void CarHandleDataChannel()
{
    try
    {
        udpEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), udpServerPort);
        udpServer = new UdpClient(udpEndPoint);
        isDataChannelReceiveLoopRunning = true;
        serverThread = new Thread(CarDataChannelReceiveLoop);
        serverThread.IsBackground = true;
        serverThread.Start();
    }
    catch (Exception e)
    {
        Debug.LogError($"Failed to start UDP server: {e.Message}");
    }
}

private void CarDataChannelReceiveLoop()
{
    while (isDataChannelReceiveLoopRunning)
    {
        try
        {
            byte[] receivedBytes = udpServer.Receive(ref udpEndPoint);
            string receivedMessage = Encoding.UTF8.GetString(receivedBytes); // クエリストリング形式
            byte[] responseBytes = Encoding.UTF8.GetBytes("OK");
            udpServer.Send(responseBytes, responseBytes.Length, udpEndPoint);
            lock (queueLock)
            {
                receivedMessagesQueue.Enqueue(receivedMessage);
            }
        }
        catch (Exception e)
        {
            Debug.LogError($"Unexpected error in receive loop: {e.Message}");
            Thread.Sleep(1000); // 予期しないエラーの場合は少し待ってから継続
        }
    }
}

openUrl

指定した URL を別タブで開きます。

パラメータ 必須 説明
req ✓ openUrl(固定)
url ✓ 別タブで開く URL

レスポンス通知: なし

inputTextSingleLine

1 行の文字入力モーダルを表示します。

パラメータ 必須 説明
req ✓ inputTextSingleLine(固定)
label レスポンス識別用ラベル
title モーダルのタイトル
placeholder プレースホルダー
text デフォルト文字列(最大 128 文字)
submit 入力完了ボタンの文字列
cancel キャンセルボタンの文字列
position 表示位置。省略時は中央、bottom で下部
maxlength 最大文字数(デフォルト 128、最大 128)
pattern HTML input 要素の pattern 属性 の値
invalid pattern に一致しない場合のメッセージ(setCustomValidity に渡されます)

レスポンス通知:

キー 入力完了 入力キャンセル
from inputTextSingleLine inputTextSingleLine
label リクエストの label リクエストの label
result submit cancel
text 入力文字列(最大 128 文字) 入力文字列

inputTextMultiLine

複数行の文字入力モーダルを表示します。

パラメータ 必須 説明
req ✓ inputTextMultiLine(固定)
label レスポンス識別用ラベル
title モーダルのタイトル
placeholder プレースホルダー
submit 入力完了ボタンの文字列
cancel キャンセルボタンの文字列
position 表示位置。省略時は中央、bottom で下部
maxlength 最大文字数(デフォルト 128、最大 10000。改行は 1 文字)
text デフォルト文字列
end inputTextMultiLineChunkText で送信したシーケンスの終了番号

レスポンス通知: 入力が 128 文字を超える場合は、128 文字ずつのシーケンスに分割して複数回通知されます。

キー 入力完了 入力キャンセル
from inputTextMultiLine inputTextMultiLine
label リクエストの label リクエストの label
result submit cancel
text 入力文字列(最大 128 文字) —
seq シーケンス番号(1〜end) —
end シーケンス最終番号 —

inputTextMultiLineChunkText

inputTextMultiLine の初期テキストを分割して事前送信します。すべて送信した後に inputTextMultiLine を end 付きで送ると、分割した文字列を結合してモーダルを開きます。長いテキストを分けて送りたい場合に使用します。

パラメータ 必須 説明
req ✓ inputTextMultiLineChunkText(固定)
text ✓ 文字列
seq ✓ シーケンス番号(最大 100)

レスポンス通知: なし

copyText

テキストをクリップボードにコピーできるモーダルを表示します。

パラメータ 必須 説明
req ✓ copyText(固定)
title モーダルのタイトル
text ✓ コピーする文字列

レスポンス通知: なし

showText

テキストモーダルを表示します。

パラメータ 必須 説明
req ✓ showText(固定)
text ✓ 表示する文字列

レスポンス通知: なし

getPlayerEnvironment

プレイヤーの環境を取得します。

パラメータ 必須 説明
req ✓ getPlayerEnvironment(固定)

レスポンス通知:

キー 説明
from getPlayerEnvironment
userAgent ブラウザの navigator.userAgent
isSP 1: スマートデバイス(iPhone / iPad / Android) / 0: それ以外
authenticated 1: ログイン中 / 0: ゲスト状態
isPaidTimer 1: 有料残り時間の利用ユーザー(1 秒以上の残り時間がある) / 0: それ以外

launchSuccessNotice

起動成功をプラットフォームに通知します。送信すると「ストリーミングを開始しています」のダイアログを早めに消せます。

起動成功通知待ちが有効なアプリでは、この通知を受信するか一定以上のストリーミングが持続するまで、マウス操作を受け付けません(プロセス起動完了前のマウス操作で応答待ちが発生するのを避けるため)。操作できない間はタイマーを消費しません。対象のアプリかどうかは事前にお伝えします。

パラメータ 必須 説明
req ✓ launchSuccessNotice(固定)

レスポンス通知: なし

consoleLog

ログを出力します。ゲーム実行ページの URL に ?verbose=1 を付けるとブラウザのデベロッパーツールのコンソールに、?debugLog=1 を付けると画面上のログ表示領域に表示されます(デバッグ)。

パラメータ 必須 説明
req ✓ consoleLog(固定)
data ✓ 文字列または JSON 文字列。JSON.parse() できた場合は JSON オブジェクトとしてコンソールに表示します。

レスポンス通知: なし

clientStatus

クライアント側の状態変化を通知します(リクエスト不要、自動送信)。

result 発生タイミング 追加キー
lastTimeRemain プレイ残り時間が 90 秒前に達した second: 秒数(90)
purchaseSelectModalOpen プレイ時間購入モーダルを表示した —
lastTimeInfoModalOpen 残り時間モーダルを表示した —
manualOpen 操作説明を表示した —
isPaidTimer 有料タイマーユーザーになった —
isFreeTimer 無料タイマーユーザーになった —

すべての通知に req=clientStatus が付きます。例: req=clientStatus&result=lastTimeRemain&second=90

Web API

パブリッシャー様のサーバー、または exe から呼び出す HTTP API です。

共通仕様

項目 内容
ベース URL https://<環境のホスト名>/api/v1(ホスト名)
メソッド HTTP GET / POST
文字コード UTF-8
リクエスト形式 URL パス、クエリストリング、POST データ(application/x-www-form-urlencoded。個別に記載があるものを除く)
レスポンス形式 JSON。配列の結果が 0 件の場合は空配列。HTTP ステータスは記載が無い限り 200
日時 UTC、yyyy-mm-ddThh:mm:ss.sssZ

認証

HTTP ヘッダー Authorization: Bearer <アプリID>_<APIキー>(Publisher Console の Bearer token)で認証します。

text
Authorization: Bearer 123_NWU0MjlkY2ViYTVkOTdiYjIwNThmZTkxMDMzYWM4Y2JmNGUyMTQ0Ng

認証失敗時は HTTP 403 で次を返します。

json
{"error":"no authorization"}

POST /api/v1/photos

TapFun フォトストレージに画像を保存します。ユーザーは TapFun 上で、ゲームから保存された画像を閲覧・ダウンロードできます。認証: 必要。

項目 内容
Content-Type multipart/form-data
クエリストリング userId TapFun ユーザー ID(必須)
POST データ file PNG / JPEG / WebP の画像バイナリ(必須)。part の Content-Disposition の filename は任意の値で必須(例: form-data; name="file"; filename="sample.jpg")

制約:

bash
curl -F "file=@sample.jpg;type=image/jpeg" \
  -H "Authorization: Bearer 1_8an4dAfsIyEEvBbaKxd55P2Wgf" \
  "https://<TEST_HOST>/api/v1/photos?userId=PLYR01JY39A09EE40YQZRHWTT9EM1VDBG"
json
// 成功
{ "result": "success" }
// 失敗(404): ユーザー ID が無い
{ "result": "failure", "message": "userId is not found" }
// 失敗(400): その他(file が無い、大きすぎる、形式が不正など)
{ "result": "failure", "message": "other problems." }

GET /api/v1/leaderboard/entries

リーダーボードのエントリー一覧を取得します。認証: 必要。

クエリストリング 必須 説明
name ✓ リーダーボード名
sort asc: 昇順 / desc: 降順(デフォルト)
userId ユーザー ID
arround 指定ユーザーの周辺のエントリーを取得します(1〜100)。userId 指定時に機能します
offset 表示開始位置(0〜9999)。範囲外は 0
limit 件数(1〜1000、デフォルト 100)。範囲外は 100
json
// 成功
{
  "result": "success",
  "entries": [
    {
      "position": 1,
      "userId": "PLYR01HE2R3JV6Y2NEGRMS4KZQB861DBG",
      "userName": "ユーザー名",          // UTF-8、絵文字不可、1〜12 文字
      "score": 12345,
      "note": "追加情報",                // 最大 8192 文字
      "createdAt": "2025-09-24T00:00:00.000Z",
      "updatedAt": "2025-09-24T00:00:00.000Z"
    }
  ]
}
// 失敗(404): ユーザー ID が無い
{ "result": "failure", "message": "userId is not found" }
// 失敗(400): その他
{ "result": "failure", "message": "other problems." }

POST /api/v1/leaderboard/entries

リーダーボードのエントリーを作成・更新します。既存のスコア値以下(同値を含む)の場合は更新しません。リーダーボードは name ごとに自動で作られます。認証: 必要。

POST データ 必須 説明
name ✓ リーダーボード名。英数字・_・- の 1〜64 文字(/^[0-9a-zA-Z_-]{1,64}$/)
userId ✓ ユーザー ID
score ✓ スコア値(-9,223,372,036,854,775,808〜9,223,372,036,854,775,807)
note 追加情報(UTF-8、0〜8192 文字)
force 1 を渡すと、既存のスコア値を下回る場合でも登録します
json
// 成功
{ "result": "success" }
// 失敗(404): ユーザー ID が無い
{ "result": "failure", "message": "userId is not found" }
// 失敗(400): その他
{ "result": "failure", "message": "other problems." }

POST /api/v1/leaderboard/entries/delete

リーダーボードのエントリーを削除します。エントリーが無い場合も成功を返します。認証: 必要。

POST データ 必須 説明
name ✓ リーダーボード名(/^[0-9a-zA-Z_-]{1,64}$/)
userId ✓ ユーザー ID
json
// 成功
{ "result": "success" }
// 失敗(404): ユーザー ID が無い
{ "result": "failure", "message": "userId is not found" }
// 失敗(400): その他
{ "result": "failure", "message": "other problems." }

用語

実行環境

exe を実行し配信するクラウドストリーミングサーバーです。

TapFun ユーザー ID

アプリ ID

アプリを特定する unsigned int 型の ID です。

API キー

アプリごとに発行される 26 桁の文字列です。文字種は 0-9, A-Z です。

Publisher Console

パブリッシャー様向けの管理画面です。アプリの設定、紹介ページ、売上の確認などを行います。テスト環境と本番環境で別々にあり、ログインできる方は TapFun が登録します。

紹介ページ

TapFun 上のゲームのページです(https://tapfun.co.jp/p/<アプリ>)。ゲームのプレイ画面は https://tapfun.co.jp/p/<アプリ>/play です。内容は Publisher Console の詳細情報で編集します。

ゲスト

TapFun にログインしていない状態のプレイヤーです。

TapFun ウォレット

プレイヤーが TapFun でチャージする残高です。TapFun 上での購入に使います。

TapFun クレジット

本番環境のテストプレイ用アカウントに付与される、対象のアプリでのみ使えるウォレット残高です(本番でのテストプレイ)。

セッション

クラウド上でゲームを起動してから終了するまでの 1 回分のプレイです。セッションの終了時にセーブデータが保存され、次のセッションの開始時に復元されます。

お試し時間

タイトルごとに設定された、無料でプレイできる時間です(Publisher Console の「お試し分数」)。1 回分は 12 時間後に回復します。

エナジー

プレイ時間を延長するためにプレイヤーが購入する単位です。エナジー 1 つで遊べる時間はタイトルごとに設定され、タイトル利用パスを持っているかどうかで別々の値になります(販売情報)。

タイトル利用パス

タイトルごとに販売する利用権です(「タイトルパス」とも書きます)。購入後、設定された時間は無料でプレイできます。DLC を同梱した版も販売できます(DLC)。

有料タイマーユーザー / 無料タイマーユーザー

有料のプレイ時間(エナジーやタイトル利用パスで得た残り時間)が 1 秒以上あるプレイヤーが有料タイマーユーザー、それ以外が無料タイマーユーザーです。起動パラメータ --is-paid-timer や getPlayerEnvironment の isPaidTimer で分かります。

First Release

Publisher Console で、アップロード済みのバージョンを、プレイヤーが起動するバージョンにする操作です(リリース時のセッションの扱い)。

バーチャルパッド

スマートフォン・タブレットのプレイ画面に表示する仮想のゲームパッドです。入力はゲームパッドの入力として exe に届きます(対応する入力)。

変更履歴

日付 内容
2026-10-02 このドキュメントを公開しました。

↑ ページ先頭へ