PC & コンソール S2S 統合ガイド
PCおよびコンソールゲームのアトリビューションにサーバー間統合を実装するための包括的なガイドで、デスクトップおよびゲームプラットフォーム全体で正確なキャンペーン測定と分析を可能にします。
エンタープライズ機能:PCおよびコンソールゲームのアトリビューションは、企業向け機能です。詳細については、PCおよびコンソールゲーム帰属FAQをお読みいただくか、カスタマーサクセスマネージャーまでお問い合わせください。
ウェブSDKの要件:ウェブキャンペーンからのPCおよびコンソールゲームのアトリビューションには、お客様のマーケティングランディングページにSingular Web SDKを実装する必要があります。Web SDKは、ユーザーがゲームをインストールして起動すると、クリックデータを取得し、アトリビューションマッチングを可能にします。
必要なステップ
- ランディングページにSingular Web SDKを実装する
- 一致するプロダクトID(ゲーム識別子と同じ)でWeb SDKを設定します。
- ゲーム側のS2S統合を実装する(本ガイド)
- アトリビューションの精度を高めるために、オプションでMatch IDを実装する。
概要
サーバー間の統合
Singularは、アトリビューション分析、キャンペーンパフォーマンス測定、ユーザー行動追跡のために、PCおよびコンソールゲームのコンバージョンデータのサーバー間報告を可能にするREST APIを提供します。
統合機能
- ゲームセッションのトラッキング:ゲーム起動時のユーザーセッションとアクティビティをレポート
- インストール帰属分析:新規ゲームのインストールをマーケティングキャンペーンに帰属させます。
- イベント分析:ファネル分析のためのゲーム内イベントとユーザーインタラクションのトラッキング
- 収益測定:ゲーム内購入と収益化のパフォーマンスを測定
- クロスプラットフォーム対応:PC、Xbox、PlayStation、Nintendo、Meta Questにまたがる統合トラッキング
前提条件
PC & Console S2S統合を実装する前に、Web SDKが完全なアトリビューションワークフローのために適切に設定されていることを確認してください。
| コンポーネント | 必要条件 |
|---|---|
| ウェブSDK |
必須:クリックデータを取得し、アトリビューションを有効にするために、マーケティングランディングページに実装する必要があります。 インプリメンテーションガイド:ウェブSDKの概要と入門
設定上の注意:Web SDKのプロダクトIDは、S2S統合で使用されるゲーム識別子( |
| SDKキー |
ダッシュボード → 開発者ツール → SDK統合 → SDKキーからSingular SDKキーを取得します。 |
| アトリビューション方法 |
利用可能なアトリビューション方法を確認し、実装に適した方法を選択します:
詳細については、アトリビューション方法を参照してください。 |
統合アーキテクチャ
PC およびコンソールの完全なアトリビューションには、ウェブサイドとゲームサイドの両方の実装が必要です。
アトリビューションの流れ
- ユーザーが広告をクリック:ユーザーがゲームのマーケティングキャンペーン広告をクリック
- ランディングページ訪問:ユーザーがSingular Web SDKを実装したランディングページに到着
- クリックキャプチャ:Web SDKはデバイスの指紋やキャンペーンパラメータを含むクリックデータを取得します。
- ゲームのダウンロード:ユーザーはストアまたは直接ダウンロードからゲームをダウンロードし、インストールします。
- 初回起動:ユーザーが初めてゲームを起動
- セッションレポート:ゲームはS2S APIを通じて、デバイス識別子と共にセッションを報告します。
- アトリビューションマッチング:フィンガープリントまたはマッチIDに基づいて、ゲームのインストールとウェブクリックをマッチングします。
- キャンペーン帰属:ROI測定のために、インストールを元のキャンペーンに帰属させます。
ドキュメント リソース
完全な API リファレンスでは、エンドポイントの仕様、パラメータ、および実装例を提供します。
統合ドキュメント
- WebSDK:Web SDKの概要と入門
- S2S APIリファレンス:PCとコンソールS2Sエンドポイントリファレンス
- アトリビューションガイド:PCおよびコンソールゲームのアトリビューションFAQ
統合コンセプト
Singularで完全なPC & Console S2S統合機能を実装するためのコアコンセプトと要件です。
認証
SDKキー要件
SingularのPC & Console S2S APIへの全てのリクエストは、a パラメータでのSDKキー認証が必要です。
| パラメータ | 説明 |
|---|---|
a
|
API認証用のSingular SDKキー。 場所Singular Dashboard → 開発者ツール → SDK統合 → SDKキー 重要です:Developer Tools → API KeysにあるReporting API Keyは使用しないでください。Reporting API KeyはSingularのReporting API専用です。
例 |
ユーザープライバシー
プライバシーコンプライアンス
Singularは、ユーザーのプライバシーを保護し、関連規制に準拠するために、エンドユーザーにトラッキングのオプトインまたはオプトアウト機能を提供することを推奨します。
実装オプション
- オプション1:ユーザーがオプトアウトした場合、ゲームイベントデータをSingularに送信しない。
-
オプション2:ゲームイベントデータを送信するが、
data_sharing_optionsパラメータに「Limit Data Sharing(データ共有の制限)」値を指定して、ユーザーの同意の選択肢を含める。
プライバシーフレームワーク:Singularはユーザープライバシーのポストバックで「データ共有の制限」を使用し、規制遵守のために必要なパートナーに情報を渡します。 詳細はユーザープライバシーとデータ共有の制限をご覧ください。
対応プラットフォーム
プラットフォームの定義
プラットフォームはユーザーがゲームをプレイする場所を表し、全てのS2S APIリクエストのpパラメータで渡す必要があります。
サポートされるプラットフォームの値
-
pc- パソコン -
xbox- マイクロソフトXboxゲーム機 -
playstation- ソニー・プレイステーションゲーム機 -
nintendo- 任天堂ゲーム機 -
metaquest- Meta Quest VRヘッドセット
オペレーティングシステムとストア
プラットフォームに加えて、osパラメータでオペレーティングシステム/ゲームシステムを指定し、install_source パラメータで配信ストアを指定します。
|
プラットフォーム ( p) |
オペレーティングシステム/ゲームシステム ( os) |
配信ストア ( install_source) |
|---|---|---|
| pc |
|
|
| xbox |
|
|
| プレイステーション |
|
|
| 任天堂 |
|
|
| メタクエスト |
|
|
カスタム値:オペレーティングシステムおよびストアパラメータにはカスタム値がサポートされていますが、Singularでは一貫性と報告の明瞭性のため、上記の標準値を使用することを推奨しています。
ゲーム識別子
アプリケーション識別子
ゲーム識別子は、ゲームイベントを特定のゲームに関連付けます。i パラメータでリクエストごとに渡される必要があります。
重要な要件:S2S統合で使用されるゲーム識別子は、Singular Web SDKの実装で設定されたプロダクトIDと完全に一致する必要があります。この一致は、Singularがゲームのインストールをウェブキャンペーンのクリックに関連付けるために不可欠です。
識別子の要件
-
フォーマット:どのような値でもサポートされますが、Singularは逆DNS表記(例:
com.singular.game)を推奨します。 - ウェブSDKアライメント:アトリビューションが機能するためには、ランディングページに設定されているWeb SDK Product IDと一致する必要があります。
- クロスプラットフォームの一貫性:サポートされるすべてのプラットフォームで、同じゲームに同じゲーム識別子を使用する必要があります。
設定例:
| 実装 | 構成 |
|---|---|
| ウェブSDK |
|
| S2S API (PC) |
|
| S2S API (Xbox) |
|
| S2S API (PlayStation) |
|
デバイス識別
一意のゲームインストール追跡
インストール/デバイス識別子は、同じゲームのインストールに関する複数のゲームセッションを通してゲームイベントを関連付け、リクエスト毎にsdidパラメータに渡す必要があります。
識別子の仕様
- フォーマット:推奨 UUID バージョン 4 フォーマット
- 生成:生成: 最初のゲーム起動時にゲーム/サーバーによって生成される値 (インストール)
- 永続性:ゲームのインストール期間中持続する必要があります。
- 一意性:各ゲームのインストールには一意の識別子が必要
例: sdid=40009df0-d618-4d81-9da1-cbb3337b8dec
Match ID によるアトリビューション
Match ID は、フィンガープリント ベースのアトリビューションに代わる決定論的なマッチングを提供し、Web SDK からゲームのインストールに一意の識別子を渡すことにより、Web キャンペーンのアトリビューション精度を向上させます。
高度な機能:アトリビューションにMatch IDを使用するには、ウェブとゲームの実装間の調整が必要な高度な機能です。 実装前にSingular Solution Engineerにご相談ください。
Match IDの仕組み
- ウェブSDKがマッチIDを生成:ユーザーがランディングページにアクセスすると、SingularウェブSDKが一意のマッチIDを生成します。
- マッチIDの取得Web SDKのメソッドを使用してランディングページからマッチIDを取得します。
- ゲームに渡す:実装により、ダウンロード/インストールプロセス中にウェブページからゲームにマッチIDを渡す(クエリパラメータ、ディープリンク、クッキーなど
-
初回起動時に報告する:ゲームは
match_idパラメータを介して Singular への最初のセッション通知にマッチ ID を含めます。 - 決定論的マッチ:Singularは正確なアトリビューションマッチングのためにMatch IDを使用します。
Web SDKのマッチIDメソッド
ネイティブ実装
Singular Web SDKは、ランディングページでMatch ID値を取得、設定、クリアするためのネイティブメソッドを提供します。
利用可能なメソッド
| メソッド | 説明 |
|---|---|
getMatchID()
|
Singular Web SDK が現在のウェブセッションに対して生成した一意の Match ID を取得します。 戻り値マッチ ID の値を含む文字列 |
setMatchID(matchId)
|
Singular が生成した値の代わりに、現在のウェブセッションのカスタムマッチ ID を設定します。
パラメータ: |
clearMatchID()
|
|
実装例
ネイティブ Web SDK の実装
Singular Web SDK の初期化後にこれらのメソッドを直接使用して、マッチ ID の値を取得・管理します。
マッチIDの取得
// Get the Singular-generated Match ID
const matchId = window.singularSdk.getMatchID();
console.log('Match ID:', matchId);
// Store Match ID for passing to game
localStorage.setItem('singular_match_id', matchId);
カスタムマッチIDの設定
// Set your own Match ID value
const customMatchId = 'your-custom-match-id-123';
window.singularSdk.setMatchID(customMatchId);
console.log('Custom Match ID set:', customMatchId);
マッチIDのクリア
// Clear custom Match ID and revert to default
window.singularSdk.clearMatchID();
// Get the new default Match ID
const defaultMatchId = window.singularSdk.getMatchID();
console.log('Default Match ID restored:', defaultMatchId);
ダウンロードボタン付きの完全な例
// Initialize Web SDK
const config = new SingularConfig(sdkKey, sdkSecret, productId)
.withInitFinishedCallback(() = {
console.log('Singular SDK initialized');
});
singularSdk.init(config);
// Handle download button click
document.getElementById('download-button').addEventListener('click', function() {
// Get Match ID before redirecting to download
const matchId = window.singularSdk.getMatchID();
// Pass Match ID to download page via query parameter
const downloadUrl = `https://example.com/download?match_id=${matchId}`;
// Redirect to download page
window.location.href = downloadUrl;
});
Googleタグマネージャーの実装
Google Tag ManagerでカスタムHTMLタグを作成し、マッチID機能を管理します。
GTMカスタムHTMLタグ
<script>
// Match ID Management Functions for GTM
// Get Match ID from Singular Web SDK
function getMatchID() {
if (window.singularSdk && window.singularSdk.getMatchID) {
return window.singularSdk.getMatchID();
}
console.warn('Singular SDK not initialized');
return null;
}
// Set custom Match ID
function setMatchID(data) {
if (!data.matchId) {
console.warn('No matchId provided');
return;
}
if (window.singularSdk && window.singularSdk.setMatchID) {
window.singularSdk.setMatchID(data.matchId);
console.log('Match ID set:', data.matchId);
} else {
console.warn('Singular SDK not initialized');
}
}
// Clear Match ID
function clearMatchID() {
if (window.singularSdk && window.singularSdk.clearMatchID) {
window.singularSdk.clearMatchID();
console.log('Match ID cleared');
} else {
console.warn('Singular SDK not initialized');
}
}
// Make functions available globally
window.singularMatchID = {
get: getMatchID,
set: setMatchID,
clear: clearMatchID
};
</script>
GTM関数の使用
// Get Match ID
const matchId = window.singularMatchID.get();
console.log('Match ID:', matchId);
// Set custom Match ID
window.singularMatchID.set({ matchId: 'custom-id-123' });
// Clear Match ID
window.singularMatchID.clear();
GTMトリガーの例
<script>
// Trigger on button click
document.addEventListener('DOMContentLoaded', function() {
const downloadButton = document.getElementById('download-button');
if (downloadButton) {
downloadButton.addEventListener('click', function() {
// Get Match ID via GTM function
const matchId = window.singularMatchID.get();
if (matchId) {
// Push to dataLayer for GTM
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'download_click',
'singular_match_id': matchId
});
// Redirect with Match ID
const downloadUrl = `https://example.com/download?match_id=${matchId}`;
window.location.href = downloadUrl;
}
});
}
});
</script>
マッチIDをゲームに渡す
実装方法
Web SDK から Match ID を取得した後、ランディングページからゲームのインストー ルに値を渡すメカニズムを実装する。
一般的なアプローチ
| 方法 | 実装方法 | 使用例 |
|---|---|---|
| クエリーパラメーター |
クエリーパラメーターとしてダウンロードURLにマッチIDを付加する。
|
ダウンロードページがパラメータを抽出してゲームインストーラに渡すことができる直接ダウンロード |
| クッキーの保存 |
ゲームダウンロードページからアクセス可能なファーストパーティークッキーにマッチIDを保存する。
|
複数ページのフローで、マッチ ID をページ遷移後も保持する必要がある場合。 |
| ローカルストレージ |
ブラウザのローカルストレージにマッチ ID を保存する。
|
ランディングページとダウンロードページがストレージを共有する同一ドメインシナリオ |
| ディープリンク |
ゲームを直接起動するためのカスタムディープリンクスキームに Match ID を埋め込みます。
|
カスタムプロトコルハンドラによる高度な実装 |
| サーバーサイド API |
Match ID をサーバー API に送信し、認証されたリクエストを使用してゲームを取得します。 |
サーバー側での検証とユーザー認証が必要なセキュアな実装。 |
S2S API の実装
マッチIDの報告
ゲームがウェブ実装からマッチIDを取得したら、アトリビューション照合のためにSingularへの最初のセッション通知に含める。
重要なタイミング:アトリビューションが機能するためには、最初のゲームセッション(インストール)通知にマッチIDを含める必要があります。それ以降のセッションで Match ID を送信しても、アトリビューション照合は有効になりません。
Match IDを含むセッションリクエスト:
import requests
def report_first_session_with_match_id(sdk_key, game_id, device_id, platform, match_id):
"""
Report first game session with Match ID for attribution
"""
session_url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'os': 'windows',
'install_source': 'steam',
'ip': get_user_ip(),
'match_id': match_id # Include Match ID for attribution
}
response = requests.get(session_url, params=params)
return response.json()
# Example: First launch with Match ID
report_first_session_with_match_id(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
match_id='abc123def456' # Retrieved from landing page
)
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235" \
--data-urlencode "match_id=abc123def456"
async function reportFirstSessionWithMatchId(config) {
const sessionUrl = 'https://s2s.singular.net/api/v1/launch';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'ip': await getUserIP(),
'match_id': config.matchId // Include Match ID
});
const response = await fetch(`${sessionUrl}?${params.toString()}`);
return await response.json();
}
// Example: First launch with Match ID
reportFirstSessionWithMatchId({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
osVersion: 'windows',
store: 'steam',
matchId: 'abc123def456' # Retrieved from landing page
});
マッチIDのベストプラクティス
実装チェックリスト
完全な実装要件:
- Web SDKの統合:製品IDが一致するランディングページにSingular Web SDKを実装する。
-
マッチIDの取得:SDK初期化後、
getMatchID()を使用して値を取得する。 - 値の送信:ウェブからゲームにマッチIDを渡すセキュアなメカニズムを実装する。
- ゲームの保存:初回起動/セッション報告までゲーム内にマッチIDを保存
-
最初のセッションのみ:
match_idパラメータを最初のセッション通知にのみ含める。 - 値の検証:ウェブ実装とゲーム実装の間でマッチIDの値が一致することを検証する。
- テスト:ランディングページのクリックからゲームのインストールおよびアトリビューションまでの完全なフローをテストする。
アトリビューション方法の詳細およびトラブルシューティングについては、PC およびコンソール ゲームのアトリビューション FAQ を参照してください。
ゲームセッションのトラッキング
ゲームセッションをSingularに報告することは、PCおよびコンソールの統合で必須であり、インストールアトリビューション、リエンゲージメントトラッキング、およびユーザー維持分析を可能にします。
セッション通知エンドポイント
実装要件
ゲームが起動するたびにセッション通知エンドポイントを呼び出し、ゲームセッションをSingularに通知します。
APIリファレンス:エンドポイントの完全な仕様については、セッション通知エンドポイントのドキュメントを参照してください。
セッション処理
アトリビューションワークフロー
セッション通知により、Singularはセッションコンテキストに基づいて複数のアトリビューションと分析機能を実行できます。
処理ロジック
- 最初のセッション(インストール):ユニークインストール後の最初のゲームセッションの場合、Singularは新規インストールを認識し、インストールアトリビューション処理をトリガーします。
- リエンゲージメントセッション:セッションがリエンゲージメント(近日公開)に該当する場合、Singularはリエンゲージメントアトリビューションプロセスをトリガーします(リエンゲージメントに関するFAQをご覧ください)。
- 通常セッション:そうでない場合は、ユーザーアクティビティとリテンショントラッキングのためにゲームセッションとしてマークされます。
実装のベストプラクティス
非同期データ収集
ゲームセッションを報告するためにデータを収集する場合、セッション通知を送信する前に、非同期関数が戻り、さまざまな機能を処理するのを待ちます。
重要なタイミングの考慮事項
- マッチIDの帰属:Match IDを使用して属性照合を改善する場合、最初のゲームセッションを報告するのは、Match IDが利用可能になる可能性が出てからにする。
- ユーザーの同意:ゲームがSingularのマーケティングおよび分析へのオプトインを提供する場合、ゲームセッションを報告する前に同意が収集されるまで待つ。
- デバイス識別子:最初のセッションを通知する前にSDIDが生成され、保存されていることを確認する。
セッションリクエストの例
サンプル実装
import requests
def report_game_session(sdk_key, game_id, device_id, platform, os_version, store):
"""
Report game session to Singular
"""
session_url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'os': os_version,
'install_source': store,
'ip': get_user_ip()
}
try:
response = requests.get(session_url, params=params, timeout=10)
if response.status_code == 200:
data = response.json()
if data.get('status') == 'ok':
print("Session reported successfully")
return True
else:
print(f"Session error: {data.get('reason')}")
return False
else:
print(f"HTTP error: {response.status_code}")
return False
except Exception as e:
print(f"Exception reporting session: {e}")
return False
# Example usage
report_game_session(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
os_version='windows',
store='steam'
)
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235"
async function reportGameSession(config) {
const sessionUrl = 'https://s2s.singular.net/api/v1/launch';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'ip': await getUserIP()
});
try {
const response = await fetch(`${sessionUrl}?${params.toString()}`);
const data = await response.json();
if (data.status === 'ok') {
console.log('Session reported successfully');
return true;
} else {
console.error('Session error:', data.reason);
return false;
}
} catch (error) {
console.error('Exception reporting session:', error);
return false;
}
}
// Example usage
reportGameSession({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
osVersion: 'windows',
store: 'steam'
});
ゲーム内イベントのトラッキング
ゲーム内イベントとユーザーインタラクションを追跡して、マーケティングキャンペーンのパフォーマンスを分析し、ユーザーファネルを最適化し、プレーヤージャーニー全体のエンゲージメントを測定します。
イベント計画
イベント定義
S2S統合を実施する前に、キャンペーン分析とユーザー行動測定のために、貴社が追跡したいイベントを定義します。
イベント計画ガイド:ゲーム内イベントの定義
イベント通知エンドポイント
イベント報告
ゲーム内でイベントが発生した際にイベント通知エンドポイントを呼び出し、アトリビューション分析やキャンペーン最適化のためにSingularに通知します。
APIリファレンス:エンドポイントの完全な仕様については、イベント通知エンドポイントのドキュメントを参照してください。
API コールに含まれるイベント名によって、Singular のレポート、エクスポート、ポストバックでイベントがどのように識別されるかが決まります。
イベント名のベストプラクティス
標準イベント
パートナーとの統合やアナリティクスの互換性を合理化するために、標準的なイベントと属性の命名規則を使用することをお勧めします。
実装ガイドライン
- 標準イベント自動的なパートナーマッピングと統合の合理化のために、Singularの標準イベント命名規則を使用してください。
- 英語:サードパーティのパートナーやアナリティクスソリューションとの互換性を保つため、カスタムイベント名と属性は英語で入力してください。
- 文字数制限:イベント名は32 ASCII文字(UTF-8変換の場合は32バイト)に制限されます。
- 属性の制限:イベント属性と値は500 ASCII文字まで
収益イベントのトラッキング
収益測定
レポート、ログエクスポート、ポストバックで利用可能なデータにより、キャンペーンパフォーマンスとROIを分析するためにゲーム内購入からの収益をトラッキングします。
収益イベントの実装:収益イベントを指定するには、収益パラメータを追加してイベント通知エンドポイントを使用します。
必要な収益パラメータ
-
is_revenue_event=true- イベントを収益イベントとしてマーク(イベント名が__iap__または金額が0より大きい場合はオプション -
amt=1.99- 収益金額 -
cur=USD- ISO 4217 通貨コード
イベント・リクエストの例
サンプル実装
標準イベント
import requests
def report_game_event(sdk_key, game_id, device_id, platform, event_name, event_attributes=None):
"""
Report in-game event to Singular
"""
event_url = "https://s2s.singular.net/api/v1/evt"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'n': event_name,
'ip': get_user_ip()
}
if event_attributes:
import json
params['e'] = json.dumps(event_attributes)
response = requests.get(event_url, params=params)
return response.json()
# Example: Level complete event
report_game_event(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
event_name='sng_level_achieved',
event_attributes={
'level': '5',
'score': '1250'
}
)
収益イベント
def report_revenue_event(sdk_key, game_id, device_id, platform, amount, currency):
"""
Report revenue event to Singular
"""
event_url = "https://s2s.singular.net/api/v1/evt"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': amount,
'cur': currency,
'ip': get_user_ip()
}
response = requests.get(event_url, params=params)
return response.json()
# Example: $9.99 purchase
report_revenue_event(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
amount=9.99,
currency='USD'
)
標準イベント
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "n=sng_level_achieved" \
--data-urlencode 'e={"level":"5","score":"1250"}' \
--data-urlencode "ip=172.58.29.235"
収益イベント
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "n=__iap__" \
--data-urlencode "is_revenue_event=true" \
--data-urlencode "amt=9.99" \
--data-urlencode "cur=USD" \
--data-urlencode "ip=172.58.29.235"
標準イベント
async function reportGameEvent(config) {
const eventUrl = 'https://s2s.singular.net/api/v1/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'n': config.eventName,
'ip': await getUserIP()
});
if (config.attributes) {
params.append('e', JSON.stringify(config.attributes));
}
const response = await fetch(`${eventUrl}?${params.toString()}`);
return await response.json();
}
// Example: Level complete
reportGameEvent({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
eventName: 'sng_level_achieved',
attributes: {
level: '5',
score: '1250'
}
});
収益イベント
async function reportRevenueEvent(config) {
const eventUrl = 'https://s2s.singular.net/api/v1/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': config.amount,
'cur': config.currency,
'ip': await getUserIP()
});
const response = await fetch(`${eventUrl}?${params.toString()}`);
return await response.json();
}
// Example: $9.99 purchase
reportRevenueEvent({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
amount: 9.99,
currency: 'USD'
});
次のステップ
追加リソースとサポートでPCとコンソールのS2S統合を完成させましょう。
追加リソース
資料とサポート
- ウェブSDK:ウェブSDKの概要と入門
- APIリファレンス:PC & Console S2Sエンドポイントリファレンス
- アトリビューションガイド:PCとコンソールゲームのアトリビューションFAQ
- イベント計画:ゲーム内イベントの定義
- 標準イベント:標準イベントリファレンス
- 応答コード:S2S応答コードとエラー処理
サポートチャンネル
ヘルプ
Singularチームへの導入支援やテクニカルサポートはこちらまでお問い合わせください。
- ソリューションエンジニア高度な機能や統合計画については、Singularソリューションエンジニアにご相談ください。
- カスタマーサクセスマネージャー:企業向け機能の有効化とアカウント設定についてはCSMにご相談ください。
- サポートチーム技術的な問題やトラブルシューティングのサポートチケットの提出