跳轉至

如何初始化 Hive SDK

要在遊戲中使用 Hive SDK 函數,您必須初始化 Hive SDK。初始化後,服務條款以及在 Hive 控制台上註冊的更新和通知彈出窗口將自動顯示。

Warning

在初始化 Hive SDK 之前,别忘了设置 hive_config.xml 文件。

初始化如何運作

當 Hive SDK 被初始化時,它執行以下功能:

  • Hive SDK 使用一個初始化函數初始化以下項目。
    • 身份驗證: 初始化 Hive 客戶端並驗證用戶 IdP
    • 促銷: 進行廣告並發放優惠券
    • 通知: 管理並設置推送消息給用戶
    • 市場歸因: 支持第三方模塊的全面管理,追蹤用戶數據,例如通過廣告和事件分析的玩家數量
  • Hive SDK 不會直接通知應用訪問權限。欲了解更多信息,請查看 [常見問題解答]。
  • 顯示為相關遊戲設置的更新和通知彈出窗口。對於 Google Play 商店,支持 應用內更新。有關註冊更新彈出窗口的更多詳細信息,請參見 Hive 控制台指南
  • 檢查用戶 IP 並按國家顯示服務條款。

應用內更新

應用內更新 是在不終止應用的情況下,根據更新彈出配置在背景中更新應用的功能。應用內更新可以在以下條件下使用。

  • 只支援 Google Play 商店。
  • 僅支援 Android 手機、Android 平板電腦和 ChromeOS 設備。
  • 支援兩種應用程式檔案格式:AAB(Android 應用程式包)和 APK。然而,不支援 APK 擴展檔案(.obb 檔案)。
  • 對於 AAB,支援最大 200MB,對於 APK,支援最大 150MB 的大小。

Hive 初始化圖

Note

當顯示使用條款彈出視窗並且完成使用條款協議時,iOS 上的應用程式追蹤透明度彈出視窗將會顯示。

註冊 Hive 認證金鑰

使用配置类 API,在 Hive 初始化之前,注册在 Hive 控制台页面上发出的 Hive 认证密钥。相应的 API 从 4.15.0 版本或更高版本提供。

API 參考: Unity®

using hive;    
    String hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc";    
Configuration.setHiveCertificationKey(hiveCertKey);
include "HiveConfiguration.h"

    FString hiveCertKey = TEXT("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc");
    FHiveConfiguration::SetHiveCertificationKey(hiveCertKey);

API 參考: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    string hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc";    
Configuration::setHiveCertificationKey(hiveCertKey);

API 參考: Kotlin

import com.hive.Configuration    
    val hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"    
Configuration.hiveCertificationKey = hiveCertKey

API 參考: Java

import com.hive.Configuration;    
    String hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc";    
Configuration.INSTANCE.setHiveCertificationKey(hiveCertkey);

API 參考: Swift

import HIVEService    
    let hiveCertKey = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc"    
ConfigurationInterface.setHiveCertificationKey(hiveCertKey)

API 參考: Objective-C

#import <HIVEService/HIVEService-Swift.h>    
    NSString *hiveCertKey = @"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.OxWo4R6UdI0BLP1ckt8RlMFrPAb5H7TNedmLFV1Cawc";    
[HIVEConfiguration setHiveCertificationKey: hiveCertKey];

实现初始化

要初始化 Hive SDK,请在 AuthV4 类中实现 setup() 方法。以下数据作为结果提供,因此您可以将数据保存在游戏中,并在需要时加以利用。

  • Hive 初始化的結果數據
字段名称 描述 示例
isAutoSignIn 是否可用自动登录 true
did did 是在应用安装中创建的应用实例的标识符。用于识别同一应用的应用实例。 123456789
providerTypeList 当前应用可用的 IdP 列表
这是必需的 字段,用于自定义显式登录或组合 IdP 同步状态的信息。
ProviderType.FACEBOOK ProviderType.HIVE

以下是實現setup()方法的示例代碼。

API 參考: AuthV4::setup

