附加组件
帶入 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;
}
如果 (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(一般數據保護條例)影響的國家中,是否有 16 歲以下的用戶同意條款。如果返回的值為 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 OS version not supported.
}
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 only
}
if (result.code == hive::ResultAPI::PlatformHelperOSVersionNotSupported) {
//Android OS版本不支持。
}
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 遊戲服務指南。
發送 playerID¶
如果您需要向 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()) {
// call successful
}
}));
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 call successful
}
}));
API 參考: ProviderGoogle::leaderboardsSubmitScore
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// 排行榜 ID
string leaderboardId = "12345abcde";
// 排行榜分數
long score = 100;
ProviderGoogle::leaderboardsSubmitScore(leaderboardId, score, [=](ResultAPI const & result) {
if (result.isSuccess()) {
// API call successful
}
});
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:
// Deliver Success with leaderboard display
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// account conflict
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:
// 其他例外情況
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:
// 帳戶衝突
break;
case ResultAPI::AuthV4GoogleLogout:
//TODO:
// 登出 Google Play 後,登出遊戲
// 重新啟動遊戲必須由開發工作室處理
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游戏服务的设置屏幕注销,将作为回调发送名为ResultAPI.Code.AuthV4GoogleLogout的错误代码。一旦发送此错误,请确保按照游戏中点击注销按钮时的流程进行编码。
蘋果遊戲中心遊戲成就和排行榜¶
要在 Apple Game Center 上展示您的遊戲,您需要應用 Apple Game Center 的成就和排行榜功能。
無論用戶的身份驗證狀態如何,Apple Game Center 的兩個功能是由 Hive SDK 提供的。也就是說,成就和排行榜使用 Apple Game Center 帳戶,但成就和排行榜使用 Apple Game Center 帳戶,但該帳戶可能未與 Hive 帳戶鏈接或與玩家當前登錄的 Hive 帳戶不同。
有關 Apple 遊戲中心功能的更多信息,請參閱 Apple 遊戲中心指南。
Note
iOS 企業版不支援 Apple Game Center。
成就¶
實現 ProviderApple 類以通過 Hive SDK 使用 Apple Game Center 的成就功能。
請求成就列表¶
要加載成就列表,請調用loadAchievements()
方法。
以下是示例代码。
API 參考: hive.ProviderApple.loadAchievements
// Request achievement list to Provider Apple
// using hive
// 回调处理程序管理对提供者 Apple 的成就列表请求
public void onLoadAchievements(ResultAPI result, List achievementList) {
Logger.log("ProviderTestView.onLoadAchievements() Callback\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 call successful
}
}));
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
letachievementPercent = "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¶
要顯示成就 UI,請呼叫 showAchievements()
方法。
以下是示例代码。
API 參考: ProviderApple.showAchievements
API 參考: ProviderApple::showAchievements
API 參考: ProviderApple.showAchievements
重置成就的請求¶
要重置成就,请实现 resetAchievements()
方法。
以下是示例代码。
排行榜¶
實作 ProviderApple 類別以透過 Hive SDK 使用 Leaderboard 功能的 Apple 遊戲中心。
請求報告排行榜分數¶
要將排行榜分數報告給 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 call successful
}
}));
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
}
}];
請求顯示排行榜 UI (助手)¶
要顯示排行榜 UI,請調用 showLeaderboard()
方法。
以下是示例代码。
API 參考: hive .AuthV4.Helper.showLeaderboard
// 如果當前登錄的 Hive 帳戶未連接到 GameCenter
// 自動嘗試連接到 GameCenter
使用 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;
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;
}
}];
請求顯示排行榜 UI¶
要顯示排行榜 UI,請調用 showLeaderboard()
方法。
以下是範例代碼。
在社交媒體上分享照片¶
用戶可以通過遊戲從設備的相冊導入照片,在 Facebook 上分享和發佈照片。以下是示例代碼:
API 參考: SocialV4. sharePhoto
API 參考: SocialV4::sharePhoto
API 參考: SocialV4.sharePhoto
API 參考: SocialV4.INSTANCE. sharePhoto
API 參考: SocialV4Interface.sharePhoto
API 參考: HIVESocialV4 sharePhoto
使用社群登入自動登入PC遊戲¶
當你在社區網站上點擊「在電腦上播放」按鈕時,PC 遊戲將通過 Crossplay Launcher 啟動。
此時,PC遊戲正使用社區的「登錄令牌值」自動登錄。
Warning
**自動登入至PC遊戲的社群登入**功能僅適用於Hive SDK v4 24.0.0及以上版本的Windows版本。
Steam 隱式登入 (Unity Windows)¶
從 Hive SDK v4 Unity Windows 24.2.0 開始,Steam 隱式登錄已支持。如果您選擇使用隱式登錄,您必須使用 AuthV4.Helper.signIn
,並且不能使用 AuthV4.signIn(AUTO,...)
。由於這是隱式登錄,應用用戶在安裝遊戲後只需登錄一次 Steam。在使用 Steam 隱式登錄時,您必須在應用刪除時實現刪除存儲 SDK 配置數據的 propFolder
文件夾。