開発
開発
プラットフォームを選択

サブスクリプション用のサーバーAPI

更新日時: 2024/08/22
This is a Platform SDK feature requiring Data Use Checkup
この機能や他のPlatform SDK機能を利用するには、データの使用状況の確認(DUC)を実施する必要があります。DUCは、開発者ポリシーを遵守していることを確認するためのものです。チームの管理者が、ユーザーデータの利用がプラットフォームガイドラインに沿っていることを証明する必要があります。アプリレビューチームがDUCを審査して承認するまで、プラットフォームの機能はテストユーザーのみが利用可能です。
Apps for children can't use Platform SDK features
13歳未満の子どもを主なユーザーとして自己認証する場合は、Platform SDK機能の使用を避ける必要があります。この制限は、年齢別ガイドラインを遵守するためのものです。確実な順守のため、アプリのデータ使用状況の確認は無効になっています。
このトピックでは、アプリにサブスクリプション関連のフローを実装する方法について解説します。サブスクリプションオプションの概要については、サブスクリプションをご覧ください。
サブスクリプションには、データの使用状況の確認の機能として、ユーザーIDアプリ内購入サブスクリプションが必要です。

サブスクリプションの販売

サブスクリプションはアプリ内購入で販売することも、Meta Horizonストアで購入可能なスタンドアローン商品として販売することもできます。サブスクリプションをストアでスタンドアローン商品として販売する方法について詳しくは、ストアで販売するをご覧ください。アプリ内でサブスクリプションを販売するには、アプリ内購入の提供と同じ方法を使って、サブスクリプションオファーのSKUを参照します。開発者センターにおけるサブスクリプションオファーの定義について詳しくは、サブスクリプションプランを作成するをご覧ください。
アプリ内購入をアプリに実装する方法については、アプリ内購入の統合を参照してください。

サブスクリプションの管理

このトピックでは、Meta Horizonプラットフォームで利用可能なサーバー間(S2S) REST APIを使ってサブスクリプションを管理する方法について解説します。使用可能な機能は次のとおりです。
この機能はユーザーデータにアクセスするので、Questストアにアプリを提出して審査を受ける前に、データの使用状況の確認フォームに記入する必要があります。詳しくは、データの使用状況の確認の実施をご覧ください。

サーバー間APIの要件

これらのAPIを呼び出すには、以下の要件を満たす必要があります。

エンドポイント

すべてのサーバー間リクエストを、以下のエンドポイントに対して行います。
https://graph.oculus.com

アクセストークン

有効なサーバーリクエストとして、または特定のユーザーに代わって認証するすべてのリクエストにアクセストークンを含めてください。アクセストークンは以下のいずれかです。

アプリ認証情報

アプリ認証情報は、サーバーのバックエンドを信頼できるリソースとして認証します。この認証情報は、クライアント側のどのアプリとも共有しないでください。
アプリ認証情報が含まれるアクセストークンには、Meta Horizon開発者ダッシュボードのAPIのページにあるアプリIDapp secretが、OC|$APPID|$APPSECRETの形式で表されています。
認証情報が不正にアクセスされた場合、または新しいAPI認証情報が必要な場合は、新たにapp secretを生成してください。app secretを変更すると、以前のアクセス許可が取り消されます。app secretにアクセスするには、管理者アカウントが必要です。

ユーザーアクセストークン

ユーザーアクセストークンは、ユーザーに代わって行われるリクエストが有効かどうかを認証します。このトークンタイプは、アクションが特定のユーザーに関連する場合に使います。例えば、サーバーでホストされたマルチプレイヤーマッチの結果を、クライアントが権限を持つリーダーボードに反映させる場合などです。ユーザーごとに、ユーザーアクセストークンを使ってサーバーを認証し、リーダーボードを更新するリクエストを行います。
ovr_User_GetAccessToken()メソッドでユーザートークンを取得します。
トークンは応答として返され、クライアントからサーバーに渡すことができます。ユーザーアクセストークンには、FRLまたはOCと、FRL12342GhFccWvUBxPMR4KXzM5s2ZCMp0mlWGq0ZBrOMXyjh4EmuAPvaXiMCAMV9okNm9DXdUA2EWNplrQのような長い英数字文字列が含まれます。
さらに、Meta Horizon開発者ダッシュボードのAPIのページの[User Token (ユーザートークン)]セクション(左のナビゲーションバーにある)で、テスト目的のユーザートークンを取得することができます。