// Request Hive SDK Initialization
AuthV4::setup([=](ResultAPI const & result, bool isAutoSignIn, std::string did, std::vector<ProviderType> const & providerTypeList) {

    if (result.isSuccess()) {
        // 初始化成功。根据是否启用自动登录处理登录。
    } else if (result.needExit()) {
        // TODO: 实现应用程序的终止
        // Cocos2d-x 引擎的用户
        // 例如) exit(0);
        // Unreal 引擎用户
        // 示例) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);    
    } else {
        // 初始化失败 } 
            });
#include "HiveAuthV4.h"

    FHiveAuthV4::Setup(FHiveAuthV4OnSetupDelegate::CreateLambda([this](const FHiveResultAPI& Result,
    bool IsAutoSignIn,
    const FString& Did,
    const TArray<EHiveProviderType>& ProviderTypeArray) 
    {
            if (Result.IsSuccess()) {
                     // 初始化成功。根据是否启用自动登录处理登录。
            } else if (Result.NeedExit()) {
                     // TODO: 实现应用程序的终止
        // Cocos2d-x 引擎的用户
        // 例如) exit(0);
                    // 初始化失败 } 
            }
    }));

API 參考: com.hive.AuthV4.setup

1
2
3
4
5
6
7
8
9
// Request Hive SDK Initialization    
    AuthV4.setup(object: AuthV4.AuthV4SetupListener{    
        override fun onAuthV4Setup(result: ResultAPI, isAutoSignIn: Boolean, did: String?, providerTypeList: ArrayList<AuthV4.ProviderType>?) {        if (result.isSuccess) {    
                // the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.    
            } else if (result.needExit()) {    
                // TODO: Implement the termination of the app    
                // ex) exitProcess(0)    
            } else {    
            // initialization failed } } })

API 參考: com.hive.AuthV4.setup

// 請求 Hive SDK 初始化    
    AuthV4.setup(new AuthV4.AuthV4SetupListener() {    
        @Override    
        public void onAuthV4Setup(ResultAPI result, boolean isAutoSignIn, String did, ArrayList<AuthV4.ProviderType> providerTypeList) {    

                if (result.isSuccess()) {    
                // 初始化成功。根据是否启用自动登录处理登录。    
            } else if (result.needExit()) {    
                // TODO: 实现应用程序的终止    
                // 例如) System.exit(0);    
            } else {    
            // 初始化失败 } } });

API 參考: HIVEAuthV4:setup

AuthV4Interface.setup { (result, isAutoSignIn, did, providerTypeList) in    
        if result.isSuccess() {    
            // the initialization is successfully done. Handle login based on whether the auto-login is enabled or not.    
        } else if result.needExit() {    
            // TODO: Implement the termination of the app    
            // Example) exit(0)    
        } else {    
            // initialization failed    
        }    
}

API 參考: HIVEAuthV4:setup

1
2
3
4
5
6
7
8
9
// 請求 Hive SDK 初始化    
    [HIVEAuthV4 setup:^(HIVEResultAPI *result, BOOL isAutoSignIn, NSString *did, NSArray<NSNumber *> *providerTypeList) {    
        if (result.isSuccess) {    
            // 初始化成功。根據自動登錄是否啟用處理登錄。    
        } else if (result.needExit) {    
            // TODO: 實現應用程序的終止    
            // ex) exit(0);    
        } else {    
        // 初始化失敗 } }];
Note

當遊戲服務終止時,如果執行setup方法,將返回錯誤。

伺服器維護彈出窗口

對於遊戲服務,有必要在遊戲客戶端更新後阻止該版本,或者在遊戲伺服器維護期間阻止遊戲連接。Hive 提供了根據在 Hive 控制台中配置的信息,以強制遊戲更新、通知/伺服器維護的順序顯示彈出窗口的功能。在遊戲中,您可以使用 Hive SDK 提供的 UI,或者通過接收來自 Hive 的信息來實現自定義 UI。

強制遊戲更新 阻止使用特定版本的遊戲並提供更新連結
伺服器維護 可根據遊戲伺服器設置維護狀態,並建議在伺服器維護期間提供官方社群連結
通知 用於向所有用戶公開重要通知或更新資訊,而不是強制性地
Note
  • 更新/維護彈出窗口是初始化步驟的一部分。伺服器維護彈出窗口應該在伺服器選擇的步驟中顯示,無論是自動還是手動選擇,因此請確保實現維護彈出窗口以適當顯示。

  • 如果用户在连接到游戏服务器之前可以等待而不启动游戏,即使您已经设置了服务器维护弹出窗口,您也无法在此时阻止用户的连接。为此,应该在游戏可以强制终止用户连接的时间显示服务器维护弹出窗口。

如果遊戲伺服器超過一個,則用戶選擇或設置的遊戲伺服器信息必須設置在 Hive 中。如果用戶需要選擇遊戲伺服器,請實現伺服器選擇 UI,以通過在顯示各種類型的彈出窗口之前調用 Configuration 類的 setServerId() 方法來更改 Hive 設置。如果您想在更改 Hive 設置的同時更新促銷新聞數據,請調用 Configuration 類的 updateServerId() 方法,而不是 setServerId() 方法。

在遊戲伺服器設置完成後,您可以隨時顯示彈出窗口。如果您在 Hive 控制台上設置彈出窗口,則在維護期間將阻止遊戲訪問。顯示彈出窗口可以使用 Hive SDK 提供的 UI,或根據 Hive 的信息進行自定義。伺服器維護彈出窗口/更新彈出窗口/通知彈出窗口可以為每個遊戲伺服器設置。

設定彈出內容

設定 Hive 控制台上的伺服器維護彈出/更新彈出/通知彈出的詳細資訊。 有關設置的更多信息,請參見 操作 > 配置指南

顯示彈出窗口

Hive SDK 顯示維護彈出窗口/更新彈出窗口/通知彈出窗口,或返回彈出消息的信息以自定義彈出窗口。如果 Hive 顯示它,則彈出窗口將以 Hive 的 UI 風格出現,但如果您想自己處理,則可以以您想要的任何風格顯示彈出窗口。根據您是否使用 Hive 彈出窗口,請在 AuthV4 類中調用 checkMaintenance() 方法,並設置如下所示的參數。

  • 使用 Hive 提供的彈出視窗: 將 isShow 參數設置為 true
  • 請求彈出視窗數據以自定義彈出視窗: 將 isShow 參數設置為 false。有關彈出視窗數據的更多信息,請參見下面的 Hive 返回的彈出數據

  • 彈出視窗的範例畫面

以下是一段示例代码,用于显示一个服务器维护弹出窗口,界面由Hive提供。如果用户在服务器维护尚未完成时关闭此弹出窗口,将触发退出事件并转发到ResultAPI result

API 參考: Unity®

using hive;    
    // Whether to use Hive SDK UI    
    Boolean isShow = true;    

    AuthV4.checkMaintenance(isShow, (ResultAPI result, List maintenanceInfoList) => {    
        if (result.isSuccess()) {    
            // 如果沒有檢查數據    
            // 如果 isShow 為 false    
        }    
        else if (result.needExit()) {    
            // TODO: 實現應用程序終止功能    
            // 例) Application.Quit();    
        }    
});
#include "HiveAuthV4.h"

// 是否使用 Hive SDK UI  
bool bIsShow = true;

FHiveAuthV4::CheckMaintenance(bIsShow, FHiveAuthV4OnMaintenanceInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveAuthV4MaintenanceInfo>& AuthV4MaintenanceInfoArray) {

        if (Result.IsSuccess()) {
                // 如果沒有檢查數據    
      // 如果 isShow 為 false
        } else if (Result.NeedExit()) {
                // TODO: 實現應用程序終止功能    
      // 例) Application.Quit(); 
        }

}));

API 參考: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // Whether to use Hive SDK UI    
    bool isShow = true;    

    AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result, vector const & maintenanceInfolist){    
        if (result.isSuccess()) {    
            // 如果沒有註冊的檢查數據    
            // 如果 isShow 為 false    
        }    
        else if (reuslt.needExit()) {    
            // TODO: 實現應用程序終止功能    
            // Cocos2d-x 引擎用戶    
            // 例) exit(0);    
            // Unreal Engine 用戶    
            // 例) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);    
        }    
});

API 參考: Kotlin

import com.hive.AuthV4    
import com.hive.AuthV4    
    import com.hive.ResultAPI    
    // 是否使用 Hive SDK UI    
    val isShow = true    
    AuthV4.checkMaintenance(isShow, object : AuthV4.AuthV4MaintenanceListener {    
        override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList<AuthV4.AuthV4MaintenanceInfo>?) {    
            if (result.isSuccess) {    
                // 如果沒有註冊的檢查數據    
                // 如果 isShow 為 false    
            }    
            else if (result.needExit()) {    
                // TODO: 實現應用程序終止功能    
                // 例如) exitProcess(0)    
            }    
        }    
})

API 參考: Java

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    // 是否使用 Hive SDK UI    
    boolean isShow = true;    
    AuthV4.INSTANCE.checkMaintenance(isShow, (result, maintenanceInfo) -> {    
        if (result.isSuccess()) {    
            // 如果沒有註冊的檢查數據    
            // 如果 isShow 為 false    
        }    
        else if (result.needExit()) {    
            // TODO: 實現應用程序終止功能    
            // 例如) System.exit(0);    
        }    
});

API 參考: Swift

import HIVEService    
    // Whether to use Hive SDK UI    
    let isShow = true    

    AuthV4Interface.checkMaintenance(isShow) { result, maintenances in    
        if result.isSuccess() {    
            // 如果沒有實際的檢查數據    
            // 如果 isShow 為 false    
        }    
        else if result.needExit() {    
            // TODO: 實現應用程序終止功能    
            // 例如) exit(0)    
        }    
}

API 參考: Objective-C

#import <HIVEService/HIVEService-Swift.h>    
    // 是否使用 Hive SDK UI    
    BOOL isShow = YES;    

    [HIVEAuthV4 checkMaintenance:isShow handler: ^(HIVEResultAPI *result, NSArray<HIVEAuthV4MaintenanceInfo *> *maintenanceInfolist) {    
        if (result.isSuccess) {    
            // 如果沒有註冊的檢查數據    
            // 如果 isShow 為 false    
        }    
        else if (result.needExit) {    
            // TODO: 實現應用程序終止功能    
            // 例) exit(0);    
        }    
}];
Note

在檢查伺服器維護彈出視窗和點擊查看詳細資訊按鈕的時候,iOS 和 Android 會發送一個回調請求,要求遊戲方關閉應用程式。當您收到請求終止應用程式的回調時,請終止應用程式。當用戶點擊關閉 (X) 按鈕時,只有彈出視窗會關閉,而請求終止應用程式的回調不會被發送。

彈出數據由 Hive 返回

如果 Hive 通过 checkMaintenance() 方法接收到在 Hive 控制台中设置的弹出信息请求,它将返回 AuthV4MaintenanceInfo 对象中总结的以下表格中的值,如果该值返回为 null,则没有内容可以弹出。

  • AuthV4MaintenanceInfo 物件的詳細資訊
字段名稱 描述 類型
title 彈出窗口標題 字串
message 彈出窗口內容 字串
button 彈出窗口按鈕的標籤文本 字串
action 當用戶點擊彈出窗口按鈕時的動作類型
+ OPEN_URL: 執行外部瀏覽器傳遞的URL
+ EXIT: 結束應用程序
+ DONE: 只是關閉維護彈出窗口
AuthV4MaintenanceActionType的枚舉類型
url 外部瀏覽器顯示的URL。當action字段的值為OPEN_URL時有效 字串
remainingTime 直到維護完成的剩餘時間(單位:秒)。時間實時刷新,當變為零時,應用程序終止。 整數
startDate 維護的開始日期 字串
endDate 維護的結束日期 字串
customerButton 客戶中心的按鈕文本(維護彈出窗口發送"") 字串
customerLink 客戶中心的按鈕鏈接(維護彈出窗口發送"") 字串
exButtons 彈出窗口按鈕信息(最多提供3個項目) JSONArray
exButtons.action 當彈出窗口按鈕被點擊時的動作
+ OPEN_URL: 執行外部瀏覽器傳遞的URL
+ EXIT: 結束應用程序
+ DONE: 只是關閉維護彈出窗口
AuthV4MaintenanceActionType的枚舉類型
exButtons.button 彈出窗口按鈕的標籤文本 字串
exButtons.url 傳遞給外部瀏覽器的URL。
action
只有在字段值為OPEN_URL時可用
字串

Hive 網頁視圖

服務條款

在初始化時,Hive SDK 會根據用戶的訪問 IP 和遊戲開發公司自動確定的國家,顯示適當的服務條款(“條款”)。即便如此,遊戲應該為所有用戶提供服務條款和隱私政策的鏈接,而不論是否同意服務條款和隱私政策。如果您使用 Hive 提供的鏈接,則根據 Hive 控制台上的設置,自動選擇適當的條款和政策向用戶顯示。顯示服務條款和政策鏈接的規定因遊戲開發公司而異。

  • 範例條款螢幕

要在点击按钮或链接时显示服务条款,请调用 AuthV4 类的 showTerms() 方法。以下是示例代码。

API 參考: Unity®

using hive;    
    AuthV4.showTerms((ResultAPI result) => {    
        if (result.isSuccess()) {    
            // API call success    
        }    
});
#include "HiveAuthV4.h"

FHiveAuthV4::ShowTerms(FHiveAuthV4OnShowTermsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                //API 呼叫成功
        }
}));

API 參考: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::showTerms([=](ResultAPI const & result) {    
        if (result.isSuccess()) {    
            // API call success    
        }    
});

API 參考: Kotlin

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    AuthV4.showTerms(object : AuthV4.AuthV4ShowTermsListener {    
        override fun onAuthV4ShowTerms(result: ResultAPI) {    
            if (result.isSuccess) {    
                // API call success    
            }    
        }    
})

API 參考: Java

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    AuthV4.INSTANCE.showTerms(result -> {    
        if (result.isSuccess()) {    
            // API call success    
        }    
});

API 參考: Swift

import HIVEService    
    AuthV4Interface.showTerms() { result in    
        if result.isSuccess() {    
            // API call success    
        }    
}

API 參考: Objective-C

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEAuthV4 showTerms:^(HIVEResultAPI *result) {     
        if ([result isSuccess]) {    
            // API call success    
        }    
}];

移除條款和條件的協議歷史

一旦遊戲用戶在第一次運行遊戲時同意條款和條件,該同意記錄將保留在設備上。下面的 resetAgreement 方法將刪除此歷史記錄。

Note

自 Hive SDK 4.22.0 起,當遊戲用戶刪除帳戶後再次運行遊戲時,會出現一個問題,即條款和條件協議彈出窗口不會出現,因為有關同意條款和條件的信息仍然與已刪除的帳戶相關聯。如果您希望在刪除帳戶後重置 Hive SDK 時重新顯示條款和條件協議彈出窗口,則必須調用 resetAgreement 來刪除先前保存的條款和條件協議信息。然後,調用 AuthV4.setup() 來初始化 Hive SDK。

using hive;

AuthV4.resetAgreement();
#include "HiveAuthV4.h"

FHiveAuthV4::ResetAgreement();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace hive;

AuthV4::resetAgreement()
import com.hive.AuthV4

AuthV4.resetAgreement()
import com.hive.AuthV4;

AuthV4.INSTANCE.resetAgreement();
import HIVEService

AuthV4Interface.resetAgreement()
#import <HIVEService/HIVEService-Swift.h>

[AuthV4Interface 重置協議]

Hive 個人檔案

要顯示個人資料螢幕,請呼叫AuthV4類別的showProfile()。當個人資料螢幕顯示時,用戶可以檢查和更改他們的個人資料圖片和暱稱。

 

以下是顯示個人資料的示例代碼。

API 參考: AuthV4.showProfile

using hive;    
    // playerId of the logged-in user    
    Int64 playerId = 12345;    
    AuthV4.showProfile(playerId, (ResultAPI result) => {    
        if (result.isSuccess()) {    
            // Call successful    
        }    
});
#include "HiveAuthV4.h"

// 登入用戶的 playerId  
int64 PlayerId = 12345;

FHiveAuthV4::ShowProfile(PlayerId, FHiveAuthV4OnShowProfileDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // 呼叫成功 
        }
}));

