Funtap 發行商對接指南
本指南適用於已完成越南 Funtap 商店發行合約的應用程式,說明如何使用 Hive SDK 設定 Service Build 並準備實際服務營運。
Hive SDK 會依建置類型套用 Funtap 模組與設定值,並整合登入畫面及使用者資訊更新所需的 UI 與 API。套用此設定後,即可產生符合越南服務政策與政府監管指南的建置版本。
Note
由於越南商店建置設定不區分審核建置與 Service Build,因此 Hive SDK v4 26.2.0 Android 中為越南發行審核新增的 Appraisal Build 設定功能已在 26.5.0 中移除。
Service Build 套用方式¶
Service Build 是 Android 或 iOS 應用程式取得越南發行授權後,用於營運實際服務的建置版本。此建置使用服務用 Funtap 模組與 token 設定。
事前準備¶
開始 Service Build 作業前,必須先向 Funtap 取得服務用 token。Native 請將此值輸入至 hive_config.xml;Unity 請在 [上方工具列 > Hive > HiveConfig > Optional] 下的 Funtap token 欄位中輸入此值。若未準備好該值,則無法完成 Step 2。
Note
可在 Hive 控制台 > 佈建 > SDK 設定 中控制登入後是否顯示 Funtap 身分驗證。
Service Build 功能會在遊戲中已套用的登入流程先完成後使用。登入成功後,請將 PlayerInfo 回應中收到的 PlayerID 作為後續 Funtap API 的 userId 使用。
步驟 1. 設定 Funtap 程式庫¶
Native 請在模組層級的 build.gradle 檔案中新增服務用相依性。
在 Unity 中,於 [上方工具列 > Hive] 下點擊 ExternalDependency 後,勾選 Funtap 項目。
在 Unreal Engine 中,於 [Edit > Project Settings > Hive SDK > Dependency - Android 或 Dependency - iOS] 下勾選 Funtap 項目。
步驟 2. 套用 Funtap 發行商設定值(token)¶
Native 請在 hive_config.xml 檔案中新增從 Funtap 發行商取得的 token。
在 Unity 中,於 [上方工具列 > Hive > HiveConfig] 下點擊 Optional 後,在 Funtap 的 token 欄位中輸入已核發的金鑰。
在 Unreal Engine 中,於 [Edit > Project Settings > Hive Config > Android] 下展開 Funtap 項目後,在 token 欄位中輸入已核發的金鑰。
步驟 3. 確認是否處於政府審核期間¶
若要在 Service Build 中判斷是否顯示手動資訊更新選單,必須先確認使用者已成功登入。
登入完成後,進入角色資訊畫面或設定畫面時呼叫 ProviderFuntap.isFuntapUnderGovernmentReview(),確認是否正在進行審核。
- 若方法回傳
true(政府監管審核期間) - Hive SDK 會在登入後立即自動顯示以 WebView 為基礎的身分驗證畫面。
- 在此情況下,由於身分驗證流程會自動進行,請勿在遊戲內額外顯示手動資訊更新 UI。
- 例外處理 (
skipUpdateUserInfo) - 若
hive_config.xml檔案中的skipUpdateUserInfo值為true,即使登入成功,也不會強制顯示身分驗證畫面。
結果為 false 時,請進行下一個 Step。
步驟 4. 確認使用者資訊輸入是否完成¶
若 Step 3 的結果為 false,則需要判斷使用者是否可以進行手動資訊更新。userId 請傳入登入成功後從 PlayerInfo 回應中收到的字串形式 PlayerID。有關 PlayerInfo 回應值的詳細資訊,請參閱開始之前。
若呼叫 ProviderFuntap.checkUserInfoComplete(userId) 的結果所傳遞的 isCompleted 值為 true,表示資訊輸入已完成,因此不顯示 UI。若 isCompleted 為 false,則在下一個 Step 提供資訊更新 UI。
#include "HiveProviderFuntap.h"
FString UserId = "USER_ID";
FHiveProviderFuntap::CheckUserInfoComplete(UserId, FHiveProviderFuntapOnCheckUserInfoCompleteDelegate::CreateLambda([this](const FHiveResultAPI& Result, bool bIsCompleted) {
if (Result.IsSuccess()) {
// 若 bIsCompleted 為 false,顯示資訊更新 UI
}
}));
步驟 5. 顯示資訊更新 UI¶
若 Step 4 中 isCompleted 為 false,請在角色資訊畫面或設定畫面提供使用者可選擇的選單。使用者選擇該選單時,呼叫 ProviderFuntap.showUpdateUserInfo(userId, serverId, serverName, characterId, characterName) 開啟資訊更新畫面。此時,若 hive_config.xml 檔案中的 skipUpdateUserInfo 為 true,則不會顯示畫面並回傳成功。
using hive;
string userId = "USER_ID";
string serverId = "SERVER_ID";
string serverName = "SERVER_NAME";
string characterId = "CHARACTER_ID";
string characterName = "CHARACTER_NAME";
ProviderFuntap.showUpdateUserInfo(userId, serverId, serverName, characterId, characterName, (ResultAPI result) => {
if (result.isSuccess()) {
// API 呼叫成功
}
});
#include "HiveProviderFuntap.h"
FString UserId = "USER_ID";
FString ServerId = "SERVER_ID";
FString ServerName = "SERVER_NAME";
FString CharacterId = "CHARACTER_ID";
FString CharacterName = "CHARACTER_NAME";
FHiveProviderFuntap::ShowUpdateUserInfo(UserId, ServerId, ServerName, CharacterId, CharacterName, FHiveProviderFuntapOnShowUpdateUserInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// API 呼叫成功
}
}));
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
std::string userId = "USER_ID";
std::string serverId = "SERVER_ID";
std::string serverName = "SERVER_NAME";
std::string characterId = "CHARACTER_ID";
std::string characterName = "CHARACTER_NAME";
ProviderFuntap::showUpdateUserInfo(userId, serverId, serverName, characterId, characterName, [=](ResultAPI const & result) {
if (result.isSuccess()) {
// API 呼叫成功
}
});
import com.hive.ProviderFuntap
import com.hive.ResultAPI
val userId = "USER_ID"
val serverId = "SERVER_ID"
val serverName = "SERVER_NAME"
val characterId = "CHARACTER_ID"
val characterName = "CHARACTER_NAME"
ProviderFuntap.showUpdateUserInfo(userId, serverId, serverName, characterId, characterName) { result: ResultAPI ->
if (result.isSuccess) {
// API 呼叫成功
}
}
import com.hive.ProviderFuntap;
import com.hive.ResultAPI;
String userId = "USER_ID";
String serverId = "SERVER_ID";
String serverName = "SERVER_NAME";
String characterId = "CHARACTER_ID";
String characterName = "CHARACTER_NAME";
ProviderFuntap.showUpdateUserInfo(userId, serverId, serverName, characterId, characterName, (result) -> {
if (result.isSuccess()) {
// API 呼叫成功
}
});
import ProviderFuntap
let userId = "USER_ID";
let serverId = "SERVER_ID";
let serverName = "SERVER_NAME";
let characterId = "CHARACTER_ID";
let characterName = "CHARACTER_NAME";
ProviderFuntapInterface.showUpdateUserInfo(userId, serverId, serverName, characterId, characterName) { result in
if (result.isSuccess()) {
// API 呼叫成功
}
};




