SESSION エンドポイント API リファレンス
Singular の REST API を使用し、SDK 実装の代替となる server-to-server インテグレーションによって、ユーザーセッションを追跡し、アプリインストール、リエンゲージメント、リテンション指標のアトリビューションを可能にします。
概要
Server-to-Server のユースケース
SESSION エンドポイントは、ユーザーがアプリを開いたときに Singular に通知し、インストールおよびリエンゲージメントのアトリビューションとリテンション指標を支えます。Server-to-Server が初めての場合は、コアとなる概念と共通のセットアップについては、 S2S 基礎ガイド を参照してください。
サポートされる機能:
- インストールアトリビューション: マーケティングキャンペーンへのファーストタッチアトリビューション
- リエンゲージメントアトリビューション: 復帰ユーザーに対するマルチタッチアトリビューション
- リテンション指標: セッションベースのエンゲージメント追跡
セッション管理
SESSION エンドポイントは、アトリビューションと追跡のためにユーザーセッションを初期化するアプリのオープンイベントを Singular に通知します。
セッションを送信するタイミング
セッションのトリガー
以下のアプリライフサイクルイベントで SESSION リクエストを送信します:
- 新規インストール: インストール後の初回アプリ起動
- 終了状態からの起動: 完全に閉じた状態からアプリを開く
- バックグラウンドからフォアグラウンドへ: タイムアウト期間(推奨: 60 秒)経過後にアプリがフォアグラウンドに復帰する
セッションタイムアウトのロジック
アプリの短時間のバックグラウンド化中に過剰な SESSION リクエストが発生しないよう、セッションタイムアウトを実装します。
推奨される実装:
- タイムアウト時間: 60 秒(1 分)
- フォアグラウンド復帰 < タイムアウト: タイムアウト期間内にアプリがフォアグラウンドに復帰した場合は SESSION を送信しない
- フォアグラウンド復帰 > タイムアウト: タイムアウト期間を超えてアプリがバックグラウンドのままだった場合は SESSION を送信する
- アプリライフサイクルの追跡: アプリのライフサイクルイベントとタイマーを使用してセッション状態を管理する
ディープリンクのサポート:
ディープリンク、Universal Links、または App Links 経由でアプリが開かれた場合は、タイムアウトの状態にかかわらず、
openuri
パラメータを設定して必ず SESSION を送信してください。
アトリビューション処理
セッションベースのアトリビューション
Singular は SESSION リクエストを処理してアトリビューションの種類を判定し、適切なワークフローをトリガーします。
| セッションの種類 | Singular の処理 | アトリビューション結果 |
|---|---|---|
| 初回セッション(新規インストール) | インストールアトリビューション処理がトリガーされる | インストールをマーケティングキャンペーンにアトリビュートする |
| リエンゲージメントの条件を満たす | リエンゲージメントアトリビューション処理がトリガーされる | ユーザーの復帰をキャンペーンまたはディープリンクにアトリビュートする |
| 標準セッション | リテンション追跡のためにセッションが記録される | ユーザーアクティビティとエンゲージメント指標に計上される |
イベント順序の要件
セッションとイベントのタイミングは、アトリビューションの精度とデータ品質に直接影響します。
重要な順序ルール:
- イベントの前にセッション: そのセッションのイベントよりも前に、単一の SESSION を受信する必要があります
- イベントのリアルタイム送信: アプリ内イベントは、それぞれのセッションの後にリアルタイムで送信する必要があります
- 順次処理: セッションの順序が不正な場合、データの不整合とアトリビューションエラーが発生します
API エンドポイント仕様
SESSION エンドポイントは、パラメータを
application/x-www-form-urlencoded
として送信する POST リクエストを受け付けます。
エンドポイント
ベース URL とメソッド
POST https://s2s.singular.net/api/v1/launch
必須ヘッダー:
Content-Type: application/x-www-form-urlencoded
リクエスト形式:
POST /api/v1/launch HTTP/1.1
Host: s2s.singular.net
Content-Type: application/x-www-form-urlencoded
param1=value1¶m2=value2
必須パラメータ
すべての SESSION リクエストには、これらの必須パラメータを適切な値と形式で含める必要があります。
API 認証
SDK キー
| パラメータ | 詳細 |
|---|---|
a
|
型:
String
重要: Reporting API キーは使用しないでください。リクエストが拒否されます。
例:
|
デバイス識別子
プラットフォーム固有の識別子
| パラメータ | 詳細 |
|---|---|
idfa
|
プラットフォーム:
iOS
|
idfv
|
プラットフォーム:
iOS
|
aifa
|
プラットフォーム:
Android
|
asid
|
プラットフォーム:
Android
|
amid
|
プラットフォーム:
Android
|
oaid
|
プラットフォーム:
Android
|
andi
|
プラットフォーム:
Android
制限付きの使用: Google Play デバイスでは禁止されています。代わりに AIFA と ASID を使用してください。他に利用できる識別子がなく、かつアプリが Google Play 経由で配信されていない場合にのみ送信してください。
例:
|
sdid
|
プラットフォーム:
iOS, Android, PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV
|
デバイスパラメータ
デバイス情報
| パラメータ | 詳細 |
|---|---|
p
|
型:
String
|
ip
|
型:
String
|
ve
|
型:
String
|
ma
|
プラットフォーム:
iOS, Android
|
mo
|
プラットフォーム:
iOS, Android
|
lc
|
プラットフォーム:
iOS, Android
|
bd
|
プラットフォーム:
iOS, Android
|
アプリケーションパラメータ
アプリ情報
| パラメータ | 詳細 |
|---|---|
i
|
型:
String
|
app_v
|
型:
String
|
att_authorization_status
|
プラットフォーム:
iOS
常に必須:
ATT を実装していない場合でも、
例:
|
| パラメータ | 詳細 |
|---|---|
install
|
型:
Boolean
|
install_time
|
プラットフォーム:
iOS, Android
これはデバイスのインストール時刻であり、Singular のアトリビューションインストール時刻ではありません。アトリビューションでは、セッションタイムスタンプ(
詳しくは デバイスデータ取得ガイド を参照して、iOS と Android でこの値を取得する方法をご確認ください。 |
update_time
|
プラットフォーム:
iOS, Android
詳しくは デバイスデータ取得ガイド を参照して、iOS と Android でこの値を取得する方法をご確認ください。 |
不正防止パラメータ
インストールソースの検証
| パラメータ | 詳細 |
|---|---|
install_source
|
プラットフォーム:
Android, PC
|
install_receipt
|
プラットフォーム:
iOS
|
ディープリンクパラメータ
ディープリンクのサポート
| パラメータ | 詳細 |
|---|---|
openuri
|
プラットフォーム:
iOS, Android
|
ddl_enabled
|
プラットフォーム:
iOS, Android
|
singular_link_resolve_required
|
プラットフォーム:
iOS, Android
|
高度なアトリビューションパラメータ
プラットフォームアトリビューションの強化
| パラメータ | 詳細 |
|---|---|
install_ref
ネイティブ PC(Google Play Games)
|
プラットフォーム:
Android (Google Play)
|
meta_ref
|
プラットフォーム:
Android (Google Play)
2025 年 6 月 18 日時点: Meta Advanced Mobile Measurement (AMM) により、Meta Install Referrer の実装が不要になります。AMM が有効な場合は推奨されません。
詳細なユーザーレベルのアトリビューションデータのための、JSON を URL エンコードした Meta Install Referrer。
|
attribution_token
|
プラットフォーム:
iOS
|
オプションパラメータ
オプションパラメータは、追跡機能を強化し、高度な機能をサポートします。
タイムスタンプパラメータ
| パラメータ | 詳細 |
|---|---|
utime
|
型:
Integer
|
umilisec
|
型:
Integer
|
ネットワークおよび位置情報パラメータ
| パラメータ | 詳細 |
|---|---|
use_ip
|
型:
Boolean
制限事項:
例:
|
country
|
型:
String
|
ua
|
型:
String
|
c
|
プラットフォーム:
iOS, Android
|
cn
|
プラットフォーム:
iOS, Android
|
カスタムプロパティ
| パラメータ | 詳細 |
|---|---|
global_properties
|
型:
JSON
|
アンインストール追跡のサポート
| パラメータ | 詳細 |
|---|---|
apns_token
|
プラットフォーム:
iOS
|
fcm
|
プラットフォーム:
Android
|
データプライバシーパラメータ
| パラメータ | 詳細 |
|---|---|
data_sharing_options
|
型:
JSON
|
dnt
|
プラットフォーム:
iOS, Android
|
dntoff
|
プラットフォーム:
iOS, Android
|
クロスデバイスのサポート
| パラメータ | 詳細 |
|---|---|
custom_user_id
|
型:
String
PII 禁止: 個人を特定できる情報を渡さないでください。生のメールアドレス、電話番号、氏名ではなく、ハッシュ化またはその他の方法で匿名化した内部識別子を使用してください。
例:
|
SKAdNetwork のサポート
| パラメータ | 詳細 |
|---|---|
skan_conversion_value
|
プラットフォーム:
iOS
|
skan_first_call_timestamp
|
プラットフォーム:
iOS
|
skan_last_call_timestamp
|
プラットフォーム:
iOS
|
Google Ads ICM のサポート(ベータ版)
| パラメータ | 詳細 |
|---|---|
odm_info
|
プラットフォーム:
iOS
|
odm_error
|
プラットフォーム:
iOS
|
リクエスト例
サンプルコードは、複数のプログラミング言語にわたる SESSION エンドポイントのインテグレーションを示します。
例に関する免責事項:
コードサンプルには、すべての必須パラメータが含まれていない場合があります。本番実装の前に、完全なパラメータリストを検証してください。開発/テストには一意の
i
(アプリ識別子)を使用してください。
Python の例
import requests
url = 'https://s2s.singular.net/api/v1/launch'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
'a': 'sdk_key_here',
'p': 'Android',
'i': 'com.singular.app',
'ip': '10.1.2.3',
've': '9.2',
'ma': 'samsung',
'mo': 'SM-G935F',
'lc': 'en_US',
'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
'install': 'true',
'n': 'MyCoolAppName',
'bd': 'Build/13D15',
'app_v': '1.2.3',
'openuri': 'myapp://home/page?queryparam1=value1',
'ddl_enabled': 'true',
'install_source': 'com.android.vending',
'install_time': 1510040127,
'update_time': 1510090877
}
response = requests.post(url, data=data, headers=headers)
print(response.json())
cURL の例
curl -X POST "https://s2s.singular.net/api/v1/launch" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "a=sdk_key_here" \
--data-urlencode "p=Android" \
--data-urlencode "i=com.singular.app" \
--data-urlencode "ip=10.1.2.3" \
--data-urlencode "ve=9.2" \
--data-urlencode "ma=samsung" \
--data-urlencode "mo=SM-G935F" \
--data-urlencode "lc=en_US" \
--data-urlencode "aifa=8ecd7512-2864-440c-93f3-a3cabe62525b" \
--data-urlencode "asid=edee92a2-7b2f-45f4-a509-840f170fc6d9" \
--data-urlencode "install=true" \
--data-urlencode "n=MyCoolAppName" \
--data-urlencode "bd=Build/13D15" \
--data-urlencode "app_v=1.2.3" \
--data-urlencode "openuri=myapp://home/page?queryparam1=value1" \
--data-urlencode "ddl_enabled=true" \
--data-urlencode "install_source=com.android.vending" \
--data-urlencode "install_time=1510040127" \
--data-urlencode "update_time=1510090877"
HTTP の例
POST /api/v1/launch HTTP/1.1
Host: s2s.singular.net
Content-Type: application/x-www-form-urlencoded
Accept: application/json
a=sdk_key_here&p=Android&i=com.singular.app&ip=10.1.2.3&ve=9.2&ma=samsung&mo=SM-G935F&lc=en_US&aifa=8ecd7512-2864-440c-93f3-a3cabe62525b&asid=edee92a2-7b2f-45f4-a509-840f170fc6d9&install=true&n=MyCoolAppName&bd=Build%2F13D15&app_v=1.2.3&openuri=myapp%3A%2F%2Fhome%2Fpage%3Fqueryparam1%3Dvalue1&ddl_enabled=true&install_source=com.android.vending&install_time=1510040127&update_time=1510090877
Java の例
// Endpoint
String endpoint = "https://s2s.singular.net/api/v1/launch";
// Parameters
Map<String, String> params = new HashMap<>();
params.put("a", "sdk_key_here");
params.put("p", "Android");
params.put("i", "com.singular.app");
params.put("ip", "10.1.2.3");
params.put("ve", "9.2");
params.put("ma", "samsung");
params.put("mo", "SM-G935F");
params.put("lc", "en_US");
params.put("aifa", "8ecd7512-2864-440c-93f3-a3cabe62525b");
params.put("asid", "edee92a2-7b2f-45f4-a509-840f170fc6d9");
params.put("install", "true");
params.put("n", "MyCoolAppName");
params.put("bd", "Build/13D15");
params.put("app_v", "1.2.3");
params.put("openuri", "myapp://home/page?queryparam1=value1");
params.put("ddl_enabled", "true");
params.put("install_source", "com.android.vending");
params.put("install_time", "1510040127");
params.put("update_time", "1510090877");
// Build form-urlencoded body
StringBuilder form = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if (form.length() > 0) form.append('&');
form.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append('=')
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
}
byte[] body = form.toString().getBytes(StandardCharsets.UTF_8);
// Create connection
URL url = new URL(endpoint);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Accept", "application/json");
// Write body
try (OutputStream os = conn.getOutputStream()) {
os.write(body);
}
// Get response
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("HTTP Status Code: " + responseCode);
System.out.println("Response: " + response.toString());
conn.disconnect();
レスポンスコードとエラー
SESSION エンドポイントは、リクエストの成功または失敗を示す HTTP ステータスコードと JSON レスポンスを返します。
エラーに関する完全なドキュメント: S2S レスポンスコードとエラー処理
テストと検証
本番デプロイの前に、リアルタイムのデータ検証のために Singular SDK Console を使用して S2S インテグレーションを確認します。
テスト手順
エンドツーエンドの検証
- テストデバイスの登録: デバイスの広告 ID を取得し、次の場所に追加します: Singular SDK Console
- コンソールロギングの有効化: SDK Console にデバイス識別子を追加してテストデータをキャプチャします
-
開発用アプリ ID の使用:
アプリ識別子を開発版(例:
com.singular.app.dev)で上書きし、テストデータを本番データと分離します - アプリの起動: 終了状態からアプリを開いてセッションをトリガーします
- クライアントデータの検証: アプリが必要なすべての Singular データポイントをサーバーに送信していることを確認します
-
サーバーリクエストの確認:
サーバーが SESSION リクエストを
https://s2s.singular.net/api/v1/launchに、必要なすべてのパラメータを含めて送信していることを確認します - SDK Console の確認: 数秒以内に、SDK Console に SESSION イベントが表示されるはずです
- テストの繰り返し: アプリへの入場やフォアグラウンド操作のたびに SESSION がトリガーされることを検証します
重要な確認事項: EVENT リクエストの前に、アプリのオープン/フォアグラウンド時に SESSION イベントが発生することを確認してください。順序が不正な場合、アトリビューションエラーが発生します。
成功の指標: SDK Console に SESSION が表示されれば、エンドツーエンドのインテグレーションテストは成功です。
その他のリソース
テストドキュメント
包括的なテストガイド: S2S インテグレーションテストガイド