API 參考: AuthV4::showProfile

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // 已登录用户的 playerId    
    long long playerId = 12345;    
    AuthV4::showProfile(playerId, [=](ResultAPI const & result){    
        if (result.isSuccess()) {    
            // 调用成功    
        }    
});

API 參考: AuthV4.showProfile

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    // 已登录用户的 playerId    
    val playerId = 12345L    
    AuthV4.showProfile(playerId, object : AuthV4.AuthV4ShowProfileListener{    
        override fun onAuthV4ShowProfile(result: ResultAPI) {    
            if (result.isSuccess) {    
                // 调用成功    
            }    
        }    
})

API 參考: AuthV4.INSTANCE.showProfile

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    // 已登入用戶的 playerId    
    long playerId = 12345;    
    AuthV4.INSTANCE.showProfile(playerId, result -> {    
        if (result.isSuccess()) {    
            // 呼叫成功    
        }    
});

API 參考: AuthV4Interface.showProfile

import HIVEService    
    // playerId of the logged-in user    
    let playerId: Int64 = 12345    
    AuthV4Interface.showProfile(playerId) { result in    
        if result.isSuccess() {    
            // Call successful    
        }    
}

API 參考: [HIVEAuthV4 showProfile]

#import <HIVEService/HIVEService-Swift.h>    
    // 已登录用户的 playerId    
    long long playerId = 12345;    
    [HIVEAuthV4 showProfile: playerId handler: ^(HIVEResultAPI *result) {    
        if ([result isSuccess]) {    
            // 调用成功    
        }    
}];

