附加组件
带来 Facebook 朋友列表¶
getProviderFriendsList()
方法提供了在同一游戏中用户 Facebook 朋友的 PlayerID。那些不使用 Facebook 同步的玩家不在好友列表中,而之前同步的玩家返回 -1 作为 PlayerID。
Warning
Facebook 修订了政策,该政策解释了 2018 年 5 月对平台 API 的基本访问权限项。要从此使用 Facebook /user/friends
API,您需要 user_friends
权限。
查看 Facebook 应用审核指南
API 参考: hive.AuthV4.getProviderFriendsList
using hive;
AuthV4.ProviderType providerType = AuthV4.ProviderType.FACEBOOK;
AuthV4.getProviderFriendsList (providerType, (ResultAPI result, AuthV4.ProviderType providerType, Dictionary<String, Int64> providerUserIdList) => {
if (!result.isSuccess()) {
return;
}
if (providerUserIdList != null) {
foreach (KeyValuePair<String, Int64> providerUserId in providerUserIdList ) {
// providerUserId: providerUserId.Key
// playerId: providerUserId.Value
}
}
});
#include "HiveAuthV4.h"
EHiveProviderType TargetProviderType = EHiveProviderType::FACEBOOK;
FHiveAuthV4::GetProviderFriendsList(TargetProviderType,
FHiveAuthV4OnGetProviderFriendsListDelegate::CreateLambda([this](const FHiveResultAPI& Result, const EHiveProviderType& ProviderType, const ProviderFriendsMap& ProviderUserIdList) {
// (alias) using ProviderFriendsMap = TMap<FString, int64>;
if (!Result.IsSuccess()) {
return;
}
for (const auto& ProviderUserIdEntry : ProviderUserIdList) {
// ProviderUserId: ProviderUserIdEntry.Key;
// Player Id: ProviderUserIdEntry.Value;
}
}));
API 参考: AuthV4::getProviderFriendsList
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
ProviderType providerType = ProviderType::FACEBOOK;
AuthV4::getProviderFriendsList (providerType, [=](ResultAPI const & result, ProviderType providerType, map<string,PlayerID> providerUserIdList) {
if (!result.isSuccess()) {
return;
}
if (providerUserIdList != null) {
for(auto i = providerUserIdList.begin() ; i != providerUserIdList.end(); i++)
{
// providerUserId: ( i->first).c_str()
// playerId: i->second
}
}
});
API 参考: com.hive.AuthV4.getProviderFriendsList
import com.hive.AuthV4
import com.hive.ResultAPI
val providerType = AuthV4.ProviderType.FACEBOOK
AuthV4.getProviderFriendsList(providerType, object : AuthV4.AuthV4ProviderFriendsListener {
override fun onGetProviderFriendsList(result: ResultAPI, providerType: AuthV4.ProviderType, providerUserIdList: Map<String, Long>?) {
if (!result.isSuccess) {
return
}
providerUserIdList?.forEach {
// providerUserId: it.key
// playerId: it.value
}
}
})
API 参考: com.hive.AuthV4.getProviderFriendsList
import com.hive.AuthV4;
import com.hive.ResultAPI;
AuthV4.ProviderType type = AuthV4.ProviderType.FACEBOOK;
AuthV4.INSTANCE.getProviderFriendsList(type, (result, providerType, providerUserIdList) -> {
if (!result.isSuccess()) {
return;
}
if (providerUserIdList != null) {
for (Map.Entry<String, Long> entry : providerUserIdList.entrySet()) {
// providerUserId: entry.getKey();
// playerId: entry.getValue();
}
}
});
API 参考: AuthV4Interface.getProviderFriendsList
import HIVEService
AuthV4Interface.getProviderFriendsList(.Facebook) { result, retProviderType, providerUserIdList in
if !result.isSuccess() {
return
}
如果 let providerUserIdList = providerUserIdList {
for (key in providerUserIdList.keys) {
// providerUserId: key
// playerId: providerUserIdList[key]
}
}
}
API 参考: HIVEAuthV4:getProviderFriendsList
#import <HIVEService/HIVEService-Swift.h>
[HIVEAuthV4 getProviderFriendsList: HIVEProviderTypeFACEBOOK handler: ^(HIVEResultAPI *result, HIVEProviderType retProviderType, NSDictionary<NSString *,NSNumber *> *providerUserIdList) {
if (!result.isSuccess()) {
return;
}
if (providerUserIdList != nil) {
for (NSString *key in providerUserIdList) {
// providerUserId: key
// playerId: [[providerUserIdList objectForKey:key] longlongValue];
}
}
}];
响应 COPPA¶
儿童在线隐私保护法(COPPA)是美国的一项联邦法律,旨在保护13岁以下儿童的在线隐私。为了响应COPPA,Hive 平台发布了 Hive SDK v4.10.0,其中包括 getAgeGateU13()
API,以查询用户是否未满13岁。如果玩家年龄未满13岁,API 将返回 true
。
示例代码¶
API 参考: AuthV4.getAgeGateU13
API 参考: AuthV4 ::getAgeGateU13
API 参考: AuthV4.getAgeGateU13
API 参考: AuthV4.INSTANCE.getAgeGateU13
API 参考: AuthV4Interface.getAgeGateU13
API 参考: HIVEAuthV4 getAgeGateU13
有哪些变化¶
如果 ageGateU13()
返回 true
,则实现以下内容。
- iOS
- 当调用
AuthV4.setup()
或Auth.initialize()
时,推送通知的协议请求弹出窗口未显示。 - 推送 API 未实现。
- 当调用
- Android
- 显示退出弹出窗口时,更多游戏按钮未显示。
- 无法接收远程推送,推送 API 未实现。
检查适用GDPR国家中16岁以下用户的服务条款协议¶
从Hive SDK v4 24.2.0开始,您可以使用Configuration.getAgeGateU16Agree()
方法确定在受GDPR(通用数据保护条例)影响的国家/地区,用户是否同意条款。如果返回值为true
,则表示16岁以下的用户已同意条款;如果为false
,则表示他们未同意。在使用第三方库时,如果您需要根据用户是否在16岁以下来限制应用功能,可以利用Configuration.getAgeGateU16Agree()
方法。
检查法定监护人同意¶
从 Hive SDK v4 24.3.0 开始,如果应用程序使用法定监护人同意确认条款,您可以通过调用 Configuration.getLegalGuardianConsentAgree()
方法来获取应用用户是否已获得法定监护人同意。如果值为 true
,则表示已给予同意。
重新请求操作系统权限¶
游戏所需的访问权限列表在 AndroidManifest.xml 文件中组织。尝试将一些权限作为相关 API 的字符串列表发送并使用它们。您可以检查用户是否选择了特定权限。如果某些危险权限被拒绝,请确保显示请求再次访问操作系统的弹出窗口。其他权限会根据用户设备上的设置自动选择或取消选择。如果您输入错误的权限或错误的单词,系统会将其视为未在 AndroidManifest.xml 文件中声明的权限,并且不允许访问这些权限。
Android 6.0(API级别23)支持此功能。如果操作系统是iOS或Android API级别早于23,则ResultAPI将被发送为不支持。
Note
此功能仅适用于Android。
示例代码¶
API 参考: PlatformHelper .requestUserPermissions
String[] requestArray = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.BLUETOOTH", "android.permission.READ_CONTACTS"};
List<String> requests = new List<String>(requestArray);
PlatformHelper.requestUserPermissions( requests, (ResultAPI result, String[] granted, String[] denied) => {
if (result.code == ResultAPI.Code.PlatformHelperOSNotSupported) {
//仅限Android
}
if (result.code == ResultAPI.Code.PlatformHelperOSVersionNotSupported) {
//不支持的Android操作系统版本。
}
if (granted != null && granted.Length > 0) {
foreach (String name in granted) {
// List of permissions accepted among requests
}
}
if (denied != null && denied.Length > 0) {
foreach (String name denied) {
// List of permissions denied among requests
}
}
});
#include "HivePlatformHelper.h"
TArray<FString> Requests;
Requests.Add(TEXT("android.permission.WRITE_EXTERNAL_STORAGE"));
Requests.Add(TEXT("android.permission.READ_CONTACTS"));
FHivePlatformHelper::RequestUserPermissions(Requests, FHivePlatformHelperOnUserPermissionsDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FString>& GrantedRequests, const TArray<FString>& DeniedRequests) {
switch(Result.Code) {
case FHiveResultAPI::ECode::Success: {
if (GrantedRequests.Num() > 0) {
// List of permissions accepted among requests
}
if (DeniedRequests.Num() > 0) {
// List of permissions denied among requests
}
}
break;
case FHiveResultAPI::ECode::PlatformHelperOSVersionNotSupported:
// Android OS version not supported.
break;
default:
// Other exceptions
break;
}
}));
API 参考: PlatformHelper ::requestUserPermissions
string requestArray[] = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.BLUETOOTH", "android.permission.READ_CONTACTS"};
vector<string> requests(begin(requestArray), end(requestArray));
PlatformHelper::requestUserPermissions(requests, [=](ResultAPI const & result, vector<string> const & granted, vector<string> const & denied) {
if (result.code == hive::ResultAPI::PlatformHelperOSNotSupported) {
//仅限Android
}
if (result.code == hive::ResultAPI::PlatformHelperOSVersionNotSupported) {
//Android 操作系统版本不受支持.
}
if (!granted.empty()) {
for (string name : granted) {
// List of permissions accepted among requests
}
}
if (!denied.empty()) {
for (string name : denied) {
// List of permissions denied among requests
}
}
});
API 参考: PlatformHelper.requestUserPermissions
import com.hive.PlatformHelper
import com.hive.ResultAPI
val requests = arrayListOf(
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.BLUETOOTH",
"android.permission.READ_CONTACTS"
)
PlatformHelper.requestUserPermissions(requests, object : PlatformHelper.RequestUserPermissionsListener {
override fun onRequestUserPermissions(result: ResultAPI, granted: List<String>, denied: List<String>) {
when (result.code) {
ResultAPI.Code.Success -> {
if (granted.isNotEmpty()) {
// List of permissions accepted among requests
}
if (denied.isNotEmpty()) {
// List of permissions denied among requests
}
}
ResultAPI.Code.PlatformHelperOSVersionNotSupported -> {
//Android OS version not supported.
}
else -> {
// other exception situations
}
}
}
})
API 参考: PlatformHelper .INSTANCE.requestUserPermissions
import com.hive.PlatformHelper;
import com.hive.ResultAPI;
List<String> requests = Arrays.asList(
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.BLUETOOTH",
"android.permission.READ_CONTACTS");
PlatformHelper.INSTANCE.requestUserPermissions(requests, (result, granted, denied) -> {
switch (result.getCode()) {
case Success:
if (!granted.isEmpty()) {
// List of permissions accepted among requests
}
if (!denied.isEmpty()) {
// List of permissions denied among requests
}
break;
case PlatformHelperOSVersionNotSupported:
//Android OS version not supported.
break;
default:
// other exception situations
break;
}
});
使用设备管理服务¶
设备管理服务会根据Hive控制台上的设置在登录时自动实现。登录后,游戏会调用AuthV4类的showDeviceManagement()
方法,并向用户显示设备管理列表。
当由于设备认证失败而取消登录时,具有设备管理服务的游戏应处理Result API的AuthV4NotRegisteredDevice
代码,以尝试再次静默登录或执行注销。有关设备管理服务的更多信息,请参阅操作指南:设备管理服务简介。
API 参考: AuthV4.showDeviceManagement
API 参考: AuthV4 ::showDeviceManagement
API 参考: AuthV4.showDeviceManagement
API 参考: HIVEAuthV4 showDeviceManagement
Google Play 游戏成就和排行榜¶
要在 Google Play 游戏中推广您的游戏,您需要实现 Google Play 游戏的成就和排行榜功能。
如果用户通过 IdP 中的 Google 账户登录您的游戏,它会自动登录 Play Games Services(PGS),因此可以使用成就和排行榜。如果用户在 PGS 的设置屏幕中注销,则玩家账户会像点击游戏中的注销按钮时一样注销。有关 PGS 功能的更多信息,请参阅 Google Play Games Services 指南。
Note
在实现AuthV4Helper类的情况下,
-
如果用户在加载游戏时取消了对PGS的隐式登录,系统会记住该状态,并且不会再次尝试隐式登录。即使在玩家会话有效时可以自动登录,系统仍会记住被拒绝的状态。
-
如果用户未在PGS登录,则成就的结果不会发送到PGS。
这些内容符合 Google Play 游戏服务指南。
发送玩家ID¶
如果您需要向 Google Play 游戏请求 PlayerID,请在 ProviderGoogle 类中实现 getGooglePlayerId()
方法。通过实现此方法,它会发送 PlayerID 以及 AuthCode,以验证会话密钥。
以下是示例代码。
API 参考: ProviderGoogle::getGooglePlayerId
// 从 Google Play 游戏请求 playerID。
ProviderGoogle::getGooglePlayerId([=](ResultAPI const &result, std::string const &googlePlayerId, std::string const &authCode) {
if (result.isSuccess())
{
// API 调用成功。
}
});
成就¶
实现ProviderGoogle类,以通过Hive SDK使用Google Play游戏的Achievement功能。
请求揭示一个隐藏成就¶
要向当前登录的玩家揭示隐藏成就,请调用achievementsReveal()
方法。它不会产生任何效果,但会揭示0%的成就。 以下是示例代码。
API 参考: ProviderGoogle.achievementsReveal
import com.hive.ProviderGoogle
import com.hive.ResultAPI
//成就 ID
val achievementId = "abcdef123456"
ProviderGoogle.achievementsReveal(achievementId, object : ProviderGoogle.GoogleAchievementsListener {
override fun onAchievementsResult(resultAPI: ResultAPI) {
if (resultAPI.isSuccess) {
// 调用成功
}
}
})
解锁成就的请求¶
要解锁当前登录玩家的成就,请调用 achievementsUnlock()
方法。此方法将标记 100% 的成就,无论其状态如何;隐藏或不隐藏。 以下是示例代码。
API 参考: ProviderGoogle.achievementsUnlock
import com.hive.ProviderGoogle
import com.hive.ResultAPI
//成就 ID
val achievementId = "abcdef123456"
ProviderGoogle.achievementsUnlock(achievementId, object : ProviderGoogle.GoogleAchievementsListener {
override fun onAchievementsResult(resultAPI: ResultAPI) {
if (resultAPI.isSuccess) {
// 调用成功
}
}
})
请求增加成就¶
要使用请求功能来增加成就,将成就值设置为参数,然后调用achievementsIncrement()
方法。成就值是调用相应API时设置的值的总和,当总和达到最大值时,成就将自动完成。
以下是示例代码。
#include "HiveProviderGoogle.h"
//成就 ID
FString AchievementId = TEXT("abcdef123456");
// 成就数字
int32 Value = 1;
FHiveProviderGoogle::AchievementsIncrement(AchievementId, Value, FHiveProviderGoogleOnAchievementsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// 调用成功
}
}));
API 参考: ProviderGoogle.achievementsIncrement
import com.hive.ProviderGoogle
import com.hive.ResultAPI
//成就 ID
val achievementId = "abcdef123456"
// 成就数量
val value = 1
ProviderGoogle.achievementsIncrement(achievementId, value, object : ProviderGoogle.GoogleAchievementsListener {
override fun onAchievementsResult(resultAPI: ResultAPI) {
if (resultAPI.isSuccess) {
// 调用成功
}
}
})
请求显示成就列表(助手)¶
Note
SDK 4.7.0 提供了 Helper,可以轻松比较用户设备上的登录账户和 PlayerID 同步的账户。如果两个账户不相同,请参考 IdP Sync 页面以处理此情况。
调用showAchievements()
方法请求Google Play游戏的成就列表。
以下是示例代码。
API 参考: AuthV4.Helper.showAchievements
using hive;
AuthV4.Helper.showAchievements ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
switch (result.code) {
case ResultAPI.Code.Success:
// 交付成功并指示成就
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// 账户冲突
break;
case ResultAPI.Code.AuthV4GoogleLogout:
//TODO:
// 从 Google Play 登出后,登出游戏
// 重新启动游戏必须由开发工作室处理
break;
default:
// 其他异常情况
break;
}
});
#include "HiveAuthV4.h"
FHiveAuthV4::Helper::ShowAchievements(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
switch (Result.Code) {
case FHiveResultAPI::ECode::Success:
// 交付成功并指示成就
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// 账户冲突
break;
case FHiveResultAPI::ECode::AuthV4GoogleLogout:
// TODO:
// 从 Google Play 登出后,登出游戏
// 重新启动游戏必须由开发工作室处理
break;
default:
// 其他异常情况
break;
}
}));
API 参考: AuthV4 ::Helper::showAchievements
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
AuthV4::Helper::showAchievements([=](ResultAPI const & result, shared_ptr playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// Deliver Success with achievement indication
break;
case ResultAPI::AuthV4ConflictPlayer:
// account conflict
break;
case ResultAPI::AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
API 参考: AuthV4.Helper.showAchievements
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.Helper.showAchievements(object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
when (result.code) {
ResultAPI.Code.Success -> {
// Deliver Success with achievement indication
}
ResultAPI.Code.AuthV4ConflictPlayer -> {
// account conflict
}
ResultAPI.Code.AuthV4GoogleLogout -> {
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
}
else -> {
// other exception situations
}
}
}
})
API 参考: AuthV4.Helper.INSTANCE.showAchievements
import com.hive.AuthV4;
import com.hive.ResultAPI;
AuthV4.Helper.INSTANCE.showAchievements((result, playerInfo) -> {
switch (result.getCode()) {
case Success:
// 交付成功并指示成就
break;
case AuthV4ConflictPlayer:
// 账户冲突
break;
case AuthV4GoogleLogout:
//TODO:
// 从 Google Play 登出后,登出游戏
// 重新启动游戏必须由开发工作室处理
break;
default:
// 其他异常情况
break;
}
});
Warning
如果用户从 Play 游戏服务的设置屏幕注销,玩家账户将被注销,并作为回调发送名为 ResultAPI.Code.AuthV4GoogleLogout 的错误代码。注销完成后,将显示注销弹出窗口,并显示更改为游戏标题。
请求显示成就列表 (Auth v4)¶
调用showAchievements()
方法请求Google Play游戏的成就列表。
以下是示例代码。
API 参考: ProviderGoogle .showAchievements
using hive;
ProviderGoogle.showAchievements((ResultAPI result) => {
switch (result.code) {
case ResultAPI.Code.Success:
// Deliver Success with achievement indication
break;
case ResultAPI.Code.AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
#include "HiveProviderGoogle.h"
FHiveProviderGoogle::ShowAchievements(FHiveProviderGoogleOnLeaderboardsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
case FHiveResultAPI::ECode::Success:
// 显示成就并传递成功
break;
case FHiveResultAPI::ECode::AuthV4GoogleLogout:
// TODO:
// 在Google Play注销后执行游戏注销
// 游戏重新启动由开发工作室处理
break;
default:
// 其他异常情况
break;
}));
API 参考: ProviderGoogle ::showAchievements
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
ProviderGoogle::showAchievements([=](ResultAPI const & result) {
switch (result.code) {
case ResultAPI::Success:
// Deliver Success with achievement indication
break;
case ResultAPI::AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
API 参考: ProviderGoogle.showAchievements
import com.hive.ProviderGoogle
import com.hive.ResultAPI
ProviderGoogle.showAchievements(object : ProviderGoogle.GoogleAchievementsListener {
override fun onAchievementsResult(resultAPI: ResultAPI) {
when(resultAPI.code) {
ResultAPI.Code.Success -> {
// Deliver Success with achievement indication
}
ResultAPI.Code.AuthV4GoogleLogout -> {
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
}
else -> {
// other exception situations
}
}
}
})
API 参考: ProviderGoogle.INSTANCE.showAchievements
import com.hive.ProviderGoogle;
import com.hive.ResultAPI;
ProviderGoogle.INSTANCE.showAchievements(resultAPI -> {
switch (resultAPI.getCode()) {
case Success:
// Deliver Success with achievement indication
break;
case AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
Warning
如果用户在Play Games Services的设置屏幕上注销,名为ResultAPI.Code.AuthV4GoogleLogout的错误代码将作为回调发送。一旦发送此错误,请确保按照游戏中点击注销按钮时的流程进行编码。
排行榜¶
实现ProviderGoogle类,以通过Hive SDK使用Google Play游戏的Leaderboard功能。
排行榜分数更新¶
调用leaderboardsSubmitScore()
方法请求Google Play游戏的排行榜分数更新。
以下是示例代码。
#include "HiveProviderGoogle.h"
// 排行榜 ID
FString LeaderboardId = TEXT("12345abcde");
// 排行榜分数
int64 Score = 100;
FHiveProviderGoogle::LeaderboardsSubmitScore(LeaderboardId, Score, FHiveProviderGoogleOnLeaderboardsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// API 调用成功
}
}));
API 参考: ProviderGoogle.leaderboardsSubmitScore
import com.hive.ProviderGoogle
import com.hive.ResultAPI
// 排行榜 ID
val leaderboardId = "12345abcde"
// 排行榜得分数
val score = 100L
ProviderGoogle.leaderboardsSubmitScore(leaderboardId, score, object : ProviderGoogle.GoogleLeaderboardsListener {
override fun onLeaderboardsResult(resultAPI: ResultAPI) {
if (resultAPI.isSuccess) {
// API 调用成功
}
}
})
请求显示排行榜列表(助手)¶
调用showLeaderboards()
方法请求Google Play游戏的排行榜列表。
以下是示例代码。
API 参考: hive.AuthV4.Helper.showLeaderboard
using hive;
AuthV4.Helper.showLeaderboard ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
switch (result.code) {
case ResultAPI.Code.Success:
// Deliver Success with leaderboard display
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// account conflict
break;
case ResultAPI.CodeAuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
#include "HiveAuthV4.h"
FHiveAuthV4::Helper::ShowLeaderboard(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
case FHiveResultAPI::ECode::Success:
// 交付成功并显示排行榜
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// 账户冲突
break;
case FHiveResultAPI::ECode::AuthV4GoogleLogout:
// TODO:
// 从 Google Play 登出后,必须从游戏中登出
// 重新启动游戏必须由开发工作室处理
break;
default:
// 其他异常情况
break;
}));
API 参考: com.hive.AuthV4.Helper.showLeaderboard
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
AuthV4::Helper::showLeaderboard([=](ResultAPI const & result, shared_ptr playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// Deliver Success with leaderboard display
break;
case ResultAPI::AuthV4ConflictPlayer:
// account conflict
break;
case ResultAPI::AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
break;
}
});
API 参考: Helper.showLeaderboard
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.Helper.showLeaderboard(object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
when (result.code) {
ResultAPI.Code.Success -> {
// Deliver Success with leaderboard display
}
ResultAPI.Code.AuthV4ConflictPlayer -> {
// 账户冲突
}
ResultAPI.Code.AuthV4GoogleLogout -> {
//TODO:
// 从 Google Play 登出后,登出游戏
// 重新启动游戏必须由开发工作室处理
}
else -> {
// 其他异常情况
}
}
}
})
API 参考: AuthV4.Helper.INSTANCE.showLeaderboard
import com.hive.AuthV4;
import com.hive.ResultAPI;
AuthV4.Helper.INSTANCE.showLeaderboard((result, playerInfo) -> {
switch (result.getCode()) {
case Success:
// Deliver Success with leaderboard display
break;
case AuthV4ConflictPlayer:
// account conflict
break;
case AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
Warning
如果用户从Play Games Services的设置屏幕注销,玩家账户将被注销,并作为回调发送名为ResultAPI.Code.AuthV4GoogleLogout的错误代码。注销完成后,将显示注销弹出窗口,并且显示更改为游戏标题。
请求显示排行榜列表 (Auth v4)¶
调用showLeaderboards()
方法请求Google Play游戏的排行榜列表。
以下是示例代码。
API 参考: hive.ProviderGoogle.showLeaderboards
using hive;
ProviderGoogle.showLeaderboards(onLeaderboardsResult, (ResultAPI result) => {
switch (result.code) {
case ResultAPI.Code.Success:
// Deliver Success with leaderboard display
break;
case ResultAPI.CodeAuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
#include "HiveProviderGoogle.h"
FHiveProviderGoogle::ShowLeaderboard(FHiveProviderGoogleOnLeaderboardsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
case FHiveResultAPI::ECode::Success:
// Deliver Success with leaderboard display
break;
case FHiveResultAPI::ECode::AuthV4GoogleLogout:
// TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}));
API 参考: ProviderGoogle::showLeaderboards
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
ProviderGoogle::showLeaderboard([=](ResultAPI const & result) {
switch (result.code) {
case ResultAPI::Success:
// Deliver Success with leaderboard display
break;
case ResultAPI::AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
API 参考: ProviderGoogle.showLeaderboards
import com.hive.ProviderGoogle
import com.hive.ResultAPI
ProviderGoogle.showLeaderboards(object : ProviderGoogle.GoogleLeaderboardsListener {
override fun onLeaderboardsResult(resultAPI: ResultAPI) {
when(resultAPI.code) {
ResultAPI.Code.Success -> {
// Deliver Success with leaderboard display
}
ResultAPI.Code.AuthV4GoogleLogout -> {
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
}
else -> {
// other exception situations
}
}
}
})
API 参考: com.hive.ProviderGoogle.showLeaderboards
import com.hive.ProviderGoogle;
import com.hive.ResultAPI;
ProviderGoogle.INSTANCE.showLeaderboards(resultAPI -> {
switch (resultAPI.getCode()) {
case Success:
// Deliver Success with leaderboard display
break;
case AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
Warning
如果用户在Play Games Services的设置屏幕上注销,名为ResultAPI.Code.AuthV4GoogleLogout的错误代码将作为回调发送。一旦发送此错误,请确保代码与游戏中点击注销按钮时的处理相同。
苹果游戏中心游戏成就和排行榜¶
要在 Apple Game Center 上展示您的游戏,您需要申请 Apple Game Center 的成就和排行榜功能。
无论用户的认证状态如何,Apple Game Center 的两个功能是由 Hive SDK 提供的。也就是说,成就和排行榜使用 Apple Game Center 账户,但成就和排行榜使用 Apple Game Center 账户,但此账户可能未链接到 Hive 账户,或与玩家当前登录的 Hive 账户不同。
有关 Apple Game Center 功能的更多信息,请参阅 Apple Game Center Guide。
Note
iOS 企业版不支持 Apple Game Center。
成就¶
实现**ProviderApple**类,以通过Hive SDK使用Apple Game Center的成就功能。
请求成就列表¶
要加载成就列表,请调用loadAchievements()
方法。
以下是示例代码。
API 参考: hive.ProviderApple.loadAchievements
// 请求成就列表到提供者 Apple
// 使用 hive
// 回调处理程序管理对Provider Apple的成就列表请求
public void onLoadAchievements(ResultAPI result, List achievementList) {
Logger.log("ProviderTestView.onLoadAchievements() 回调\nresult = " + result.toString() + "\n");
if (result.isSuccess() != true)
return;
}
// 请求成就列表到提供者 Apple
ProviderApple.loadAchievements(onLoadAchievements);
API 参考: ProviderApple::loadAchievements
请求报告成就¶
要报告成就,请调用 reportAchievement()
方法,并将参数设置为 成就率 和 成功成就的通知横幅曝光。
以下是示例代码。
API 参考: hive .ProviderApple.reportAchievement
using hive;
//成就达成 %. 成就完成于 100
String achievementPercent = "100";
// 成就成功时是否显示顶部横幅。默认值为 false
Boolean isShow = true;
// 成就 ID
String achievementId = "com.hivesdk.achievement.10hit";
ProviderApple.reportAchievement(achievementPercent, isShow, achievementId, (ResultAPI result) => {
if (result.isSuccess()) {
// call successful
}
});
#include "HiveProviderApple.h"
//成就已达成 %. 成就完成于 100
FString Percent = TEXT("100");
// 成就成功时是否显示顶部横幅。默认值为 false
bool bIsShow = true;
// 成就 ID
FString AchievementId = TEXT("com.hivesdk.achievement.10hit");
FHiveProviderApple::ReportAchievement(Percent, bIsShow, AchievementId, FHiveProviderAppleOnReportAchievement::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// API 调用成功
}
}));
API 参考: ProviderApple ::reportAchievement
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
//成就达成 %. 成就完成于 100
string achievementPercent = "100";
// 成就成功时是否显示顶部横幅。 默认 false
bool isShow = true;
//成就 ID
string achievementId = "com.hivesdk.achievement.10hit";
ProviderApple::reportAchievement(achievementPercent, isShow, achievementId, [=](ResultAPI const & result) {
if (result.isSuccess()) {
// call successful
}
});
API 参考: ProviderApple.reportAchievement
import HIVEService
//成就达成 %. 成就完成于 100
let achievementPercent = "100"
// 成就成功时是否显示顶部横幅。 默认值为 false
let isShow = true
// 成就 ID
let achievementId = "com.hivesdk.achievement.10hit"
ProviderApple.reportAchievement(achievementPercent, showsCompletionBanner: isShow, achievementIdentifier: achievementId) { result in
if result.isSuccess() {
// call successful
}
}
API 参考: HIVEProviderApple reportAchievement
#import <HIVEService/HIVEService-Swift.h>
//成就达到 %. 当达到100时完成成就
NSString *achievementPercent = @"100";
// 成就成功时是否显示顶部横幅。 默认NO
BOOL isShow = YES;
//成就ID
NSString *achievementId = @"com.hivesdk.achievement.10hit";
[HIVEProviderApple reportAchievement: achievementPercent showsCompletionBanner: isShow achievementIdentifier: achievementId handler: ^(HIVEResultAPI *result) {
if ([result isSuccess]) {
// call successful
}
}];
请求显示成就 UI (助手)¶
Note
SDK 4.7.0 提供了 Helper,它可以轻松比较用户设备上的已登录账户和 PlayerID 同步的账户。如果两个账户不相同,请参考 IdP Sync 页面来处理这种情况。
要显示成就 UI,请调用 showAchievements()
方法。
以下是示例代码。
API 参考: hive.AuthV4.Helper.showAchievements
using hive;
AuthV4.Helper.showAchievements ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
switch (result.code) {
case ResultAPI.Code.Success:
// Deliver Success with achievement indication
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// account conflict
break;
case ResultAPI.Code.AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
#include "HiveAuthV4.h"
FHiveAuthV4::Helper::ShowAchievements(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
switch (Result.Code) {
case FHiveResultAPI::ECode::Success:
// Deliver Success with achievement indication
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// account conflict
break;
default:
// other exception situations
break;
}
}));
API 参考: AuthV4 ::Helper::showAchievements
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
AuthV4::Helper::showAchievements([=](ResultAPI const & result, shared_ptr playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// Deliver Success with achievement indication
break;
case ResultAPI::AuthV4ConflictPlayer:
// account conflict
break;
case ResultAPI::AuthV4GoogleLogout:
//TODO:
// After logging out of Google Play, log out of the game
// Relaunching the game must be handled by the development studio
break;
default:
// other exception situations
break;
}
});
API 参考: [ HIVEAuthV4 helper] showAchievements
// 如果当前登录的 Hive 账户未连接到 GameCenter
// 自动尝试连接到 GameCenter
#import <HIVEService/HIVEService-Swift.h>
[[HIVEAuthV4 helper] showAchievements: ^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
switch ([result getCode]) {
case HIVEResultAPICodeSuccess:
// Deliver Success with achievement indication
break;
case HIVEResultAPICodeAuthV4ConflictPlayer:
// account conflict
break;
default:
// other exception situations
break;
}
}];
请求显示成就界面¶
要显示成就 UI,请调用 showAchievements()
方法。
以下是示例代码。
API 参考: ProviderApple.showAchievements
API 参考: ProviderApple::showAchievements
API 参考: ProviderApple.showAchievements
请求重置成就¶
要重置成就,请实现 resetAchievements()
方法。
以下是示例代码。
排行榜¶
实现**ProviderApple**类,以通过Hive SDK使用Apple Game Center的**Leaderboard**功能。
请求报告排行榜分数¶
要将排行榜分数报告给 Apple Game Center,请调用 reportScore()
方法。
以下是示例代码。
API 参考: hive .ProviderApple.reportScore
#include "HiveProviderApple.h"
FString PlayerScore = TEXT("1234");
FString LeaderBoardId = TEXT("com.hivesdk.leaderboard.10hit");
FHiveProviderApple::ReportScore(PlayerScore, LeaderBoardId, FHiveProviderAppleOnReportLeaderboard::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// API调用成功
}
}));
API 参考: ProviderApple ::reportScore
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
string playerScore = "1234";
string leaderBoardId = "com.hivesdk.leaderboard.10hit";
ProviderApple::reportScore(playerScore, leaderBoardId, [=](ResultAPI const & result) {
if (result.isSuccess()) {
// call successful
}
});
API 参考: HIVEProviderApple ::reportScore:leaderboardIdentifier:handler:
#import <HIVEService/HIVEService-Swift.h>
NSString *playerScore = @"1234";
NSString *leaderBoardId = "com.hivesdk.leaderboard.10hit";
[HIVEProviderApple reportScore: playerScore leaderboardIdentifier: leaderBoardId handler: ^(HIVEResultAPI *result) {
if ([result isSuccess]) {
// call successful
}
}];
请求显示排行榜用户界面 (助手)¶
要显示排行榜用户界面,请调用showLeaderboard()
方法。
以下是示例代码。
API 参考: hive .AuthV4.Helper.showLeaderboard
// 如果当前登录的 Hive 账户未连接到 GameCenter
// 自动尝试连接到 GameCenter
使用蜂巢;
AuthV4.Helper.showLeaderboard((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
switch (result.code) {
case ResultAPI.Code.Success:
// Deliver Success with leaderboard display
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// account conflict
break;
default:
// other exception situations
break;
}
});
API 参考: AuthV4 ::Helper::showLeaderboard
// 如果当前登录的 Hive 账户未连接到 GameCenter
// 自动尝试连接到 GameCenter
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
AuthV4::Helper::showLeaderboard([=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// Deliver Success with leaderboard display
break;
case ResultAPI::AuthV4ConflictPlayer:
// account conflict
break;
default:
break;
}
});
API 参考: showLeaderboard
API 参考: HIVEProviderApple ::showLeaderboard:
// 如果当前登录的 Hive 账户未连接到 GameCenter
// 自动尝试连接到 GameCenter
#import <HIVEService/HIVEService-Swift.h>
[[HIVEAuthV4 helper] showLeaderboard: ^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
switch ([result getCode]) {
case HIVEResultAPICodeSuccess:
// Deliver Success with leaderboard display
break;
case HIVEResultAPICodeAuthV4ConflictPlayer:
// account conflict
break;
default:
// other exception situations
break;
}
}];
请求显示排行榜用户界面¶
要显示排行榜用户界面,请调用showLeaderboard()
方法。
以下是示例代码。
在社交媒体上发布照片¶
用户可以通过游戏从设备的图库导入照片,在Facebook上分享和发布照片。以下是示例代码:
API 参考: SocialV4. sharePhoto
API 参考: SocialV4::sharePhoto
API 参考: SocialV4.sharePhoto
API 参考: SocialV4.INSTANCE. sharePhoto
API 参考: SocialV4Interface.sharePhoto
API 参考: HIVESocialV4 sharePhoto
使用社区登录自动登录PC游戏¶
当您在社区网站上点击“在PC上播放”按钮时,PC游戏将通过Crossplay Launcher启动。
此时,PC游戏正在使用社区的“登录令牌值”自动登录。
Warning
自动登录到 PC 游戏的社区登录 功能仅在 Windows 版本的 Hive SDK v4 24.0.0 及更高版本上有效。
Steam隐式登录 (Unity Windows)¶
从 Hive SDK v4 Unity Windows 24.2.0 开始,支持 Steam 隐式登录。如果您选择使用隐式登录,您必须使用 AuthV4.Helper.signIn
,而不能使用 AuthV4.signIn(AUTO,...)
。由于这是隐式登录,应用用户在安装游戏后只需登录 Steam 一次。在使用 Steam 隐式登录时,您必须在应用删除时实现删除存储 SDK 配置数据的 propFolder
文件夹。