跳转至

如何初始化 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.eyJpc3MiOiJIaXZеIiwiaWF0IjoxNjAzNzc4OTU2LCJqdGkiOiIxODczMTExMzIwIn0.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

// 请求 Hive SDK 初始化
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 引擎用户
        // ex) 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

// 请求 Hive SDK 初始化    
    AuthV4.setup(object: AuthV4.AuthV4SetupListener{    
        override fun onAuthV4Setup(result: ResultAPI, isAutoSignIn: Boolean, did: String?, providerTypeList: ArrayList<AuthV4.ProviderType>?) {        if (result.isSuccess) {    
                // 初始化成功。根据是否启用自动登录处理登录。    
            } else if (result.needExit()) {    
                // TODO: 实现应用程序的终止    
                // ex) exitProcess(0)    
            } else {    
            // 初始化失败 } } })

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: 实现应用程序的终止    
                // ex) 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

// 请求 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 提供的用户界面,或根据 Hive 的信息进行自定义。可以为每个游戏服务器设置服务器维护弹出窗口/更新弹出窗口/通知弹出窗口。

设置弹出内容

设置 Hive 控制台上服务器维护弹出/更新弹出/通知弹出的详细信息。有关设置的更多信息,请参见 操作 > 供应指南

显示弹出窗口

Hive SDK 显示维护弹出窗口/更新弹出窗口/通知弹出窗口,或返回弹出消息的信息以自定义弹出窗口。如果 Hive 显示它,弹出窗口将以 Hive 的 UI 风格出现,但如果您想自己处理,您可以以您想要的任何风格显示弹出窗口。根据您是否使用 Hive 弹出窗口,调用 AuthV4 类中的 checkMaintenance() 方法,设置如下所示的参数。

  • 使用 Hive 提供的弹出窗口: 将 isShow 参数设置为 true
  • 请求弹出窗口数据以自定义弹出窗口: 将 isShow 参数设置为 false。有关弹出窗口数据的更多信息,请参见下面的 Hive 返回的弹出窗口数据

  • 弹出窗口的示例屏幕

以下是一个示例代码,显示一个服务器维护弹出窗口,使用Hive提供的UI。如果用户在服务器维护尚未完成时关闭此弹出窗口,则将触发退出事件并转发到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;    
    // 是否使用 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 个人资料

要显示 个人资料屏幕,请调用 showProfile() 方法,属于 AuthV4 类。当个人资料屏幕显示时,用户可以查看和更改他们的个人资料图片和昵称。

 

以下是显示个人资料的示例代码。

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]) {    
            // 调用成功    
        }    
}];

如果您提供会员 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。因此,如果用户以访客身份登录或使用 Hive 会员以外的任何其他 IdP,则无法在 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()) {
                // 调用成功
        }
}));

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 Reference: 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 仅为用户方便而在纵向模式下暴露聊天机器人用户界面。在 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;    
    // 设置视图类型(全屏:全屏,框架:框架屏幕)    
    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 初始化至少一次具有设备 ID (DID) 的用户。然而,如果在初始化 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;

// 元数据调用
FHiveConfiguration::GetMetaData(Key, bForceReload, FHiveConfigurationOnMetaDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Value) {
        if (Result.IsSuccess()) {
                // 调用成功
        }
}));

API 参考: Configuration:: getMetaData

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // 数据键    
    string key = "game_server_url";    
    // 数据是否更新    
    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;    
    // 数据键    
    String key = "game_server_url";    
    // 数据是否更新    
    boolean forceReload = false;    
    // 元数据调用    
    Configuration.INSTANCE.getMetaData(key, forceReload, (result, data) -> {    
         if (result.isSuccess()) {    
             // 调用成功    
         }    
});

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() 方法,它会删除本地存储的数据,并尝试从服务器获取最新数据。这个操作通常用于重新运行应用程序时的刷新任务。