如果您提供 Membership IdP,Hive 會員在 Hive 個人資料頁面上的 Hive 帳戶設置中提供密碼更改和會員退出功能,因此您 必須 實現 showProfile()

  • 當 Hive 會員身份提供者被整合時的個人資料。

  • 當除了 Hive 會員之外的 IdP(包括訪客)被整合時的配置檔。

即使您只提供其他身份提供者,而不是 Hive 会员身份提供者,显示个人资料屏幕仍然可以让您提供安全功能,例如阻止外国登录、注销所有设备以及检查登录历史记录。因此,建议实现 showProfile() 来显示个人资料屏幕。如果与返回个人资料图片和昵称的身份提供者(如 Facebook)集成,则该身份提供者提供的图片和昵称将自动设置为个人资料屏幕。

查詢

作為Hive平台用戶的客戶服務系統,它提供每個遊戲的常見問題解答和查詢。此功能可在遊戲、Hive網站以及Hive移動網站上使用。通過按鈕暴露CS代碼(PlayerID)以訪問Hive客戶服務,幫助用戶提出有關遊戲的問題。

Note
  • Hive 客戶服務對於訪客用戶也是可用的。
  • 不同的遊戲發行公司對於如何顯示客戶服務連結的規定各不相同。
  • 除了1:1詢問外,由於政策問題,禁止顯示電子郵件或電話號碼。
  • 查詢的示例螢幕