アプリID

一部のサーバー呼び出しにはアプリIDが必要です。これは、Meta Horizon開発者ダッシュボードのAPIのページで確認できます。

サブスクリプションステータスのクエリ(GET)

サブスクリプションステータスを取得します。詳細なサブスクリプションステータスは、複数の応答フィールドに含まれます。特定の応答フィールドが指定されていない場合、クエリは、skuowner{id}is_activeのみを返します。

リクエストメソッド/URI:

GET https://graph.oculus.com/application/subscriptions

パラメーター

app-secretアクセストークンを使用すると、すべてのユーザーのサブスクリプションデータが返されますが、かなりの量のデータになる可能性があります。ユーザーアクセストークンを使用すると、そのユーザーだけのサブスクリプションデータが返されます。
app-secretアクセストークンを使用した場合は、ページ分割された大量のデータセットが予想されます。このデータセットにはpaging.nextフィールドが含まれ、そこにあるURLを使って次のページのデータを要求できます。paging.nextのリンクが表示されなくなったら、ページ送りを停止します。ページ分割された結果を処理する方法について詳しくは、グラフAPIの使用をご覧ください。
パラメーター必須/任意説明
access_token
必須
OC|$APP_ID|$APP_SECRETを含むベアラートークンまたはユーザーアクセストークン
文字列
“OC|1234|456789”
fields
任意
フィールド名のコンマ区切りリスト。owner、sku、period_start_time、period_end_time、cancellation_time、next_renewal_time、is_trial、trial_type、is_active、current_price_term、next_price_termなどを指定できます。詳しくは、応答フィールドをご覧ください。
コンマ区切り文字列
“sku, is_trial, is_active, period_end_time, next_renewal_time, trial_type”
owner_id
任意
結果を1つのオーナーIDに限定します。app-secretアクセストークンでのみ使用できます。ユーザーアクセストークンで使用するとエラーになります。
文字列
 
is_active
任意
サブスクリプションがアクティブな場合、trueに設定します。
ブール
true
is_trial
任意
最新のサブスクリプション期間が無料トライアル(7d、14d、30d)の場合、trueに設定されます。サブスクリプション自体がアクティブであることを示すものではありません。
ブール
true
skus
任意
サブスクリプションのSKU
コンマ区切り文字列
“SKU1,SKU2”

応答フィールド

応答フィールドには、fieldsパラメーターでリクエストできる追加のサブスクリプションデータが含まれます。特定の応答フィールドが指定されていない場合、クエリは、skuowner{id}is_activeのみを返します。

フィールド定義
id
一意のサブスクリプション識別子
文字列
owner{id}
一意のユーザー識別子
文字列
sku
サブスクリプションのSKU
文字列
period_start_time
最新のサブスクリプション期間が開始された日付
タイムスタンプ
period_end_time
最新のサブスクリプション期間が終了する日付
タイムスタンプ
cancellation_time
ユーザーが最後にサブスクリプションをキャンセルした日付。period_end_timeには影響しません。
タイムスタンプ
is_trial
最新のサブスクリプション期間が無料トライアル(7d、14d、30d)の場合、trueに設定されます。サブスクリプション自体がアクティブであることを示すものではありません。
ブール
trial_type
現在のサブスクリプション期間に関連付けられているトライアルの種類を示すには、FREE_TRIALまたはINTRO_OFFERに設定します。このフィールドは、is_trialtrueに設定されている場合にのみ入力されます。
文字列
is_active
サブスクリプションがアクティブな場合、trueに設定します。
ブール
next_renewal_time
次回のサブスクリプション請求日。この日付には、サブスクリプションに与えられたすべての延長時間が含まれます。
タイムスタンプ
current_price_term
現在のサブスクリプションの価格と期間
価格と期間
next_price_term
次回更新される予定のサブスクリプションの価格と期間
価格と期間

価格と期間

フィールド定義
term
サブスクリプションの期間(例: MONTHLY、ANNUAL、WEEKLY)。トライアルサブスクリプションの場合は空にすることができます。
string?
currency
一意のユーザー識別子
価格の通貨。例: USD、EUR
price
サブスクリプションの価格(通貨記号なし)。
文字列

ページ分割された結果の処理

