コンテンツにスキップ

マッチメイキングAPI

前提条件

マッチメイキングAPIを使用するには、以下のアイテムを準備する必要があります。

  • API呼び出しのための認証トークン(Certification Key):Hive コンソール アプリセンター > プロジェクトを管理 > ゲームリストからゲームを選択 > ゲームの詳細 > 基本情報 > 認証キー
  • ゲームインデックス(gameIndex):Hive コンソール アプリセンター > プロジェクトを管理 > ゲームリストからゲームを選択 > ゲームの詳細 > 基本情報 > ゲームインデックス
  • マッチID(matchId):これは、Hive コンソールでマッチを作成する際に確認できます。

リクエストURLルート

サーバー URL
ライブ api-match.withhive.com
サンドボックス sandbox-api-match.withhive.com

一般的な応答コード

これらは一般的なAPIレスポンスコードです。

コード 説明
200 成功 各APIレスポンスを参照してください
400 不正なリクエスト リクエストパラメータまたはリクエストボディの入力が不正です
401 未認証 リクエストメッセージの認証ヘッダーが欠落しているか無効です
403 禁止 API呼び出しのための認証トークン(認証キー)が無効です
404 見つかりません 不正なAPIパスです
500 内部サーバーエラー 内部サーバーエラーが発生しました

リクエストマッチ

ユーザーがマッチをリクエストする際にこのAPIを呼び出します。matchIdに対応するマッチはHiveコンソールで事前に作成されている必要があります。

リクエストURL

ライブURL https://api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
サンドボックスURL https://sandbox-api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
HTTPメソッド POST
コンテンツタイプ application/json

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
認証 API呼び出しのための認証トークン(ベアラー) 文字列 はい

パスパラメータ

フィールド名 説明 タイプ 必須
gameIndex Hive コンソールアプリセンターで利用可能なプロジェクト識別子 int はい
matchId Hive コンソールで作成された各マッチ識別子 int はい

リクエストボディ

フィールド名 説明 タイプ 必須
playerId アカウント識別子 long Y
point 試合で使用されるスコア。入力範囲は0 ~ 999,999,999です。入力しない場合は`0`が使用されます。 integer N
extraData 追加のアカウント情報(ニックネーム、レベル、国など)。最大256文字まで入力できます。試合結果に含まれます。 string N

応答

フィールド名 説明
playerId アカウント識別子
matchInfo リクエスト対象情報
  • gameIndex: gameIndexの値
  • matchId: matchIdの値
requestingStatus リクエストステータス情報
  • requested: マッチが正常にリクエストされました
  • notRequested: マッチがリクエストされていないか、マッチがすでに完了しているため、進行中のリクエストはありません
requestingInfo リクエスト情報
  • requestTimeUtc: UTC+0でのリクエスト時間
  • point: リクエスト時に入力されたpoint
  • extraData: リクエスト時に入力されたextraData
matchingInfo マッチステータス情報 (status)
  • matchingInProgress: マッチ進行中
  • timeout: 制限時間内にマッチが行われなかった
  • matched: マッチが完了しました

リクエストサンプル

curl --location 'https://sandbox-api-match.withhive.com/gameindexes/1/matchmakings/1/request' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ya3a' \
--data '{
   "playerId":100,
   "point": 1000
}'

応答サンプル

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "requested",
   "requestingInfo": {
       "requestTimeUtc": "2024-06-05T05:09:28.72",
       "point": 1000
   },
   "matchingInfo": {
       "status": "matchingInProgress"
   }
}

マッチステータスを確認

リクエストされた試合のステータスを確認してください。

リクエストURL

ライブURL https://api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
サンドボックスURL https://sandbox-api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players
HTTPメソッド GET

ヘッダー パラメータ

フィールド名 説明 タイプ 必須
認証 API呼び出しのための認証トークン(ベアラー) 文字列 はい

パスパラメータ

フィールド名 説明 タイプ 必須
gameIndex Hive コンソールアプリセンターで利用可能なプロジェクト識別子 int はい
matchId Hive コンソールで生成される各マッチの識別子 int はい

クエリパラメータ

フィールド名 説明 タイプ 必須
id ユーザーID (`playerId`) long Y

応答