要顯示查詢頁面,請在**AuthV4**類別中調用showInquiry()方法。 以下是顯示查詢頁面的示例代碼。

API 參考: AuthV4.showInquiry

using hive;    
    AuthV4.showInquiry((ResultAPI result) => {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});
#include "HiveAuthV4.h"

FHiveAuthV4::ShowInquiry(FHiveAuthV4OnShowInquiryDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successful 
        }
}));

API 參考: AuthV4 ::showInquiry

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::showInquiry([=](ResultAPI const & result) {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});

API 參考: AuthV4.showInquiry

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    AuthV4.showInquiry(object : AuthV4.AuthV4ShowInquiryListener {    
         override fun onAuthV4ShowInquiry(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             }    
         }    
})

API 參考: AuthV4.INSTANCE.showInquiry

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    AuthV4.INSTANCE.showInquiry(result -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 參考: AuthV4Interface .showInquiry

import HIVEService    
    AuthV4Interface.showInquiry() { result in    
    if result.isSuccess() {    
    // call successful    
    }    
}

API 參考: [ HIVEAuthV4 showInquiry]

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEAuthV4 showInquiry: ^(HIVEResultAPI *result) {    
    if ([result isSuccess]) {    
    // call successful    
    }    
}];

我的查詢快捷方式

與 Hive 會員同步的用戶可以通過我的查詢快捷方式查看他們的查詢歷史。調用 AuthV4 類中的 showMyInquiry() 方法,使用戶能夠輕鬆查詢您的遊戲並解決問題。然而,如果用戶通過 Hive 手機或網站進行查詢,則即使指定了 Hive ID 和 CS 代碼(PlayerID),查詢也不會顯示,因為無法確定用戶是否已登錄 Hive 會員。

Note
  • 您只能在用户登录 Hive 会员时实现我的查询快捷 API。如果您尝试与其他 IdP 同步调用 API,将返回错误消息。
  • 在 Auth v4 中,必须将帐户与 Hive 会员关联才能发放 UID。因此,如果用户以访客身份登录或使用其他 IdP 而不是 Hive 会员,则无法在 Auth v4 中实现我的查询快捷方式。

以下是暴露我的询问快捷方式的示例代码。

API 參考: hive.AuthV4 .showMyInquiry

using hive;    
    AuthV4.showMyInquiry((ResultAPI result) => {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});
#include "HiveAuthV4.h"

FHiveAuthV4::ShowMyInquiry(FHiveAuthV4OnShowInquiryDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successful
        }
}));

