コンテンツにスキップ

グループマッチメイキング

グループマッチメイキングは、複数のユーザーが同じチームとして一緒にゲームに参加したいときに使用されます。

グループマッチングは、グループベースでマッチングリクエストが行われる際だけでなく、チームメンバーの数に応じてグループと個人がチームを形成する場合にもリクエストできます。

Note

グループマッチメイキングはグループマッチングでのみサポートされており、個別マッチングでは使用できません。

このガイドでは、ユーザーがグループを作成する際に提供されるGroupCode値を入力してグループに参加し、マッチをリクエストする方法を説明します。

SDKにおけるマッチメイキング操作の流れ

グループマッチメイキングは以下の順序で行われます。

  • グループ(ルーム)を作成 → メンバーグループ参加 → マッチングリクエスト

Hive SDKを使用してグループマッチメイキングを実装する際、マッチメイキングの全体的な流れは、ユーザーがグループリーダーであるかグループメンバーであるかによって異なります。

グループリーダーの視点から見たマッチメイキングプロセスの流れ

グループメンバーの視点から見たマッチメイキングプロセスの流れ


グループを作成する

グループマッチメイキングを使用するには、まずグループを作成する必要があります。

複数のユーザーが一緒にゲームに参加したい場合、作成されたグループは同じチームとしてマッチングされます。

グループ作成メソッドを呼び出す際は、matchIdに対応するマッチ情報がHiveコンソールに事前に登録されている必要があります。

使用されるパラメータはmatchId、スコアpoint(0から10^10未満の整数)、およびマッチに使用される追加情報extraData(ニックネーム、レベル、国などの256文字以内の情報)です。

Note

matchIdを引数として使用するためのマッチユニットは'team'に設定する必要があります。さらに、グループを作成したユーザーがグループリーダーになります。

グループを作成するための例のコードはこちらです。

APIリファレンス: MatchMaking .createGroup

using hive;