フィールド名 説明
playerId アカウント識別子
matchInfo 要求された情報
  • gameIndex: gameIndexの値
  • matchId: matchIdの値
requestingStatus リクエストステータス情報
  • requested: マッチが正常にリクエストされました
  • notRequested: マッチがリクエストされていないか、マッチがすでに完了しているため、進行中のリクエストはありません
requestingInfo リクエスト情報
  • requestTimeUtc: UTC+0でのリクエスト時間
  • point: リクエスト時に入力されたpoint
  • extraData: リクエスト時に入力されたextraData
matchingInfo マッチステータス情報 (status)
  • matchingInProgress: マッチ進行中
  • timeout: 制限時間内にマッチが完了しなかった
  • matched: マッチが完了しました

リクエストサンプル

curl --location --request GET 'https://sandbox-api-match.withhive.com/gameindexes/1/matchmakings/1/players?id=100' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ya3a'

応答サンプル

マッチリクエストをまだ行っていないときのマッチステータスは次のとおりです。

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "notRequested"
}


Request Match は、マッチがまだ進行中の場合に requestedmatchingInProgress ステータスを返します。

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "requested",
   "requestingInfo": {
       "requestTimeUtc": "2024-06-05T05:09:28.72",
       "point": 1000
   },
   "matchingInfo": {
       "status": "matchingInProgress"
   }
}


マッチが完了した後にリクエストのステータスを確認すると、matchedまたはtimeoutの結果が返されます。これはマッチが完了した状態ですが、マッチ結果コールバックがまだ受信されていない状態です。

    {
       "playerId": 100,
       "matchInfo": {
           "gameIndex": 1,
           "matchId": 1
       },
       "requestingStatus": "requested",
       "requestingInfo": {
           "requestTimeUtc": "2024-06-05T05:09:28.72",
           "point": 1000
       },
       "matchingInfo": {
           "status": "matched"
       }
   }


試合が完了すると、Hive サーバーはあなたのサーバーにマッチ結果コールバックを送信します。あなたのサーバーがマッチ結果コールバックを受信し、Hive サーバーにHTTPステータス200を返すと、再度マッチリクエストのステータスを確認すると、notRequestedに変更され、matchingInfoキーは以下のように削除されます。これは、Hive サーバーがコールバックに対する応答としてHTTPステータス200を受け取った時点で、あなたのマッチリクエストが完了したと見なしてマッチリクエストトランザクションを削除するためです。

{
   "playerId": 100,
   "matchInfo": {
       "gameIndex": 1,
       "matchId": 1
   },
   "requestingStatus": "notRequested"
}


マッチリクエスト前 マッチリクエスト後 マッチ結果作成後 コールバック受信後
requestingStatus notRequested requested requested notRequested
matchingInfo > Status N/A matchingInProgress matched or timeout N/A
備考 マッチ進行中 コールバック受信前

マッチリクエストをキャンセル

マッチリクエストをキャンセルします。マッチリクエストをキャンセルすると、マッチリクエストトランザクションは Hive サーバーから削除されます。

リクエストマッチの後にマッチが完了し、マッチ結果コールバックを受け取り、HTTPステータス200で応答した場合、Hive サーバーはマッチが完了したと見なし、マッチリクエストトランザクションを削除します。この状態では、マッチリクエストをキャンセルするために呼び出しても、マッチリクエストトランザクションはすでに削除されているため、キャンセル操作は実行されず、例外も返されません。

リクエストURL

ライブURL https://api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players/{playerId}
サンドボックスURL https://sandbox-api-match.withhive.com/gameindexes/{gameIndex}/matchmakings/{matchId}/players/{playerId}
HTTPメソッド DELETE

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
認証 API呼び出しのための認証トークン(ベアラー) 文字列 はい

パスパラメータ

フィールド名 説明 タイプ 必須
gameIndex Hive コンソールアプリセンターで利用可能なプロジェクト識別子 int はい
matchId Hive コンソールで作成された各マッチの識別子 int はい
playerId ユーザーID long はい

応答

200 OKの場合、ボディは空です。

リクエストサンプル