API 參考: AuthV4:: showMyInquiry

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::showMyInquiry([=](ResultAPI const & result) {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});

API 參考: AuthV4.showMyInquiry

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    AuthV4.showMyInquiry(object : AuthV4.AuthV4ShowMyInquiryListener {    
         override fun onAuthV4ShowMyInquiry(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             }    
         }    
})

API 參考: com.hive .AuthV4.showMyInquiry

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    AuthV4.INSTANCE.showMyInquiry(result -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 參考: AuthV4Interface .showMyInquiry

import HIVEService    
    AuthV4Interface.showMyInquiry() { result in    
    if result.isSuccess() {    
    // call successful    
    }    
}

API 參考: HIVEAuthV4:: showMyInquiry

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEAuthV4 showMyInquiry: ^(HIVEResultAPI *result) {    
    if ([result isSuccess]) {    
    // call successful    
    }    
}];

Hive 聊天機器人 CS

透過聊天機器人查詢
  • 聊天機器人的查詢範例畫面

要顯示聊天機器人頁面,請在 AuthV4 類別中調用 showChatbotInquiry() 方法。

參數 類型 描述
additionalInfo 字串 在顯示聊天機器人頁面時發送的數據
固定為 "{ \"init_path\":\"hive_sdk_api\" }",如需額外值,請聯繫 Leading Development Team, Com2uS Platform

以下是通過聊天機器人頁面顯示查詢的示例代碼。

API 參考: hive .AuthV4.showChatbotInquiry

using hive;    
    // 調用聊天機器人頁面快捷 API 時承諾交付的 JSON 格式字符串數據    
    String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }";    
    AuthV4.showChatbotInquiry(additionalInfo, (ResultAPI result) => {    
         if (result.isSuccess()) {    
             // 調用成功    
         }    
});
#include "HiveAuthV4.h"

// 說明在調用聊天機器人頁面快捷 API 時承諾以 JSON 格式交付的字符串數據
TSharedPtr<FJsonObject> AdditionalInfoJson = MakeShareable(new FJsonObject);
AdditionalInfoJson->SetStringField(TEXT("init_path"), TEXT("hive_sdk_api"));

FString StrAdditionalInfo;
TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create(&StrAdditionalInfo);
FJsonSerializer::Serialize(AdditionalInfoJson.ToSharedRef(), JsonWriter);

FHiveAuthV4::ShowChatbotInquiry(StrAdditionalInfo, FHiveAuthV4OnShowInquiryDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successful 
        }
}));

API 參考: AuthV4 ::showChatbotInquiry

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // 呼叫聊天機器人頁面快捷 API 時承諾交付的 JSON 格式的字串數據    
    string additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }";    
    AuthV4::showChatbotInquiry(additionalInfo, [=](ResultAPI const &result) {    
         if (result.isSuccess()) {    
            // 呼叫成功    
         }    
});

API 參考: AuthV4.showChatbotInquiry

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    // 調用聊天機器人頁面快捷 API 時承諾以 JSON 格式交付的字符串數據    
    val additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"    
    AuthV4.showChatbotInquiry(additionalInfo, object : AuthV4.AuthV4ShowChatbotInquiryListener {    
         override fun onAuthV4ShowChatbotInquiry(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // 調用成功    
             }    
         }    
})

API 參考: com.hive .AuthV4.showChatbotInquiry

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    // 調用聊天機器人頁面快捷 API 時承諾以 JSON 格式交付的字符串數據    
    String additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }";    
    AuthV4.INSTANCE.showChatbotInquiry(additionalInfo, result -> {    
         if (result.isSuccess()) {    
             // 調用成功    
         }    
});

API 參考: AuthV4Interface.showChatbotInquiry

import HIVEService    
    // 调用聊天机器人页面快捷 API 时承诺交付的 JSON 格式字符串数据    
    let additionalInfo = "{ \"init_path\":\"hive_sdk_api\" }"    
    AuthV4Interface.showChatbotInquiry(additionalInfo) { result in    
    if result.isSuccess() {    
    // 调用成功    
    }    
}

API 參考: HIVEAuthV4:: showChatbotInquiry

#import <HIVEService/HIVEService-Swift.h>    
    // 调用聊天机器人页面快捷 API 时承诺交付的 JSON 格式字符串数据    
    NSString *additionalInfo = @"{ \"init_path\":\"hive_sdk_api\" }";    
    [HIVEAuthV4 showChatbotInquiry:additionalInfo handler:^(HIVEResultAPI *result) {    
    if ([result isSuccess]) {    
             // 调用成功    
         }    
}];

聊天機器人設定

AppDelegate 在聊天機器人中定義了 iOS 應用程序頂部對象的常見操作(方法)。當使用 Xcode 構建項目時,它會自動生成該類。

Hive SDK 只在豎屏模式下為用戶方便地展示聊天機器人 UI。在 iOS 上運行此功能需要與屏幕方向相關的功能,即遊戲引擎的 AppDelegate 類中的 application(_:supportedInterfaceOrientationsFor:) 方法。此方法返回 UIInterfaceOrientationMask 值以用於遊戲。它在僅支持橫屏的遊戲中返回橫屏,在僅支持豎屏的遊戲中返回豎屏,在支持所有類型的遊戲中返回橫屏和豎屏。