int matchId = 25;       // matchId registered in the console
int point = 300;            // points used for the match
string extraData = "your extraData";    // additional information to be used for the match
MatchMaking.createGroup(matchId, point, extraData, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

API リファレンス: MatchMaking ::createGroup

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25;           // matchId registered in the console
int point = 300;                // points used for the match
string extraData = "your extraData";    // additional information to use for the match

MatchMaking::createGroup(matchId, point, extraData, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.createGroup

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25            // matchId registered in the console
val point = 300             // points used for the match
val extraData = "your extraData";   // additional information to be used for the match

MatchMaking.createGroup(matchId, point, extraData, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .createGroup

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25;           // matchIdはコンソールに登録されています
int point = 300;                // マッチに使用されるポイント
String extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking.createGroup(matchId, point, extraData, (result, data) -> {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMakingInterface.createGroup

import HIVEService
let matchId: Int = 25                       // matchId registered in the console
let point: Int = 300                        // points used for the match
let extraData: String? = "your extraData"   // additional information to be used for the match

MatchMakingInterface.createGroup(matchId: matchId, point: point, extraData: extraData) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking createGroup

#import "HIVEService.h"
NSInteger matchId = 25;                 // コンソールに登録されたmatchId
NSInteger point = 300;                      // マッチに使用されるポイント
NSString *extraData = @"your extraData";    // マッチに使用する追加情報

[MatchMakingInterface createGroupWithMatchId:matchId
                                              point:point
                                          extraData:extraData
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // call successful
    } else {
        // Call failed. See error code below
    }
}];

グループに参加する

グループに参加できます。グループリーダーでないユーザーは、同じチームとしてマッチングされるためにグループに参加できます。


グループ参加メソッドを呼び出す際に使用されるパラメータは、matchId、グループ作成時に発行されたGroupCode、マッチングに使用するスコアpoint(0から10^10未満の整数)、およびマッチングに使用される追加情報extraData(ニックネーム、レベル、国などの256文字以内の情報)です。

Note

A user who is not a group leader must request to join the group. The match unit for the matchId to be used as an argument must be set to 'team'.

これはグループ参加のための例のコードです。

APIリファレンス: MatchMaking .joinGroup

using hive;

int matchId = 25;       // matchIdはコンソールに登録されています
string groupCode = "5001789"; // グループコード
int point = 300;            // マッチに使用されるポイント
string extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking.joinGroup(matchId, groupCode, point, extraData, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

API リファレンス: MatchMaking ::joinGroup

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25;           // matchId registered in the console
string groupCode = "5001789";   // グループコード
int point = 300;                // マッチに使用されるポイント
string extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking::joinGroup(matchId, groupCode, point, extraData, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.joinGroup

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25            // matchId registered in the console
val groupCode = "5001789"   // group code
val point = 300             // points used for the match
val extraData = "your extraData";   // additional information to be used for the match

MatchMaking.joinGroup(matchId, groupCode, point, extraData, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .joinGroup

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25;           // matchIdはコンソールに登録されています
String groupCode = "5001789";   // グループコード
int point = 300;                // マッチに使用されるポイント
String extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking.joinGroup(matchId, groupCode, point, extraData, (result, data) -> {
    if (result.isSuccess()) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
});

APIリファレンス: MatchMakingInterface.requestMatchMaking

import HIVEService
let matchId: Int = 25                       // コンソールに登録されたmatchId
let groupCode: String = "5001789"           // グループコード
let point: Int = 300                        // マッチに使用されるポイント
let extraData: String? = "your extraData"   // マッチに使用される追加情報

MatchMakingInterface.joinGroup(matchId: matchId, point: point, extraData: extraData) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking requestMatchMaking

#import "HIVEService.h"
NSInteger matchId = 25;                 // matchId registered in the console
NSString *groupCode = @"5001789";           // group code
NSInteger point = 300;                      // points used for the match
NSString *extraData = @"your extraData";    // additional information to use for the match

[MatchMakingInterface joinGroupWithMatchId:matchId
                                          groupCode:groupCode
                                              point:point
                                          extraData:extraData
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
}];

グループ引き出し

私はグループを離れます。

グループメンバーのいずれかが「準備完了」ステータスにある場合、彼らは撤退できません。また、グループリーダーが撤退すると、残りのメンバーのうちの1人が自動的にグループリーダーになります。残りのメンバーがいない場合、グループは自動的に削除されます。

これはグループ引き出しのための例のコードです。

APIリファレンス: MatchMaking .leaveGroup

using hive;
int matchId = 25;       // The matchId registered in the console
MatchMaking.leaveGroup(matchId, (ResultAPI result) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking ::leaveGroup

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25;           // コンソールに登録されたmatchId

MatchMaking::leaveGroup(matchId, [=](ResultAPI const & result) {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

API リファレンス: MatchMaking.deleteRequesting

import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = 25            // コンソールに登録されたmatchId
MatchMaking.leaveGroup(matchId, object : MatchMaking.MatchMakingResultListener {
    override fun onMatchMakingResult(result: ResultAPI) {
        if (result.isSuccess) {
            // 成功した呼び出し
        } else {
            // 呼び出しに失敗しました。以下のエラーコードを参照してください
        }
    }
})

APIリファレンス: MatchMaking.INSTANCE .deleteRequesting

import com.hive.MatchMaking;
import com.hive.ResultAPI;
int matchId = 25;           // コンソールに登録されたmatchId
MatchMaking.leaveGroup(matchId, (result) -> {
    if (result.isSuccess()) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
});

APIリファレンス: MatchMakingInterface.deleteRequesting

import HIVEService
let matchId = 25            // The matchId registered in the console
MatchMakingInterface.leaveGroup(matchId: matchId) { result in
    if result.isSuccess() {
        // call successful
    } else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking deleteRequesting

#import "HIVEService.h"
NSInteger matchId = 25;          // コンソールに登録されたmatchId

[MatchMakingInterface leaveGroupWithMatchId:matchId
                                       completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
}];

グループメンバー強制退出

グループリーダーは特定のメンバーを強制的に削除することができます。強制削除は同じグループのメンバーに対してのみ要求でき、進行中の試合中には使用できません。

グループメンバー強制退出メソッドを呼び出す際には、強制的に退出させたいメンバーのtargetPlayerIdを引数として使用します。

次に示すのは、グループメンバーを強制的に削除するための例のコードです。

API リファレンス: MatchMaking .kickGroupUser

using hive;

int matchId = 25;       // コンソールに登録されたmatchId
long targetPlayerId = 123456789; // 強制的に追放されるメンバーのプレイヤーID

MatchMaking.kickGroupUser(matchId, targetPlayerId, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking ::kickGroupUser

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25; // コンソールに登録されたmatchId
long long targetPlayerId = 123456789; // 強制的に追放するメンバーのプレイヤーID

MatchMaking::kickGroupUser(matchId, targetPlayerId, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.kickGroupUser

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25 // コンソールに登録されたmatchId
val targetPlayerId = 123456789 // 強制的にエクスポートするメンバープレイヤーID

MatchMaking.kickGroupUser(matchId, targetPlayerId, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .kickGroupUser

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25; // コンソールに登録されたmatchId
long targetPlayerId = 123456789; // 強制的に追放するメンバープレイヤーID

MatchMaking.kickGroupUser(matchId, targetPlayerId, (result, data) -> {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMakingInterface.kickGroupUser

import HIVEService
let matchId = 25                    // コンソールに登録されたmatchId
let targetPlayerId = 123456789      // 強制的に追放するメンバーのプレイヤーID

MatchMakingInterface.kickGroupUser(matchId: matchId, targetPlayerId) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking requestMatchMaking

#import "HIVEService.h"
NSInteger matchId = 25;                 // コンソールに登録されたmatchId
NSNumber *targetPlayerId = 123456789;       // 強制的に追放するメンバーのプレイヤーID

[MatchMakingInterface kickGroupUserWithMatchId:matchId
                                          targetPlayerId:targetPlayerId
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // call successful
    } else {
        // Call failed. See error code below
    }
}];

グループユーザーに基づくグループ情報クエリ

グループ内のユーザーに基づいてグループ情報を照会します。 これは、グループに参加している他のユーザーの情報を確認したり、マッチングリクエスト後のマッチング結果を確認するために使用されます。

グループユーザーの状態を定期的に確認することをお勧めします。

以下は、グループユーザーに基づいてグループ情報をクエリする例のコードです。

API リファレンス: MatchMaking .getGroupInfoByUser

using hive;

int matchId = 25;       // コンソールに登録されたmatchId

MatchMaking.getGroupInfoByUser(matchId, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking ::getGroupInfoByUser

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25; // matchIdはコンソールに登録されています

MatchMaking::getGroupInfoByUser(matchId, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.getGroupInfoByUser

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25 // コンソールに登録されたmatchId

MatchMaking.getGroupInfoByUser(matchId, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // 成功した呼び出し
        } else {
            // 呼び出しに失敗しました。以下のエラーコードを参照してください
        }
    }
})

APIリファレンス: MatchMaking .getGroupInfoByUser

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25; // コンソールに登録された matchId

MatchMaking.getGroupInfoByUser(matchId, (result, data) -> {
    if (result.isSuccess()) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
});

APIリファレンス: MatchMakingInterface.getGroupInfoByUser

import HIVEService
let matchId = 25                    // Registered matchId in the console

MatchMakingInterface.getGroupInfoByUser(matchId: matchId) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

API リファレンス: HIVEMatchMaking getGroupInfoByUser

#import "HIVEService.h"
NSInteger matchId = 25;                 // コンソールに登録されたmatchId

[MatchMakingInterface getGroupInfoByUserWithMatchId:matchId
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // call successful
    } else {
        // Call failed. See error code below
    }
}];

グループコードに基づくグループ情報クエリ

グループコードに基づいてグループに関する情報を照会します。これは、グループが存在するかどうかを確認するために使用されます。

以下は、グループコードに基づいてグループ情報を取得する例のコードです。

APIリファレンス: MatchMaking .getGroupInfoByGroupCode

using hive;

string groupCode = "5001789";   // グループコード

MatchMaking.getGroupInfoByGroupCode(groupCode, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // 成功しました
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
});

APIリファレンス: MatchMaking ::getGroupInfoByGroupCode

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

string groupCode = "5001789"; // group code

MatchMaking::getGroupInfoByGroupCode(groupCode, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.getGroupInfoByGroupCode

import com.hive.MatchMaking
import com.hive.ResultAPI

val groupCode = "5001789" // グループコード

MatchMaking.getGroupInfoByGroupCode(groupCode, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .getGroupInfoByGroupCode

import com.hive.MatchMaking;
import com.hive.ResultAPI;

String groupCode = "5001789"; // グループコード

MatchMaking.getGroupInfoByGroupCode(groupCode, (result, data) -> {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMakingInterface.getGroupInfoByGroupCode

import HIVEService
let groupCode = "5001789" // グループコード

MatchMakingInterface.getGroupInfoByGroupCode(groupCode: groupCode) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking getGroupInfoByGroupCode

#import "HIVEService.h"
NSString *groupCode = @"5001789"; // グループコード

[MatchMakingInterface getGroupInfoByGroupCodeWithGroupCode:groupCode
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // call successful
    } else {
        // Call failed. See error code below
    }
}];

メンバー情報の更新

グループ内のメンバーは、自分のステータスや情報を変更できます。

メンバー情報変更メソッドを呼び出す際、パラメータにはグループリーダーを除くメンバーの準備状況 ready、マッチで使用するスコア point(0から10^10未満の整数)、およびマッチで使用する追加情報 extraData(ニックネーム、レベル、国などの情報、256文字以内)が含まれます。

Warning

グループ内のすべてのメンバーは、グループリーダーがマッチングリクエストを行うために準備完了の状態でなければなりません。
グループリーダーにとって、準備完了の値は常にtrueであり、これをfalseに変更するとエラーが発生します。

これはグループ参加のための例のコードです。

APIリファレンス: MatchMaking .updateGroupUser

using hive;

int matchId = 25;       // コンソールに登録されたmatchId
bool ready = true;          // 準備状況
int point = 300;            // マッチに使用されるポイント 
string extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking.updateGroupUser(matchId, ready, point, extraData, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking ::updateGroupUser

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25;           // コンソールに登録されたmatchId
bool ready = true;              // 準備状況
int point = 300;                // マッチに使用されるポイント
string extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking::updateGroupUser(matchId, ready, point, extraData, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
            // call successful
    } else {
            // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.updateGroupUser

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25            // matchId registered in the console
val ready = true            // readiness status
val point = 300             // points used for the match
val extraData = "your extraData";   // additional information to be used for the match

MatchMaking.updateGroupUser(matchId, ready, point, extraData, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .updateGroupUser

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25;           // コンソールに登録されたmatchId
boolean ready = true;           // 準備状況
int point = 300;                // マッチに使用されるポイント
String extraData = "your extraData";    // マッチに使用される追加情報

MatchMaking.updateGroupUser(matchId, ready, point, extraData, (result, data) -> {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMakingInterface.updateGroupUser

import HIVEService
let matchId: Int = 25                       // コンソールに登録されたmatchId
let ready: Bool = true                      // 準備完了ステータス
let point: Int = 300                        // マッチ使用ポイント
let extraData: String? = "your extraData"   // マッチに使用する追加情報

MatchMakingInterface.updateGroupUser(matchId: matchId, ready: ready, point: point, extraData: extraData) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking updateGroupUser

#import "HIVEService.h"
NSInteger matchId = 25;                 // matchId registered in the console
BOOL *ready = true;                         // group code
NSInteger point = 300;                      // points used for the match
NSString *extraData = @"your extraData";    // additional information to be used for the match

[MatchMakingInterface updateGroupUserWithMatchId:matchId
                                           ready:ready
                                           point:point
                                       extraData:extraData
                                      completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // call successful
    } else {
        // Call failed. See error code below
    }
}];

一致するリクエスト

マッチをリクエストしています。グループ内のすべてのメンバーが準備完了の状態になると、グループリーダーがマッチリクエストを行うことができます。

マッチをリクエストする際の前提条件は以下の通りです。

  • リクエスト時にグループメンバーが少なくとも2人必要です。
  • グループリーダー(ルームリーダー)でないメンバーは、'Ready' ステータスを true に設定する必要があります。
  • 既存のマッチがある場合は、リクエストを行う前に削除する必要があります。
  • リクエストを行えるのはグループリーダー(ルームリーダー)のみです。
Warning

もしマッチングリクエストが進行中の際に再度マッチングをリクエストした場合、既存のマッチングは中断されず、コールバック関数はエラー値(MatchMakingResponseError)を返します。 したがって、マッチングをリクエストする前に必ずマッチングステータスを確認するを通じてマッチングのステータスを確認してください。

これは一致リクエストのための例のコードです。

API リファレンス: MatchMaking .requestGroupMatching

using hive;
int matchId = 25;       // matchId registered in the console

MatchMaking.requestGroupMatching(matchId, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking ::requestGroupMatching

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25;           // コンソールに登録された matchId

MatchMaking::requestGroupMatching(matchId, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

API リファレンス: MatchMaking.requestGroupMatching

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25            // コンソールに登録されたmatchId

MatchMaking.requestGroupMatching(matchId, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .requestGroupMatching

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25;           // コンソールに登録された matchId

MatchMaking.requestGroupMatching(matchId, (result, data) -> {
    if (result.isSuccess()) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
});

APIリファレンス: MatchMakingInterface.requestGroupMatching

import HIVEService

let matchId = 25                    // コンソールに登録された matchId

MatchMakingInterface.requestGroupMatching(matchId: matchId) { result, data in
    if result.isSuccess() {
        // call successful
    }
    else {
        // Call failed. See error code below
    }
}

APIリファレンス: HIVEMatchMaking requestGroupMatching

#import "HIVEService.h"

NSInteger matchId = 25;                 // コンソールに登録された matchId

[MatchMakingInterface requestGroupMatchingWithMatchId:matchId
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // call successful
    } else {
        // Call failed. See error code below
    }
}];

マッチングリクエストのキャンセル (削除)

試合をキャンセル(削除)しています。試合は、以下の1つまたはそれ以上の条件を満たす場合に削除されなければなりません。

  • ユーザーがマッチをキャンセルした場合
  • マッチのステータスがタイムアウトの場合
  • ユーザー間のゲームが正常に完了した場合

    ゲームサーバー上でゲーム結果(ランキング、スコア、勝敗状況など)のデータを更新した後、マッチの削除をリクエストする必要があります。

以下は、マッチングリクエストをキャンセル(削除)するためのサンプルコードです。

API リファレンス: MatchMaking .deleteGroupMatching

using hive;
int matchId = 25;       // コンソールに登録されたmatchId

MatchMaking.deleteGroupMatching(matchId, (ResultAPI result, MatchMaking.MatchMakingGroupData data) => {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking ::deleteGroupMatching

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

int matchId = 25;           // matchIdはコンソールに登録されています

MatchMaking::deleteGroupMatching(matchId, [=](ResultAPI const & result, MatchMakingGroupData data) {
    if (result.isSuccess()) {
        // call successful
    } else {
        // Call failed. See error code below
    }
});

APIリファレンス: MatchMaking.deleteGroupMatching

import com.hive.MatchMaking
import com.hive.ResultAPI

val matchId = 25            // matchId registered in the console

MatchMaking.deleteGroupMatching(matchId, object : MatchMaking.MatchMakingGroupDataListener {
    override fun onMatchMakingGroupData(result: ResultAPI, data: MatchMaking.MatchMakingGroupDataListener) {
        if (result.isSuccess) {
            // call successful
        } else {
            // Call failed. See error code below
        }
    }
})

APIリファレンス: MatchMaking .deleteGroupMatching

import com.hive.MatchMaking;
import com.hive.ResultAPI;

int matchId = 25;           // matchIdはコンソールに登録されています

MatchMaking.deleteGroupMatching(matchId, (result, data) -> {
    if (result.isSuccess()) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
});

APIリファレンス: MatchMakingInterface.deleteGroupMatching

import HIVEService

let matchId = 25                    // コンソールに登録された matchId

MatchMakingInterface.deleteGroupMatching(matchId: matchId) { result, data in
    if result.isSuccess() {
        // 成功した呼び出し
    }
    else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
}

APIリファレンス: HIVEMatchMaking deleteGroupMatching

#import "HIVEService.h"

NSInteger matchId = 25;                 // コンソールに登録された matchId

[MatchMakingInterface deleteGroupMatchingWithMatchId:matchId
                                         completion:^(HIVEResult *result, id data) {
    if ([result isSuccess]) {
        // 成功した呼び出し
    } else {
        // 呼び出しに失敗しました。以下のエラーコードを参照してください
    }
}];

MatchMakingGroupDataオブジェクト構造

これは、グループマッチメイキングによって提供された主要な機能要求に応じて配信されるオブジェクトです。

レスポンスオブジェクトには、リクエスト中に入力された情報、グループコード、グループリーダー情報、チームメンバー情報、およびマッチング結果情報が含まれています。

フィールド名 説明 タイプ
groupCode グループ作成時に生成されるグループコード 文字列
ownerPlayerId グループ作成をリクエストしたプレイヤーID(グループリーダー) 長整数
requestGameIndex マッチゲームインデックス 整数
requestMatchId リクエストされたマッチID(Hiveコンソールに登録された形式) 整数
requestStatus マッチリクエストのステータス(requested: マッチがリクエストされた、notRequested: リクエストされていない(または、進行中のマッチがマッチングされていない)) 文字列
requestTimeUtc マッチリクエストの時間(例: 2025-01-02T11:13:50.96) 文字列
matchingStatus マッチ進行状況のステータス(matchingInProgress: マッチング進行中、timeout: 制限時間内にマッチングが発生しなかった、matched: マッチング成功) 文字列
matchingType チーム参加か個人参加か(matchingStatusがmatchedの場合に存在)(team: チーム、player: 個人、unknown: マッチング確認が利用できない場合) 文字列
matchingId 成功したマッチに割り当てられたID(matchingStatusがmatchedの場合に存在)(例: 539:21_2025-01-02T11:45:55.25_1) 文字列
memberInfoList 現在グループに所属しているメンバーのプレイヤー情報のリスト MatchMemberInfo 配列
matchingTeamInfoList マッチが成功した場合のチーム情報のリスト MatchingResultTeamInfo(matchingStatusがmatchedの場合に存在) 配列

MatchMemberInfoオブジェクト構造

これはチームマッチに参加する際に渡されるオブジェクトです。これは同じチーム(グループ)に所属するチームメンバーのユーザー情報を含んでいます。

フィールド名 説明 タイプ
playerId グループメンバーのplayerId Long
ready グループメンバーの準備状況 Boolean
point グループメンバーのポイント Int
extraData グループメンバーが提供するその他の情報(ユーザーがリクエスト時にextraDataを使用した場合に存在) String

MatchingResultTeamInfoオブジェクト構造

これは、チームが試合に参加し、マッチングが成功したとき(matchingStatusがmatchedのとき)に配信されるオブジェクトです。チームインデックスと、チームに属するユーザーに関する情報が含まれています。

フィールド名 説明 タイプ
teamIndex チームのユニークインデックス Int
playerInfos チームに属するユーザー情報のリスト MatchingResultPlayerInfo Array

一致状況を確認

ユーザーのマッチングステータスを確認しています。

一致状況チェックメソッドを呼び出すと、以下の3つの一致状況のいずれかが返されます。

  1. マッチング中 (matchingStatus: matchingInProgress)
  2. マッチング成功 (matchingStatus: matched)
  3. タイムアウト (matchingStatus: timeout)

ユーザーによるグループ情報の取得 APIまたはグループコードによるグループ情報の取得 APIを使用して、一致状況を確認できます。

一致処理中

一致状況が進行中の場合は、一致状況が一致に達したかどうかを確認するために、メソッドを繰り返し呼び出す必要があります。

繰り返し呼び出しサイクルは3秒から10秒の間隔で呼び出すことを推奨します。アプリの実装特性に応じて、時間間隔をさらに延ばすことも可能です。

一致成功

マッチングステータスがマッチ成功の場合、開発者のゲームが起動します。これは、Hive SDKを通じて接続されたユーザーが一緒にゲームをプレイする状態にあり、マッチしたユーザーが開発者のゲームに参加できることを意味します。

タイムアウト

ステータスがタイムアウト(matchingStatus: timeout)の場合、既存のマッチを削除し、再度マッチをリクエストする必要があります。

エラーコード

エラーコード メッセージ 説明
NEED_INITIALIZE MatchMakingNotInitialized SDKのセットアップが行われていない場合 (AuthV4.setup)
INVALID_SESSION MatchMakingNeedSignIn AuthV4のサインインが行われていない場合
RESPONSE_FAIL MatchMakingResponseError API呼び出しが不正なパラメータ、ネットワークの問題、またはすでにマッチングリクエスト状態にあるときにマッチングリクエストが行われた場合に失敗する