curl --location --request DELETE 'https://sandbox-api-match.withhive.com/gameindexes/1/matchmakings/1/players/100' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNzAyNDU4MTkzLCJqdGkiOiIxMzY2NDk4MjcxIn0.VSwvsTE-tS0sL_e9p9gNvHRkMCbsycSO4ObE4J2ya3a'

応答サンプル

リクエストが正常にキャンセルされた場合、特定の応答はありません。

マッチ結果コールバック

試合が完了すると、Hive サーバーは試合結果をコールバックとしてあなたのサーバーに送信します。あなたのサーバーが試合結果のコールバックを問題なく受信した場合、あなたのサーバーはHttpStatus 200で応答する必要があります。Hive コンソールに希望するサーバーURLを登録することで、試合結果はこのアドレスにコールバックとして送信されます。このアドレスは公開アクセス可能なURLでなければなりません。API情報は以下の通りです。

コールバック受信URL (Hive サーバー → あなたのサーバー)

あなたのサーバーAPIエンドポイントがHiveコンソールに登録されると、Hiveサーバーはマッチが完了したときにこのエンドポイントにコールバック結果を送信します。

ヘッダーパラメータ

フィールド名 説明 タイプ 必須
X-Match-Signature HMAC SHA-256アルゴリズムで暗号化されたボディ内容の署名値 文字列 はい

コールバックで渡された値

フィールド名 説明 タイプ
gameIndex 完了した試合のgameIndex値 int
matchId 完了した試合のmatchId値 int
matchingInfos マッチされたアプリユーザーの情報の配列。`playerId`フィールド値が`0`のユーザーはボットと見なされます。
  • matchingId: マッチID
  • privateInfos: ソロゲームでマッチされたユーザーの情報の配列(timeoutPlayerInfosと同じ形式)
  • teamInfos: チームゲームでマッチされたユーザーの情報の配列(teamIndex: チーム番号、playerInfos: チームメンバーの情報の配列、timeoutPlayerInfosと同じ形式)
json
timeoutPlayerInfos マッチされずにタイムアウトしたアプリユーザーの情報の配列
  • extraData: マッチがリクエストされたときに入力されたextraData
  • point: マッチがリクエストされたときに入力されたpoint
  • playerId: マッチがリクエストされたときに入力されたplayerId
json

コールバックの例 (Hive サーバー → あなたのサーバー)

curl --location 'The API endpoint of your server registered in the Hive Console.' --header 'Content-Type: application/json' --header 'X-Match-Signature: nj2YlgGTlLXcAhrl6ijSgfD71gTWokBiM8WPn72xxg8=' --data '{
   "gameIndex": 1,
   "matchId": 1,
   "matchingInfos": [
       {
           "matchingId": "1:1_2024-06-05T05:43:28.91_1",
           "privateInfos": [
               {
                   "playerId": 100,
                   "point": 1000
               },
               {
                   "playerId": 101,
                   "point": 1000
               }
           ]
       }
   ],
   "timeoutPlayerInfos": []
}'


コールバック結果の真正性は、ヘッダー パラメーター X-Match-Signature の値を使用して確認できます。また、アルゴリズム計算に使用するキーは、Hive コンソールにあります。以下は、署名を取得するための Java コードの例です。

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class MatchSignature {  
   private static final String HMAC_SHA_256 = "HmacSHA256";
   private static final String UTF_8 = "UTF-8";
   public String getSignature(String secret, String httpRequestBody) throws Exception {
       SecretKeySpec key = new SecretKeySpec(secret.getBytes(), HMAC_SHA_256);
       Mac mac = Mac.getInstance(HMAC_SHA_256);
       mac.init(key);
       byte[] source = httpRequestBody.getBytes(UTF_8);

       return new String(Base64.getEncoder().encode(mac.doFinal(source)), StandardCharsets.UTF_8);
   }
}


Hive サーバーから送信されたコールバックが正常に受信された場合、HTTP ステータス 200 をレスポンスとして返す必要があります。

  • HttpStatus 200での応答: マッチが正常に完了したと見なされるため、マッチリクエストはキャンセルされます。
  • HttpStatus 200以外の値またはタイムアウトでの応答: マッチ結果のコールバックは定期的に再送信されます。

Hive サーバーがHTTPステータス200の応答を継続的に受信できない場合、システム管理の目的で一定期間マッチ結果のコールバックは配信されません。