Warning

Unity 引擎已經包含了 AppDelegate 方法來處理螢幕旋轉,因此如果您在 Xcode 中構建您的專案,它會自動運行。也就是說,如果您在 Unity 中開發遊戲,請不要添加 以下示例代碼到您的遊戲中

Note

聊天機器人服務在您請求 解決方案架構師部分,Com2uS 平台 以進行 AppID 註冊過程後可用。

// 如果您的游戏引擎是用 Objective-c 编写的,请实现以下 AppDelegate 函数。
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{
    // TODO: 仅限横屏
    return UIInterfaceOrientationMaskLandscape;
    // TODO: 仅限竖屏
    return UIInterfaceOrientationMaskPortrait;
    // TODO: 横屏和竖屏均可
    return UIInterfaceOrientationMaskAll;
}
// 如果您的游戏引擎是用 Swift 编写的,请实现以下 AppDelegate 函数。
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask 
{
    // TODO: 仅限横屏
    return [.landscape]
    // TODO: 仅限竖屏
    return [.portrait]
    // TODO: 横屏和竖屏都支持
    return .all
}

在 iPad 上僅限豎屏的聊天機器人需要使用以下附加設置來構建您的 Xcode 項目。

接觸社區

為了自動登錄處理和社區的正常運作,請通過以下所示的API調用來公開社區網站。在設置遵循Hive 規範的社區網站時,如果您想使用除*withhive.com*和*com2us.com*以外的自定義域名,請將該域名註冊到Hive 控制台白名單,然後調用此API。

在Hive社區中,自動登錄和其他功能,通過以下API調用來暴露社區頁面。

Note

在 Windows 環境中,如果要公開的社區頁面作為框架打開,則如果該頁面設置了 X-Frame-Options 標頭,則該頁面將無法呈現,因為安全問題。檢查您想以框架形式打開的頁面的選項。

API 參考: SocialV4 .showCommunity

using hive;    
    // 設定視圖類型(全螢幕:full screen,框架:frame screen)    
    SocialV4.ViewType viewType = SocialV4.ViewType.Frame;    
    SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, (ResultAPI result) => {    
    if (result.isSuccess()) {    
    // 呼叫成功    
    }    
});
#include "HiveSocialV4.h"

// 設定視圖類型(全螢幕:全螢幕,框架:框架螢幕)
ESocialV4ViewType ViewType = ESocialV4ViewType::Frame;

FHiveSocialV4::ShowCommunity(ESocialV4ProviderType::HIVE, ViewType, FHiveSocialV4OnShowCommunityDelegate::CreateLambda([this](const FHiveResultAPI& Result) {

        if (Result.IsSuccess()) {
                // call successful
        }
}));

API 參考: SocialV4 .showCommunity

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // 設定視圖類型(全螢幕:全螢幕,框架:框架螢幕)    
    SocialV4::ViewType viewType = SocialV4::ViewType::Frame;    
    SocialV4.showCommunity(SocialV4::ProviderType::HIVE, viewType, (ResultAPI const & result) {    
    if (result.isSuccess()) {    
    // 呼叫成功    
    }    
});

API 參考: SocialV4.showCommunity

import com.hive.SocialV4    
    import com.hive.ResultAPI    
    // 設定視圖類型(全螢幕:全螢幕,框架:框架螢幕)    
    val viewType = SocialV4.ViewType.Frame    
    SocialV4.showCommunity(SocialV4.ProviderType.HIVE, viewType, object : SocialV4.SocialV4ShowCommunityListener{    
         override fun onShowCommunity(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // 呼叫成功    
             }    
         }    
})

API 參考: SocialV4.INSTANCE .showCommunity

import com.hive.SocialV4;    
    import com.hive.ResultAPI;    
    // 設定視圖類型(全螢幕:full screen,框架:frame screen)    
    SocialV4.ViewType viewType = SocialV4.ViewType.Frame;    
    SocialV4.INSTANCE.showCommunity(SocialV4.ProviderType.HIVE, viewType, result -> {    
         if (result.isSuccess()) {    
             // 呼叫成功    
         }    
});

API 參考: SocialV4Interface.showCommunity

import HIVEService    
    // 設定視圖類型(全螢幕:full screen,框架:frame screen)    
    let viewType = SocialViewType.Frame    
    SocialV4Interface.showCommunity(.HIVE, viewType) { result in    
    if result.isSuccess() {    
    // 呼叫成功    
    }    
}

API 參考: HIVESocialV4 showCommunity

#import <HIVEService/HIVEService-Swift.h>    
    // 设置视图类型(全屏:full screen,框架:frame screen)    
    HIVESocialViewType viewType = HIVESocialViewTypeFrame;    
    [HIVESocialV4 showCommunity: HVIESocialProviderTypeHIVE viewType: viewType handler: ^(HIVEResultAPI *result) {    
    if ([result isSuccess]) {    
    // 调用成功    
    }    
}];

實現遠程日誌記錄

