データストアの使用方法¶
データストアは、NoSQLクラウドデータベースを使用して、ゲームのコンポーネントや設定情報など、クライアントで使用するためのデータを同期および保存します。このサービスを使用することは、クライアントベースのゲームや、クライアント間でリアルタイムの更新が必要な場合に良い解決策です。
データストア には以下の機能があります:
- データは各ゲームのストレージに別々に保存されます。
- すべてのデータは暗号化され、安全に配信されます。
- SQL データベースとは異なり、NoSQL クラウドデータベースにはテーブルや行がなく、データはコレクションから成るドキュメントに保存されます。
- データをキー-値ペアとして保存および文書化します。
- 複数のドキュメントから成るコレクションの保存に最適化されています。
- キー-値の設計に関する注意事項については、Hive 開発者の Operation > Game Data Store ガイドを参照してください。
データを追加¶
データストアにキーと値のペア1組またはマップ形式の複数ペアを一度に追加できます。リクエストの後、trueまたはfalseが返されます。
Warning
キーと値は、単純な文字列またはバックスラッシュ(\)を含む一次元のJSON文字列に設定する必要があります。
以下は、キーと値のペアのデータを追加するためのサンプルコードです。
APIリファレンス: DataStore .set
#include "HiveDataStore.h"
FString Key = TEXT("your data key");
FString Value = TEXT("your data value");
FHiveDataStore::Set(Key, Value, FHiveDataStoreOnSetDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API呼び出し成功 
        } else {
                // 呼び出しに失敗しました。以下のエラーコードを参照してください
        }
}));
APIリファレンス: DataStore ::set
APIリファレンス: DataStore.set
import com.hive.DataStore    
    import com.hive.ResultAPI    
    val key = "your data key"    
    val value = "your data value"    
    DataStore.set(key, value, object : DataStore.DataStoreSetListener {    
         override fun onDataStoreSet(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})
APIリファレンス: DataStore.INSTANCE .set
APIリファレンス: DataStoreInterface.set
APIリファレンス: HIVEDataStore set
Map形式のデータを追加するためのサンプルコードは以下の通りです。
APIリファレンス: DataStore .set
#include "HiveDataStore.h"
TMap<FString, FString> Data;
Data.Emplace(TEXT("key1"), TEXT("value1"));
Data.Emplace(TEXT("key2"), TEXT("value2"));
Data.Emplace(TEXT("key3"), TEXT("value3"));
FHiveDataStore::Set(Data, FHiveDataStoreOnSetDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successfull
        } else {
                // Call failed. See error code below
        }
}));
APIリファレンス: DataStore ::set
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    map<string, string> map = {    
         {"key1", "value1"},    
         {"key2", "value2"},    
         {"key3", "value3"}    
    };    
    DataStore::set(map, [=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});
APIリファレンス: DataStore.set
import com.hive.DataStore    
    import com.hive.ResultAPI    
    val map = mapOf(    
         "key1" to "value1",    
         "key2" to "value2",    
         "key3" to "value3",    
    )    
    DataStore.set(map, object : DataStore.DataStoreSetListener {    
         override fun onDataStoreSet(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})
APIリファレンス: DataStore.INSTANCE .set
import com.hive.DataStore;    
    import com.hive.ResultAPI;    
    Map<String, String> map = new HashMap<>();    
    map.put("key1", "value1");    
    map.put("key2", "value2");    
    map.put("key3", "value3");    
    DataStore.INSTANCE.set(map, result -> {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});
API リファレンス: DataStoreInterface.set
APIリファレンス: HIVEDataStore set
#import <HIVEService/HIVEService-Swift.h>    
    NSDictionary<NSString *, NSString *> *map = @{    
         @"key1" : @"value1",    
         @"key2" : @"value2",    
         @"key3" : @"value3"    
    };    
    [HIVEDataStore set: map handler: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // 成功した呼び出し    
         } else {    
             // 呼び出しに失敗しました。以下のエラーコードを参照してください    
         }    
}];
データを取得する¶
データを取得する方法は2つあり、1つまたはすべてを一度に取得できます。また、リクエストしたキーに対応するすべてのユーザーデータを取得することもできます。データを取得する3つの方法は次のとおりです:
- 私のデータの1つを取得する- 私のすべてのデータを取得する
- キーを使用してすべてのデータを取得する
 
