コンテンツにスキップ

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 として使用します。

Step 1. Funtapライブラリの設定

Native では、モジュールレベルの build.gradle ファイルにサービス用の依存関係を追加します。

// Funtap Serviceモジュール
implementation "com.com2us.android.hive:hive-authv4-provider-funtap"

Unity では [上部ツールバー > Hive] で ExternalDependency をクリックした後、Funtap 項目をチェックします。

Unreal Engine では [Edit > Project Settings > Hive SDK > Dependency - Android または Dependency - iOS] で Funtap 項目をチェックします。

Step 2. Funtapパブリッシャー設定値(token)の適用

Native では、hive_config.xml ファイルに Funtap パブリッシャーから受け取った token を追加します。

<funtap token="YOUR_TOKEN" />

Unity では [上部ツールバー > Hive > HiveConfig] で Optional をクリックした後、Funtap の token 項目に発行されたキーを入力します。

Unreal Engine では [Edit > Project Settings > Hive Config > Android] で Funtap 項目を展開した後、token 項目に発行されたキーを入力します。

Step 3. 政府審査中かどうかの確認

Service Build で手動情報更新メニューを表示するかどうかを判断するには、まずユーザーがログインに成功している必要があります。

ログイン完了後、キャラクター情報画面または設定画面に入る際に ProviderFuntap.isFuntapUnderGovernmentReview() を呼び出し、審査が進行中かどうかを確認します。

  • メソッドが true を返す場合(政府規制審査期間)
  • Hive SDK はログイン直後に WebView ベースの本人確認画面を自動表示します。
  • この場合、本人確認プロセスは自動で進行するため、ゲーム内に別途手動情報更新 UI を表示しないでください。
  • 例外処理(skipUpdateUserInfo
  • hive_config.xml ファイルの skipUpdateUserInfo 値が true の場合、ログインに成功しても本人確認画面は強制表示されません。

本人確認ポップアップ画面の例

結果が false の場合は、次の Step に進みます。

using hive;

bool result = ProviderFuntap.isFuntapUnderGovernmentReview();
#include "HiveProviderFuntap.h"

bool bResult = FHiveProviderFuntap::IsFunTapUnderGovernmentReview();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>

bool result = ProviderFuntap::isFuntapUnderGovernmentReview();
import com.hive.ProviderFuntap

val result = ProviderFuntap.isFuntapUnderGovernmentReview()
import com.hive.ProviderFuntap;

boolean result = ProviderFuntap.isFuntapUnderGovernmentReview();
import ProviderFuntap

let result = ProviderFuntapInterface.isFuntapUnderGovernmentReview();

Step 4. ユーザー情報入力完了有無の確認

Step 3 の結果が false の場合、ユーザーが手動情報更新を進められるかどうかを判断する必要があります。userId には、ログイン成功後に PlayerInfo レスポンスとして受け取った PlayerID を文字列として渡します。PlayerInfo レスポンス値の詳細は、始める前にを参照してください。

ProviderFuntap.checkUserInfoComplete(userId) 呼び出し結果として渡される isCompleted 値が true の場合、情報入力はすでに完了しているため UI を表示しません。isCompletedfalse の場合は、次の Step で情報更新 UI を提供します。

using hive;

string userId = "USER_ID";

ProviderFuntap.checkUserInfoComplete(userId, (ResultAPI result, bool isCompleted) => {
    if (result.isSuccess()) {
        // isCompleted が false の場合、情報更新 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 を表示
    }
}));
#include <HIVE_SDK_Plugin/HIVE_CPP.h>

std::string userId = "USER_ID";

ProviderFuntap::checkUserInfoComplete(userId, [=](ResultAPI const & result, bool isCompleted) {
    if (result.isSuccess()) {
        // isCompleted が false の場合、情報更新 UI を表示
    }
});
import com.hive.ProviderFuntap
import com.hive.ResultAPI

val userId = "USER_ID"

ProviderFuntap.checkUserInfoComplete(userId) { result: ResultAPI, isCompleted: Boolean ->
    if (result.isSuccess) {
        // isCompleted が false の場合、情報更新 UI を表示
    }
}
import com.hive.ProviderFuntap;
import com.hive.ResultAPI;

String userId = "USER_ID";

ProviderFuntap.checkUserInfoComplete(userId, (result, isCompleted) -> {
    if (result.isSuccess()) {
        // isCompleted が false の場合、情報更新 UI を表示
    }
});
import ProviderFuntap

let userId = "USER_ID";

ProviderFuntapInterface.checkUserInfoComplete(userId) { result, isCompleted in
    if (result.isSuccess()) {
        // isCompleted が false の場合、情報更新 UI を表示
    }
};

Step 5. 情報更新 UI の表示

Step 4 で isCompletedfalse の場合、キャラクター情報画面または設定画面にユーザーが選択できるメニューを提供します。ユーザーがそのメニューを選択したら、ProviderFuntap.showUpdateUserInfo(userId, serverId, serverName, characterId, characterName) を呼び出して情報更新画面を開きます。このとき、hive_config.xml ファイルの skipUpdateUserInfotrue の場合、画面は表示されず成功が返されます。

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 呼び出し成功
    }
};