如何使用数据存储¶
数据存储 使用 NoSQL 云数据库来同步和存储客户端使用的数据,例如游戏的组件和设置信息。使用此服务是基于客户端的游戏或需要客户端之间实时更新的良好解决方案。
数据存储 具有以下功能:
- 数据在每个游戏的存储中单独存储。
- 所有数据都经过加密并安全传输。
- 与SQL数据库不同,NoSQL云数据库没有表和行,数据存储在由集合组成的文档中。
- 以键-值对的形式存储和记录数据。
- 优化存储由多个文档组成的集合。
- 有关设计键-值的注意事项,请参阅来自Hive开发者的操作 > 游戏 数据存储指南。
添加数据¶
您可以一次以一对键值对或多个映射格式将数据添加到数据存储中。请求后,将返回true
或false
。
Warning
键值需要在一个一维 JSON 字符串中设置,该字符串包括一个简单字符串或反斜杠(\)。
以下是添加键值对数据的示例代码。
API 参考: DataStore .set
API 参考: DataStore ::set
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string key = "your data key";
string value = "your data value";
DataStore::set(key, value, [=](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 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> 数据;
数据.Emplace(TEXT("key1"), TEXT("value1"));
数据.Emplace(TEXT("key2"), TEXT("value2"));
数据.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]) {
// call successful
} else {
// Call failed. See error code below
}
}];
获取数据¶
获取数据有两种方式,一次获取一个或一次获取全部,您还可以获取与您请求的键对应的所有用户数据。获取数据的三种方式如下:
- 获取我的一条数据
- 获取我的所有数据
- 使用密钥获取所有数据
查看以下每种方式的示例代码。
以下是获取我数据的示例代码。
API 参考: DataStore .get
API 参考: DataStore ::get
API 参考: DataStore.get
API 参考: DataStore.INSTANCE .get
API 参考: DataStoreInterface.get
API 参考: HIVEDataStore get
以下是获取我所有数据的示例代码。
API 参考: DataStore .getMyData
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) {
// call successful
// myData: the added key-value map
} else {
// Call failed. See error code below
}
}
})
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()) {
// 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
}
}));
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: 玩家ID-值格式的映射。请注意,键是长整型。
} 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) {
// 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 参考: 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]) {
// success
// key: Entered key
// usersData: Map in PlayerId-value format. Note that the key is of type NSNumber *.
} else {
// Call failed. See error code below
}
}];
错误代码¶
错误代码 | 消息 | 描述 |
---|---|---|
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 失败 |