ページ分割された結果を処理する方法について詳しくは、グラフAPIのページ分割された結果の処理をご覧ください。

リクエストの例

curl -d "access_token=OC|$APP_ID|$APP_SECRET" -d "fields=id,sku,owner{id},is_active,is_trial,trial_type,cancellation_time,period_start_time,period_end_time,next_renewal_time,current_price_term{term,currency,price},next_price_term{term,currency,price}" -G https://graph.oculus.com/application/subscriptions

結果の例

{
  "data": [
    {
      "id": "1231b2c3d4e5f6g7h8i9j0",
      "sku": "OPTIONAL_SUBSCRIPTION",
      "owner": {
        "id": "3559884437424131"
      },
      "current_price_term": {
        "price": "1.99",
        "term": "MONTHLY",
        "currency": "USD"
      },
      "next_price_term": {
        "price": "1.99",
        "term": "MONTHLY",
        "currency": "USD"
      },
      "is_active": false,
      "is_trial": false,
      "period_start_time": "2021-03-09T13:04:20+0000",
      "period_end_time": "2021-03-09T13:04:20+0000",
      "next_renewal_time": "2021-03-09T13:04:20+0000"
    },
  ],
  "paging": {
    "cursors": {
      "before": "QVFIUlliZAnlkTEVnUkFkVTBJZAW9lMWprR0dkaGtuQjhTT0lTdzRiTEo1dkstSXoybDVRWEFFUzA0RURfQjVMMUxXZAzJ4VENTV1RadU9uejFaUmlIUlo4cUlR",
      "after": "QVFIUlZAGTmllREUwcWdJRkhGcUtBWXZA2WWFvSkJHMlJ1dnpfVVRLU2ZAPNHc1MjVCbXc0d3YyWi1meU1DNjhQWTBJaldrcDIxVkpxNWZAMSmNfa2lOcldVTUhB"
    }
  }
}
注: このAPIはトラブルシューティングのためのもので、顧客を分析するためのものではありません。このAPIのデータは、実際のAnalyticsダッシュボードのデータと異なる場合があります。

サブスクリプションをキャンセルする(POST)

サブスクリプション登録者に代わってアクティブなサブスクリプションをキャンセルします。このPOSTリクエストが成功すると、開発者に代わって、サブスクリプションの所有者にサブスクリプションがキャンセルされたことが電子メールで通知されます。
サブスクリプションは期間終了まで有効のままになりますが、APIを使ってキャンセルを取り消すことはできません。

リクエストメソッド/URI:

POST https://graph.oculus.com/application/cancel_subscription

リクエスト本文

パラメーター必須/任意説明
owner_alias
任意
サブスクリプション登録者のユーザーネーム
文字列
abc
owner_id
任意
キャンセルをリクエストしているサブスクリプション所有者のID。
文字列
 
sku
必須
ユーザーが所有するサブスクリプションに関連付けられたSKU。このskuは、現在アクティブなサブスクリプションのSKUと一致していなければなりません。
文字列
“bronze_tier”
cancel_reason
必須
サブスクリプションをキャンセルする理由。
整数
0
  • リクエストするにはowner_idまたはowner_aliasのいずれかが必要です。
  • owner_aliasを使用するには、その前にユーザープロフィールのデータの使用状況の確認フォームに記入する必要があります。詳しくは、データの使用状況の確認の実施をご覧ください。
  • テストの際には、cancel_reason引数として0を使ってください。

キャンセルの理由コード

リクエストを送信する際の必須パラメーターの1つがcancel_reasonです。この引数は整数であり、以下のキャンセル理由コードがサポートされています。
コード説明
0
その他/テスト
1
アプリの価格
2
アプリのコンテンツ
3
アプリの使用状況
4
間違って購入した
5
技術的な問題

応答フィールド

サブスクリプションのキャンセルのPOST応答フィールドは、リクエストが成功したかどうかを示します。
フィールド定義
success
サブスクリプションが正常にキャンセルされた場合にtrueに設定されます。
ブーリアン

例1 - 所有者の別名を使用する

URL: https://graph.oculus.com/application/cancel_subscription
メソッド: POST
リクエスト本文
{
"owner_alias": <owner_alias>,
"sku": test_sku,
"cancel_reason": 0
}

cURLリクエストの例