遠端日誌記錄是一項功能,允許您通過將調試日誌從客戶端發送到 Hive 伺服器來遠程檢查已發布應用的日誌以進行調試。要實現此功能,請在 Hive 控制台上註冊。此功能僅激活目標用戶的遠端日誌。有關如何註冊的更多詳細信息,請參閱操作 > 配置 > 遠端日誌記錄中的操作指南。

  • 啟用
    如果您啟用遠程日誌,Hive SDK 日誌和遊戲日誌將根據您在 Hive 控制台上設置的時間段進行收集。Hive SDK 日誌基於 SDK 的設置,而遊戲日誌則靈活地供遊戲開發者設置值。

    Warning

    确保

    • 如果您生成過多的日誌,過載的網絡流量或日誌處理可能會干擾您遊戲的運行。Hive 建議您省略循環類型的重複日誌或在發送之前將其聚合為一條日誌以實現遠程日誌記錄。

    • 如果您打算在遊戲日誌上使用遠程日誌,請提前聯繫GAMEVIL COM2US平台的解決方案架構師部分的負責人。

  • 目標
    遠端日誌僅針對那些其設備至少透過 Hive SDK 初始化一次的用戶。 然而,如果在初始化 SDK 之前發生崩潰或錯誤,則某些遊戲無法使用此功能。

  • 遠端日誌記錄的運作方式

  • 範例代碼
    在遊戲需要收集日誌的每個部分插入以下代碼。

API 參考: Logger .log

using hive;    
Logger.log("Enter logging contents");
#include "HiveLogger.h"

FHiveLogger::Log(TEXT("進入日誌內容"));

API 參考: Logger:: log

  #include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
   Logger::log("Enter logging contents");

API 參考: Logger.i

import com.hive.Logger;    
Logger.INSTANCE.i("Enter logging contents");

API 參考: LogInterface.log

import HIVEBase    
LogInterface.log(sourceInfo: "Log source information (class, method name)", type: .Info, tag: "Log tag", msg: "Log message")

API 參考: Objective-C

#import <HIVEBase/HIVEBase-Swift.h>

[HIVELogger logWithSourceInfo:@"記錄來源資訊(類別,方法名稱)" type: LogTypeInfo tag: @"日誌標籤" msg: @"日誌訊息"];

遠端配置

Hive SDK 使遊戲能夠管理與應用程式每個版本一對一映射的遊戲伺服器 URL。遠端配置以字串形式提供,通過調用 Configuration 類的 getMetaData() API。以下是調用遠端配置的示例代碼。

API 參考: HiveConfiguration getMetaData

using hive;    
    // data key    
    String key = "game_server_url";    
    // Whether data is updated    
    Boolean forceReload = false;    
    // metadata call    
    Configuration.getMetaData(key, forceReload, (ResultAPI result, String value) => {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});
#include "HiveConfiguration.h"

// 資料鍵
FString Key = TEXT("game_server_url");

// 是否更新數據
bool bForceReload = false;

// metadata call
FHiveConfiguration::GetMetaData(Key, bForceReload, FHiveConfigurationOnMetaDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Value) {
        if (Result.IsSuccess()) {
                // call successfull
        }
}));

API 參考: Configuration:: getMetaData

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // data key    
    string key = "game_server_url";    
    // Whether data is updated    
    bool forceReload = false;    

    // 元數據調用    
    Configuration::getMetaData(key, forceReload, [=](ResultAPI const & result, string value) {    
         if (result.isSuccess()) {    
             // 調用成功    
         }    
});

API 參考: Configuration.getMetaData

import com.hive.Configuration    
    import com.hive.ResultAPI    
    // 数据键    
    val key = "game_server_url"    
    // 数据是否更新    
    val forceReload = false    
    // 元数据调用    
    Configuration.getMetaData(key, forceReload, object : Configuration.GetMetaDataListener {    
         override fun onGetMetaData(result: ResultAPI, data: String) {    
             if (result.isSuccess) {    
                 // 调用成功    
             }    
         }    
})

API 參考: Configuration.INSTANCE .getMetaData

import com.hive.Configuration;    
    import com.hive.ResultAPI;    
    // data key    
    String key = "game_server_url";    
    // Whether data is updated    
    boolean forceReload = false;    
    // metadata call    
    Configuration.INSTANCE.getMetaData(key, forceReload, (result, data) -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 參考: ConfigurationInterface.getMetaData

import HIVEService    
    // data key    
    let key = "game_server_url"    
    // Whether data is updated    
    let forceReload = false;    

    // 元資料調用    
    ConfigurationInterface.getMetaData(key, forceReload: forceReload) { result, value in    
         if result.isSuccess() {    
             // 調用成功    
         }    
}

API 參考: HIVEConfiguration getMegaData

#import <HIVEService/HIVEService-Swift.h>    
    // 数据键    
    NSString *key = @"game_server_url";    
    // 数据是否更新    
    BOOL forceload = NO;    
    // 元数据调用    
    [HIVEConfiguration getMegaData: key forceReload: forceReload handler: ^(HIVEResultAPI *result, NSString *value) {    
    if ([result isSuccess]) {    
    // 调用成功    
    }    
}];
Note

要使用快取資料,將 forceReload 設為 false

  • 如果您在 forceReloadtrue 时调用 getMetaDate() 方法,它会删除本地存储的数据,并尝试从服务器获取最新数据。此操作通常用于重新运行应用程序时的刷新等任务。