以下のサンプルコードを各方法について確認してください。
以下は、私のデータの1つを取得するためのサンプルコードです。
APIリファレンス: DataStore .get
APIリファレンス: DataStore ::get
APIリファレンス: DataStore.get
APIリファレンス: DataStore.INSTANCE .get
APIリファレンス: DataStoreInterface.get
APIリファレンス: HIVEDataStore get
以下は、私のすべてのデータを取得するためのサンプルコードです。
API リファレンス: DataStore .getMyData
#include "HiveDataStore.h"
FHiveDataStore::GetMyData(FHiveDataStoreOnMyDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const DataStoreData& MyData) {
        if (Result.IsSuccess()) {
                // API  call successfull
                // myData: the added key-value map  
        } else {
                // Call failed. See error code below
        }
}));
APIリファレンス: DataStore .getMyData
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    DataStore.getMyData([=](ResultAPI const & result, map<string, string> const & myData) {    
         if (result.isSuccess()) {    
             // call successful    
             // myData: the added key-value map    
         } else {    
             // Call failed. See error code below    
         }    
});
APIリファレンス: DataStore.getMyData
import com.hive.DataStore    
    import com.hive.ResultAPI    
    DataStore.getMyData(object : DataStore.DataStoreMyDataListener {    
         override fun onDataStoreMyData(result: ResultAPI, myData: Map<String, String>) {    
             if (result.isSuccess) {    
                 // 成功した呼び出し    
                 // myData: 追加されたキー-バリューマップ    
             } else {    
                 // 呼び出しに失敗しました。以下のエラーコードを参照してください    
             }    
         }    
})
API リファレンス: DataStore.INSTANCE .getMyData
APIリファレンス: DataStoreInterface .getMyData
APIリファレンス: HIVEDataStore getMyData
以下は、キーを使用してすべてのデータを取得するためのサンプルコードです。
APIリファレンス: DataStore .getUsersData
using hive;    
    string key = "your data key";    
    DataStore.getUsersData(key, (ResultAPI result, string key, Dictionary<long, string> usersData) => {    
         if (result.isSuccess()) {    
             // call successful    
             // key: Entered key    
             // usersData: Map in PlayerId-value format. Be careful about the long key type.    
         } else {    
             // Call failed. See error code below    
         }    
});
#include "HiveDataStore.h"
FString Key = TEXT("your data key");
FHiveDataStore::GetUsersData(Key, FHiveDataStoreOnUsersDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Key, const DataStoreUsersData& UsersData) {
        if (Result.IsSuccess()) {
                // 成功した呼び出し    
      // key: 入力されたキー    
      // usersData: PlayerId-値形式のマップです。長いキータイプに注意してください。
        } else {
                // 呼び出しに失敗しました。以下のエラーコードを参照してください
        }
}));
APIリファレンス: DataStore ::getUsersData
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    string key = "your data key";    
    DataStore::getUsersData(key, [=](ResultAPI const & result, string key, map const & usersData) {    
         if (result.isSuccess()) {    
             // 成功した呼び出し    
             // key: 入力されたキー    
             // usersData: PlayerId-値形式のマップ。キーがlong long型であることに注意してください。    
         } else {    
             // 呼び出しに失敗しました。以下のエラーコードを参照してください    
         }    
});
APIリファレンス: DataStore.getUsersData
import com.hive.DataStore    
    import com.hive.ResultAPI    
    val key = "your data key"    
    DataStore.getUsersData(key, object : DataStore.DataStoreUsersDataListener {    
         override fun onDataStoreUsersData(result: ResultAPI, key: String?, usersData: Map<Long, String>) {    
             if (result.isSuccess) {    
                 // 成功しました    
                 // key: 入力されたキー    
                 // usersData: PlayerId-値形式のマップ。long型に注意してください。    
             } else {    
                 // 呼び出しに失敗しました。以下のエラーコードを参照してください    
             }    
         }    
})
APIリファレンス: DataStore.INSTANCE .getUsersData
import com.hive.DataStore;    
    import com.hive.ResultAPI;    
    String key = "your data key";    
    DataStore.INSTANCE.getUsersData(key, (result, key1, usersData) -> {    
         if (result.isSuccess()) {    
             // call successful    
             // key: Entered key    
             // usersData: Map in PlayerId-value format. Be careful about the long type.    
         } else {    
             // Call failed. See error code below    
         }    
});
APIリファレンス: DataStoreInterface.getUsersData
import HIVEService    
    let key = "your data key"    
    DataStoreInterface.getUsersData(key) { result, key, usersData in    
        if result.isSuccess() {    
        // call successful    
        // key: Entered key    
        // usersData: Map in PlayerId-value format. Note that the key is of type Int64.    
        } else {    
        // Call failed. See error code below    
        }    
}
APIリファレンス: HIVEDataStore getUsersData
#import <HIVEService/HIVEService-Swift.h>    
    NSString* key = @"your data key";    
    [HIVEDataStore getUsersData: key handler: ^(HIVEResultAPI *result, NSString *key, NSDictionary<NSNumber *, NSString *> *usersData) {    
         if ([result isSuccess]) {    
             // 成功    
             // key: 入力されたキー    
             // usersData: PlayerId-値形式のマップ。キーはNSNumber *型であることに注意してください。    
         } else {    
             // 呼び出しに失敗しました。以下のエラーコードを参照してください    
         }    
}];
エラーコード¶
| エラーコード | メッセージ | 説明 | 
|---|---|---|
| RESPONSE_FAIL | DataStoreNotExistKey | サーバー上にキーが存在しません | 
| RESPONSE_FAIL | DataStoreNotExistColumn | サーバー上にカラムファミリー(テーブル)が存在しません | 
| RESPONSE_FAIL | DataStoreGameIsBeingInspected | ゲームのデータストアはメンテナンス中です | 
| DEVELOPER_ERROR | DataStoreNotExistPublicKey | 公開鍵が存在しません。Hive コンソールの設定を確認する必要があります。 | 
| NEED_INITIALIZE | DataStoreNotInitialized | SDKのセットアップ(AuthV4.setup)が完了していません | 
| INVALID_SESSION | DataStoreNeedSignIn | サインインしていません。サインインする必要があります。 | 
| DEVELOPER_ERROR | DataStoreDisabled | データストアが使用しないに設定されています。Hive コンソールの設定を確認する必要があります。 | 
| RESPONSE_FAIL | DataStoreResponseError | サーバーへの接続は成功しましたが、エラーが返されました。エラーメッセージを確認する必要があります。 | 
| INVALID_PARAM | DataStoreInvalidParam | 無効なパラメータのため、 set()APIの呼び出しに失敗しました |