$ curl -X POST https://graph.oculus.com/application/cancel_subscription -d "access_token=<ACCESS_TOKEN>" -d “owner_alias=<OWNER_ALIAS>” -d “sku=test_sku” -d “cancel_reason=0”

結果の例

{
"success": true
}

リクエストの例 - ownerIDを使用する

URL: https://graph.oculus.com/application/cancel_subscription
メソッド: POST
リクエスト本文
{
"'owner_id'": <owner_id>,
"sku": test_sku,
"cancel_reason": 0
}

cURLリクエストの例

$ curl -X POST https://graph.oculus.com/application/cancel_subscription -d "access_token=<ACCESS_TOKEN>" -d “owner_id=<OWNER_ID>” -d “sku=test_sku” -d “cancel_reason=0”

結果の例

{
"success": true
}

サブスクリプション更新日を延長する(POST)

アクティブなサブスクリプションの更新日が近づいた場合に、指定した日数だけ更新日を延長できます。サブスクリプションの延長日数は、最低1日から最大365日までです。サブスクリプションの延長時間の累積が10年を超えるような延長はできません。サブスクリプションが延長されたことと、次の請求日の詳細が、サブスクリプションの所有者にメールで通知されます。
サブスクリプションの更新日が延長されていることを確認するために、next_renewal_timeの応答フィールドに現在の期間終了日以降の延長時間の合計が含められます。

リクエストメソッド/URI:

POST https://graph.oculus.com/application/extend_subscription

リクエスト本文

パラメーター必須/任意説明
owner_id
任意
延長対象のサブスクリプションの所有者のID。
文字列
 
owner_alias
任意
サブスクリプション登録者のユーザーネーム
文字列
abc
number_of_days
必須
サブスクリプションの延長日数
整数
14
sku
必須
ユーザーが所有するサブスクリプションに関連付けられたSKU。このskuは、現在アクティブなサブスクリプションのSKUと一致していなければなりません。
文字列
“bronze_tier”
  • リクエストするにはowner_idまたはowner_aliasのいずれかが必要です。
  • owner_aliasを使用するには、その前にユーザープロフィールのデータの使用状況の確認フォームに記入する必要があります。詳しくは、データの使用状況の確認の実施をご覧ください。

応答フィールド

サブスクリプションを延長するためのPOST応答フィールドは、リクエストの日付が成功したかどうかを示します。
フィールド定義
success
リクエストで指定された日数だけサブスクリプションが延長された場合は、trueに設定されます。
ブーリアン

リクエストの例

URL: https://graph.oculus.com/application/extend_subscription
メソッド: POST
リクエスト本文
{
"owner_id": $OWNER_ID
"sku": "bronze_tier"
"number_of_days": 14
}

cURLリクエストの例

$ curl -X POST https://graph.oculus.com/application/extend_subscription -d "access_token=<ACCESS_TOKEN>" -d "owner_id=<OWNER_ID>" -d "sku=bronze_tier" -d "number_of_days=14"

結果の例

{
"success": true
}

質問とトラブルシューティング

サブスクリプションが正しくキャンセルされたことはどうすれば確認できますか?
所有者IDを指定してサブスクリプションをクエリします。サブスクリプションのサーバーAPIエンドポイントのcancellation_timeフィールドを確認してください。別名を指定してキャンセルした場合に、APIを使って確認する方法はサポートされていません。
PARAMエラーメッセージが表示されます。これはどういうことですか?
  • 入力した所有者IDまたは所有者別名が正しいことを確認してください。
  • 当該アイテムのアクティブなSKUに対応するSKUが入力されていることを再度確認してください。
  • 渡したcancel_reason引数が有効であることを確認してください。
メールアドレスを使ってサブスクリプションをキャンセルしたときに、エラーメッセージを受け取ることがあるのはなぜですか?
メールアドレスが所有者別名として機能するには、そのサブスクリプション登録者がリンク済みのMetaアカウントを持っている必要があります。所有者別名としてユーザーネームを使用するか、所有者IDを使用することをおすすめします。
owner_aliasを使用するとエラーメッセージが表示されます。これはどういうことですか?
owner_aliasを使用するには、その前にユーザープロフィールのデータの使用状況の確認フォームに記入する必要があります。詳しくは、データの使用状況の確認の実施をご覧ください。
ナビゲーションロゴ
日本語
© 2026 Meta