跳转至

身份验证服务

Hive 平台为遵守韩国相关法律法规与合规要求,提供“身份验证服务”,包括成人认证、监护人同意和身份认证。“身份验证服务”仅可由在韩国持有居民登记号码或外国人登记号码,且持有本人名义手机号的用户执行。

成人认证

根据《青少年保护法》等相关法规,青少年不可使用等级的游戏必须限制未满 19 周岁的未成年人使用。Hive 平台的成人认证功能通过手机实名认证确认用户是否为成人,仅在确认为成人时才允许登录游戏。

成人认证自首次认证起 1 年内有效;若在应用运行时判断有效期已过,将自动进入重新认证流程。

成人认证

在 Hive 控制台将成人认证设置为 启用 后,无需在 Hive SDK 中额外实现代码,游戏登录时会自动执行成人认证。但在移动端若成人认证失败,需要在游戏内实现提示弹窗并阻止进入游戏,以便用户能够感知。

此外,如果希望根据成人认证结果在游戏中提供额外流程,可通过获取重复加入确认信息(DI)哈希值来实现账号创建限制等功能。

有关成人认证设置的详细内容,请参阅[Hive 控制台指南 > 认证 > 成人认证 > 启用设置]。

成人认证失败响应

若未满 19 周岁的未成年用户尝试成人认证并失败,在调用 SignIn() 时,响应值会返回 ResultAPI.CANCELED(-6)ResultAPI.Code.AgeLimit(-1200067) 以及 "Failed due to age restriction." 消息。

游戏公司可基于该响应,在游戏内以所需方式向未成年用户提供提示信息。

语言 文案
韩语 서비스 제한 연령으로 앱을 이용할 수 없습니다.
英语 You cannot use the app due to the age restriction for service.
日语 サービスには年齢制限があるため、アプリを利用できません。
简体中文 由于年龄限制,不能使用应用。
繁体中文 未符合使用服務的年齡限制,無法使用應用程式。
德语 Du kannst die Anwendung aufgrund der Altersbeschränkung des Dienstes nicht nutzen.
法语 Vous ne pouvez pas utiliser l'application en raison de l'âge limite du service.
俄语 Использование приложения недоступно из-за возрастных ограничений.
西班牙语 No puede usar la aplicación debido a la restricción de edad para el servicio.
葡萄牙语 Você não pode usar o aplicativo devido à restrição de idade do serviço.
印度尼西亚语 Aplikasi tidak bisa digunakan karena terdapat usia minimal untuk menggunakan layanan ini.
泰语 คุณไม่สามารถใช้แอปได้เนื่องจากบริการนี้มีการจำกัดอายุ
越南语 Bạn không thể sử dụng ứng dụng do thuộc độ tuổi bị giới hạn sử dụng dịch vụ.
意大利语 Non è possibile utilizzare l'applicazione a causa del limite di età per l'uso del servizio.
土耳其语 Hizmetin yaş kısıtlaması nedeniyle uygulamayı kullanamazsınız.
阿拉伯语 لا يمكنك استخدام التطبيق بسبب القيود العمرية للخدمة.

获取 DI 哈希值

成人认证完成后,调用 SDK 的 AuthV4.getHashedDi 方法即可获取可识别成人认证用户的 DI 哈希值。出于安全考虑,DI 会以哈希形式提供;该值会在登录后与 PlayerID 关联,因此可作为成人认证用户标识符使用。

API Reference: hive.AuthV4.getHashedDi

using hive;    
AuthV4.getHashedDi((ResultAPI result, String hashedDi) => {    
    if (result.isSuccess()) {    
        // API call successful 
    } else {
        // NEED_INITIALIZE setup 前调用
        // INVALID_SESSION signIn 前调用
        // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
    }
});
#include "HiveAuthV4.h"

FHiveAuthV4::getHashedDi(FHiveAuthV4OnHashedDiDelegate::CreateLambda([this](const FHiveResultAPI& Result, FString& hashedDi) {
    if (Result.IsSuccess()) {
        // API 调用成功
    } else {
        // NEED_INITIALIZE setup 前调用
        // INVALID_SESSION signIn 前调用
        // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
    }
}));

API Reference: AuthV4::getHashedDi

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;    
AuthV4::getHashedDi([=](ResultAPI result, string hashedDi) {    
    if (result.isSuccess()) {    
        // API call successful    
    } else {
        // NEED_INITIALIZE setup 前调用
        // INVALID_SESSION signIn 前调用
        // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
    }   
});

API Reference: AuthV4.getHashedDi

import com.hive.AuthV4    
import com.hive.ResultAPI    

AuthV4.getHashedDi(object : AuthV4.AuthV4GetHashedDiListener {    
    override fun onAuthV4GetHashedDi(result: ResultAPI, hashedDi: String?) {    
        if (result.isSuccess) {    
            // API call successful    
        } else {
            // NEED_INITIALIZE setup 前调用
            // INVALID_SESSION signIn 前调用
            // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
        } 
    }    
})

API Reference: AuthV4.getHashedDi

import com.hive.AuthV4;    
import com.hive.ResultAPI;    

AuthV4.getHashedDi(result, hashedDi -> {    
    if (result.isSuccess()) {    
        // API call successful    
    } else {
        // NEED_INITIALIZE setup 前调用
        // INVALID_SESSION signIn 前调用
        // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
    }
});

API Reference: AuthV4Interface.getHashedDi

import HIVEService

AuthV4Interface.getHashedDi() { result, hashedDi in    
    if result.isSuccess() {    
        // API call successful    
    } else {
        // NEED_INITIALIZE setup 前调用
        // INVALID_SESSION signIn 前调用
        // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
    }
}

API Reference: HIVEAuthV4:getHashedDi

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 getHashedDi: ^(HIVEResultAPI *result, NSString *> *hashedDi) {    
    if ([result isSuccess]) {    
        // API call successful    
    } else {
        // NEED_INITIALIZE setup 前调用
        // INVALID_SESSION signIn 前调用
        // DEVELOPER_ERROR, CommonLibraryMissing 成人认证库引用失败
    }
}];

在账号创建限制策略中使用 DI 哈希值

在成人认证中,拥有多个 PlayerID 的用户可以使用同一个手机号完成认证。若想根据游戏运营政策限制同一手机号的多次认证,可通过限制每个手机号可进行成人认证的账号数量来实现。游戏公司需要将成人认证结果中的 DI 哈希值与 PlayerID 映射并保存。可基于 DI 哈希值统计已创建的 PlayerID 数量,并按账号创建限制策略控制用户进入游戏。

监护人同意

当儿童或青少年使用 PC 游戏时,根据《青少年保护法》,未满 19 周岁的用户需要获得监护人同意。Hive 平台通过手机实名认证确认用户年龄;若用户为儿童或青少年,则会再次进行父母或法定代理人等监护人的手机实名认证,以确认可使用游戏。监护人同意在安装游戏后仅进行 1 次。

监护人同意

监护人同意流程

年龄确认

首次运行 PC 游戏时,会通过手机实名认证确认用户年龄。根据认证结果分为儿童、青少年、成人;若为儿童或青少年,则会进行监护人同意。根据年龄,信息收集项和处理流程会有所不同。

按年龄区分的处理

  • 儿童(未满 14 周岁)
    • 确认是否已获得监护人同意并收集监护人邮箱
    • 通过监护人的手机实名认证进行监护人同意,并在此确认监护人是否年满 19 周岁
    • 监护人同意完成后,向已收集的监护人邮箱发送游戏使用说明邮件
  • 青少年(14 周岁以上 ~ 未满 19 周岁)
    • 提示监护人同意说明并收集监护人邮箱
    • 通过监护人的手机实名认证进行监护人同意,并在此确认监护人是否年满 19 周岁
    • 监护人同意完成后,向已收集的监护人邮箱发送游戏使用说明邮件
  • 成人(19 周岁以上)
    • 无需额外步骤即可立即使用游戏
分类 年龄标准 是否进行监护人同意 是否发送监护人邮件
儿童 未满 14 周岁 进行 发送游戏使用说明邮件
青少年 14 周岁以上且未满 19 周岁 进行 发送游戏使用说明邮件
成人 19 周岁以上 不进行 不发送

监护人同意信息

儿童或青少年用户的出生日期、监护人邮箱信息可在游戏中用于客服处理、游戏使用记录确认、监护人通知等用途。

如需查询监护人同意信息,请在完成监护人同意后调用 getParentalConsentInfo() 方法。getParentalConsentInfo() 方法会返回在监护人同意过程中收集的以下信息。

  • 儿童或青少年用户的出生日期
  • 监护人的邮箱地址

API Reference: hive.AuthV4.getParentalConsentInfo

using hive;    

    AuthV4.ParentalConsentInfo parentalConsentInfo = AuthV4.getParentalConsentInfo();    
#include "HiveAuthV4.h"

TOptional<FHiveParentalConsentInfo> ParentalConsentInfo = FHiveAuthV4::GetParentalConsentInfo();

API Reference: AuthV4::getParentalConsentInfo

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    AuthV4::ParentalConsentInfo parentalConsentInfo = AuthV4::getParentalConsentInfo();    

身份认证

身份认证是通过以用户本人名义开通的移动通信运营商(SKT、KT、LGU+、虚拟运营商),输入通过短信(SMS)或 PASS App 发送的 6 位验证码来确认本人身份的功能。

Hive SDK 支持游戏在与登录状态无关的任意时点调用身份认证 API。因此,可在进入商店、进入地下城等特定服务使用时点执行身份认证。可在游戏内进入商店时确认年龄以限制未成年人的概率型道具购买,或不向特定年龄以下用户展示广告等,按游戏运营策略灵活使用。

身份认证

响应信息

在 Hive SDK 中调用身份认证 API 后,认证完成时会返回手机号、出生日期和 DI 哈希值。由于身份认证 API 可在游戏希望的任意时点调用,因此难以与登录时获取的 PlayerID 进行映射。因此,身份认证的 DI 哈希值不能用于用户识别。

  • 手机号
  • 出生日期
  • DI 哈希值(Hashed DI)

调用 API 后若未能正常接收结果,请再次调用身份认证 API 进行重试。

API Reference: hive.AuthV4.showIdentityVerification

using hive;

AuthV4.showIdentityVerification((ResultAPI result, Identity identity) => {    
    if (result.isSuccess()) {    
        // API call successful
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE setup 前调用
        // CANCELED 在收到认证结果前关闭窗口
        // RESPONSE_FAIL 非正常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
    }
});
#include "HiveAuthV4.h"

FHiveAuthV4::showIdentityVerification(FHiveAuthV4OnIdentityVerificationDelegate::CreateLambda([this](const FHiveResultAPI& Result, FHiveIdentity& identity) {
    if (Result.IsSuccess()) {
        // API call successful
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE setup 前调用
        // CANCELED 在收到认证结果前关闭窗口
        // RESPONSE_FAIL 非正常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
    }
}));

API Reference: AuthV4::showIdentityVerification

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;

AuthV4::showIdentityVerification([=](ResultAPI result, Identity identity) {    
    if (result.isSuccess()) {    
        // API call successful
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE setup 前调用
        // CANCELED 在收到认证结果前关闭窗口
        // RESPONSE_FAIL 非正常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
    }   
});

API Reference: AuthV4.showIdentityVerification

import com.hive.AuthV4    
import com.hive.ResultAPI    

AuthV4.showIdentityVerification(object : AuthV4.AuthV4ShowIdentityVerificationListener {    
    override fun onAuthV4ShowIdentityVerification(result: ResultAPI, identity: Identity?) {    
        if (result.isSuccess) {    
            // API call successful
            // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
        } else {
            // NEED_INITIALIZE setup 前调用
            // CANCELED 在收到认证结果前关闭窗口
            // RESPONSE_FAIL 非正常响应
            // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
        } 
    }    
})

API Reference: AuthV4.showIdentityVerification

import com.hive.AuthV4;    
import com.hive.ResultAPI;    

AuthV4.showIdentityVerification(result, identity -> {    
    if (result.isSuccess()) {    
        // API call successful
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE setup 前调用
        // CANCELED 在收到认证结果前关闭窗口
        // RESPONSE_FAIL 非正常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
    }
});

API Reference: AuthV4Interface.showIdentityVerification

import HIVEService

AuthV4Interface.showIdentityVerification() { result, identity in    
    if result.isSuccess() {    
        // API call successful
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE setup 前调用
        // CANCELED 在收到认证结果前关闭窗口
        // RESPONSE_FAIL 非正常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
    }
}

API Reference: HIVEAuthV4:showIdentityVerification

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 showIdentityVerification: ^(HIVEResultAPI *result, HIVEIdentity *> *identity) {    
    if ([result isSuccess]) {    
        // API call successful
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE setup 前调用
        // CANCELED 在收到认证结果前关闭窗口
        // RESPONSE_FAIL 非正常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 身份认证库引用失败
    }
}];

成人认证与身份认证的 DI 哈希值对比

分类 成人认证 身份认证
DI 哈希值 可用于用户识别并可与 PlayerID 映射 仅为身份认证结果值,无法映射
特点 与登录会话关联,可作为标识符使用 与登录状态无关即可调用,禁止作为标识符使用(仅用于一次性确认)

同时使用身份认证与成人认证,或身份认证与设备管理时

当应用中组合使用身份认证与成人认证,或身份认证与设备管理时,为提升用户体验,用户只需通过 PASS App 执行 1 次身份确认流程。 但使用该功能时,必须在登录前先调用身份认证。由于成人认证和设备管理在登录过程中进行,会判断为同一用户并跳过认证流程。若在登录后调用身份认证 API,则难以判断执行成人认证、设备管理与身份认证的是否为同一用户,因此会分别要求 PASS App 认证。

同时使用时,可按以下顺序进行。

  • 调用身份认证 API -> 启动 PASS App -> 身份确认 -> 年龄确认 -> 登录完成
  • 调用身份认证 API -> 启动 PASS App -> 身份确认 -> 设备管理注册 -> 登录完成
  • 调用身份认证 API -> 启动 PASS App -> 身份确认 -> 年龄确认 -> 设备管理注册 -> 登录完成

配置身份认证 + 成人认证时

由于在身份认证过程中已完成 PASS 认证,因此在成人认证阶段仅进行年龄判断。

  • 19 周岁以上成人:正常完成登录
  • 未满 19 周岁的儿童和青少年:返回登录错误或显示“无法使用服务”弹窗消息

身份认证 + 成人认证

配置身份认证 + 设备管理时

由于在身份认证过程中已完成 PASS App 认证,因此在设备管理注册时可跳过所需的一次性密码(OTP)认证流程,从而更快完成。

身份认证 + 设备管理

配置身份认证 + 成人认证 + 设备管理时

由于在身份认证过程中已完成 PASS App 认证,因此成人认证与设备管理流程会被简化。

  • 成人认证:仅进行年龄判断
    • 19 周岁以上成人:登录完成
    • 未满 19 周岁的儿童和青少年:返回登录错误或显示“无法使用服务”弹窗消息
  • 设备管理:跳过注册所需的 OTP 认证流程并快速进行

身份认证 + 成人认证 + 设备管理

<!-- Hive平台提供身份验证服务,以符合韩国合规要求。身份验证服务包括身份认证、成人验证和父母同意功能,并在Hive SDK(以下简称SDK)的Android、iOS和Windows目标上支持,以便在移动和PC游戏中使用。在移动游戏环境中,即使游戏画面以横屏显示,身份验证服务的用户界面也以竖屏方向提供。

身份认证

身份验证是一项允许使用用户手机号码进行身份验证的功能,以限制游戏内的滥用或限制特定年龄组的用户。由于SDK可以在任何游戏登录时调用身份验证API,因此可以在开始进入商店或进入地下城等服务之前进行身份验证。因此,它可以用于仅允许已完成身份验证的用户继续后续的游戏过程。


当SDK调用身份认证API并完成身份认证时,将获得手机号码、出生日期和DI(重复加入验证信息)哈希值作为结果。此时,DI哈希值与当前登录无关,也与PlayerID无关。
如果在调用API后未能获得结果值,可以通过再次调用身份认证API进行重试。

调用身份验证 API 的示例代码如下:

API 参考: hive.AuthV4.showIdentityVerification

using hive;

AuthV4.showIdentityVerification((ResultAPI result, Identity identity) => {    
    if (result.isSuccess()) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收身份验证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用身份验证库
    }
});
#include "HiveAuthV4.h"

FHiveAuthV4::showIdentityVerification(FHiveAuthV4OnIdentityVerificationDelegate::CreateLambda([this](const FHiveResultAPI& Result, FHiveIdentity& identity) {
    if (Result.IsSuccess()) {
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份认证库
    }
}));

API 参考: AuthV4::showIdentityVerification

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;

AuthV4::showIdentityVerification([=](ResultAPI result, Identity identity) {    
    if (result.isSuccess()) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份验证库
    }   
});

API 参考: AuthV4.showIdentityVerification

import com.hive.AuthV4    
import com.hive.ResultAPI    

AuthV4.showIdentityVerification(object : AuthV4.AuthV4ShowIdentityVerificationListener {    
    override fun onAuthV4ShowIdentityVerification(result: ResultAPI, identity: Identity?) {    
        if (result.isSuccess) {    
            // API 调用成功
            // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
        } else {
            // NEED_INITIALIZE 在设置之前被调用
            // CANCELED 窗口在接收认证结果之前关闭
            // RESPONSE_FAIL 异常响应
            // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份验证库
        } 
    }    
})

API 参考: AuthV4.showIdentityVerification

import com.hive.AuthV4;    
import com.hive.ResultAPI;    

AuthV4.showIdentityVerification(result, identity -> {    
    if (result.isSuccess()) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用身份验证库
    }
});

API 参考: AuthV4Interface.showIdentityVerification

import HIVEService

AuthV4Interface.showIdentityVerification() { result, identity in    
    if result.isSuccess() {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份验证库
    }
}

API 参考: HIVEAuthV4:showIdentityVerification

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 showIdentityVerification: ^(HIVEResultAPI *result, HIVEIdentity *> *identity) {    
    if ([result isSuccess]) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用身份认证库
    }
}];

成人验证

被归类为“未成年人禁止使用”的游戏必须限制19岁以下未成年人的访问。Hive平台提供了一项成人验证功能,只有在通过手机身份验证确认成人身份后才能访问游戏。成人验证的有效期为1年,之后将自动进行重新认证过程。

如果在控制台 [身份验证 > 成人身份验证 > 启用设置] 中启用了成人验证功能,则可以在游戏登录期间执行成人验证,而无需在 SDK 中实现单独的代码。

Warning

身份认证和成人验证仅可由在韩国拥有居民注册号码或外国注册号码并持有自己名下手机的用户进行。

成人验证失败时的响应

当未成年人尝试进行成人验证并失败时,他们会收到响应 ResultAPI.CANCELED(-6) 和 ResultAPI.Code.AgeLimit(-1200067), "由于年龄限制而失败。". 游戏公司可以利用此响应以他们希望的方式引导游戏中的未成年用户。

获取DI哈希值

完成成人验证后,在SDK中调用AuthV4.getHashedDi方法获取可以识别成人验证用户的DI哈希值。对DI进行哈希的原因是出于安全考虑,游戏公司可以直接使用这个哈希值。由于这个DI哈希值在登录后与PlayerID相关联,因此该哈希值可以作为成人验证用户的标识符。

调用AuthV4.getHashedDi方法以获取与PlayerID关联的DI哈希值的示例代码如下:

API 参考: hive.AuthV4.getHashedDi

using hive;    
AuthV4.getHashedDi((ResultAPI result, String hashedDi) => {    
    if (result.isSuccess()) {    
        // API call successful 
    } else {
        // NEED_INITIALIZE called before setup
        // INVALID_SESSION called before signIn
        // DEVELOPER_ERROR, CommonLibraryMissing failed to reference adult verification library
    }
});
#include "HiveAuthV4.h"

FHiveAuthV4::getHashedDi(FHiveAuthV4OnHashedDiDelegate::CreateLambda([this](const FHiveResultAPI& Result, FString& hashedDi) {
    if (Result.IsSuccess()) {
        // API调用成功
    } else {
        // NEED_INITIALIZE在设置之前被调用
        // INVALID_SESSION在登录之前被调用
        // DEVELOPER_ERROR,CommonLibraryMissing未能引用成人验证库
    }
}));

API 参考: AuthV4::getHashedDi

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;    
AuthV4::getHashedDi([=](ResultAPI result, string hashedDi) {    
    if (result.isSuccess()) {    
        // API call successful    
    } else {
        // NEED_INITIALIZE called before setup
        // INVALID_SESSION called before signIn
        // DEVELOPER_ERROR, CommonLibraryMissing failed to reference adult verification library
    }   
});

API 参考: AuthV4.getHashedDi

import com.hive.AuthV4    
import com.hive.ResultAPI    

AuthV4.getHashedDi(object : AuthV4.AuthV4GetHashedDiListener {    
    override fun onAuthV4GetHashedDi(result: ResultAPI, hashedDi: String?) {    
        if (result.isSuccess) {    
            // API 调用成功    
        } else {
            // NEED_INITIALIZE 在设置之前被调用
            // INVALID_SESSION 在登录之前被调用
            // DEVELOPER_ERROR, CommonLibraryMissing 无法引用成人验证库
        } 
    }    
})

API 参考: AuthV4.getHashedDi

import com.hive.AuthV4;    
import com.hive.ResultAPI;    

AuthV4.getHashedDi(result, hashedDi -> {    
    if (result.isSuccess()) {    
        // API 调用成功    
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // INVALID_SESSION 在登录之前被调用
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用成人验证库
    }
});

API 参考: AuthV4Interface.getHashedDi

import HIVEService

AuthV4Interface.getHashedDi() { result, hashedDi in    
    if result.isSuccess() {    
        // API 调用成功    
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // INVALID_SESSION 在登录之前被调用
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用成人验证库
    }
}

API 参考: HIVEAuthV4:getHashedDi

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 getHashedDi: ^(HIVEResultAPI *result, NSString *> *hashedDi) {    
    if ([result isSuccess]) {    
        // API 调用成功    
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // INVALID_SESSION 在登录之前被调用
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用成人验证库
    }
}];

家长同意

根据《青少年保护法》,19岁以下的青少年只能在获得父母同意的情况下加入和使用游戏。SDK提供了通过手机身份认证获取父母同意的功能,当未成年人加入PC游戏时。此外,在向父母提供游戏使用详情时,未成年人的出生日期和父母的电子邮件地址会传递给游戏应用。

要获取父母同意信息,您必须在完成父母同意后调用getParentalConsentInfo()方法。getParentalConsentInfo方法提供在父母同意期间提供的用户(未成年人)的出生日期和父母的电子邮件地址。

获取父母同意信息的示例代码如下:

API 参考: hive.AuthV4.getParentalConsentInfo

using hive;    

    AuthV4.ParentalConsentInfo parentalConsentInfo = AuthV4.getParentalConsentInfo();    
#include "HiveAuthV4.h"

TOptional<FHiveParentalConsentInfo> ParentalConsentInfo = FHiveAuthV4::GetParentalConsentInfo();

API 参考: AuthV4::getParentalConsentInfo

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    AuthV4::ParentalConsentInfo parentalConsentInfo = AuthV4::getParentalConsentInfo();    

<!-- Hive平台提供身份验证服务,以符合韩国合规要求。身份验证服务包括身份认证、成人验证和父母同意功能,并在Hive SDK(以下简称SDK)的Android、iOS和Windows目标上支持,以便在移动和PC游戏中使用。在移动游戏环境中,即使游戏画面以横屏显示,身份验证服务的用户界面也以竖屏方向提供。

身份认证

身份验证是一项允许使用用户手机号码进行身份验证的功能,以限制游戏内的滥用或限制特定年龄组的用户。由于SDK可以在任何游戏登录时调用身份验证API,因此可以在开始进入商店或进入地下城等服务之前进行身份验证。因此,它可以用于仅允许已完成身份验证的用户继续后续的游戏过程。


当SDK调用身份认证API并完成身份认证时,将获得手机号码、出生日期和DI(重复加入验证信息)哈希值作为结果。此时,DI哈希值与当前登录无关,也与PlayerID无关。
如果在调用API后未能获得结果值,可以通过再次调用身份认证API进行重试。

调用身份验证 API 的示例代码如下:

API 参考: hive.AuthV4.showIdentityVerification

using hive;

AuthV4.showIdentityVerification((ResultAPI result, Identity identity) => {    
    if (result.isSuccess()) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收身份验证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用身份验证库
    }
});
#include "HiveAuthV4.h"

FHiveAuthV4::showIdentityVerification(FHiveAuthV4OnIdentityVerificationDelegate::CreateLambda([this](const FHiveResultAPI& Result, FHiveIdentity& identity) {
    if (Result.IsSuccess()) {
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份认证库
    }
}));

API 参考: AuthV4::showIdentityVerification

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;

AuthV4::showIdentityVerification([=](ResultAPI result, Identity identity) {    
    if (result.isSuccess()) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份认证库
    }   
});

API 参考: AuthV4.showIdentityVerification

import com.hive.AuthV4    
import com.hive.ResultAPI    

AuthV4.showIdentityVerification(object : AuthV4.AuthV4ShowIdentityVerificationListener {    
    override fun onAuthV4ShowIdentityVerification(result: ResultAPI, identity: Identity?) {    
        if (result.isSuccess) {    
            // API 调用成功
            // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
        } else {
            // NEED_INITIALIZE 在设置之前被调用
            // CANCELED 窗口在接收认证结果之前关闭
            // RESPONSE_FAIL 异常响应
            // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份验证库
        } 
    }    
})

API 参考: AuthV4.showIdentityVerification

import com.hive.AuthV4;    
import com.hive.ResultAPI;    

AuthV4.showIdentityVerification(result, identity -> {    
    if (result.isSuccess()) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收身份验证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用身份验证库
    }
});

API 参考: AuthV4Interface.showIdentityVerification

import HIVEService

AuthV4Interface.showIdentityVerification() { result, identity in    
    if result.isSuccess() {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收身份验证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用身份验证库
    }
}

API 参考: HIVEAuthV4:showIdentityVerification

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 showIdentityVerification: ^(HIVEResultAPI *result, HIVEIdentity *> *identity) {    
    if ([result isSuccess]) {    
        // API 调用成功
        // identity.phoneCode, phoneNumber, dateOfBirth, hashedDi
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // CANCELED 窗口在接收认证结果之前关闭
        // RESPONSE_FAIL 异常响应
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用身份认证库
    }
}];

成人验证

被归类为“未成年人禁止使用”的游戏必须限制19岁以下未成年人的访问。Hive平台提供了一项成人验证功能,只有在通过手机身份验证确认成人身份后才能访问游戏。成人验证的有效期为1年,之后将自动进行重新认证过程。

如果在控制台 [身份验证 > 成人身份验证 > 启用设置] 中启用了成人验证功能,则可以在游戏登录期间执行成人验证,而无需在 SDK 中实现单独的代码。

Warning

身份认证和成人验证仅可由在韩国拥有居民注册号码或外国注册号码并持有自己名下手机的用户进行。

成人验证失败时的响应

当未成年人尝试进行成人验证并失败时,他们会收到响应 ResultAPI.CANCELED(-6) 和 ResultAPI.Code.AgeLimit(-1200067), "由于年龄限制而失败。". 游戏公司可以利用此响应以他们希望的方式引导游戏中的未成年用户。

获取DI哈希值

完成成人验证后,在SDK中调用AuthV4.getHashedDi方法获取可以识别成人验证用户的DI哈希值。对DI进行哈希的原因是出于安全考虑,游戏公司可以直接使用这个哈希值。由于这个DI哈希值在登录后与PlayerID相关联,因此该哈希值可以作为成人验证用户的标识符。

调用AuthV4.getHashedDi方法以获取与PlayerID关联的DI哈希值的示例代码如下:

API 参考: hive.AuthV4.getHashedDi

using hive;    
AuthV4.getHashedDi((ResultAPI result, String hashedDi) => {    
    if (result.isSuccess()) {    
        // API call successful 
    } else {
        // NEED_INITIALIZE called before setup
        // INVALID_SESSION called before signIn
        // DEVELOPER_ERROR, CommonLibraryMissing failed to reference adult verification library
    }
});
#include "HiveAuthV4.h"

FHiveAuthV4::getHashedDi(FHiveAuthV4OnHashedDiDelegate::CreateLambda([this](const FHiveResultAPI& Result, FString& hashedDi) {
    if (Result.IsSuccess()) {
        // API调用成功
    } else {
        // NEED_INITIALIZE在设置之前被调用
        // INVALID_SESSION在登录之前被调用
        // DEVELOPER_ERROR,CommonLibraryMissing未能引用成人验证库
    }
}));

API 参考: AuthV4::getHashedDi

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;    
AuthV4::getHashedDi([=](ResultAPI result, string hashedDi) {    
    if (result.isSuccess()) {    
        // API call successful    
    } else {
        // NEED_INITIALIZE called before setup
        // INVALID_SESSION called before signIn
        // DEVELOPER_ERROR, CommonLibraryMissing failed to reference adult verification library
    }   
});

API 参考: AuthV4.getHashedDi

import com.hive.AuthV4    
import com.hive.ResultAPI    

AuthV4.getHashedDi(object : AuthV4.AuthV4GetHashedDiListener {    
    override fun onAuthV4GetHashedDi(result: ResultAPI, hashedDi: String?) {    
        if (result.isSuccess) {    
            // API 调用成功    
        } else {
            // NEED_INITIALIZE 在设置之前被调用
            // INVALID_SESSION 在登录之前被调用
            // DEVELOPER_ERROR, CommonLibraryMissing 无法引用成人验证库
        } 
    }    
})

API 参考: AuthV4.getHashedDi

import com.hive.AuthV4;    
import com.hive.ResultAPI;    

AuthV4.getHashedDi(result, hashedDi -> {    
    if (result.isSuccess()) {    
        // API 调用成功    
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // INVALID_SESSION 在登录之前被调用
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用成人验证库
    }
});

API 参考: AuthV4Interface.getHashedDi

import HIVEService

AuthV4Interface.getHashedDi() { result, hashedDi in    
    if result.isSuccess() {    
        // API 调用成功    
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // INVALID_SESSION 在登录之前被调用
        // DEVELOPER_ERROR, CommonLibraryMissing 无法引用成人验证库
    }
}

API 参考: HIVEAuthV4:getHashedDi

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 getHashedDi: ^(HIVEResultAPI *result, NSString *> *hashedDi) {    
    if ([result isSuccess]) {    
        // API 调用成功    
    } else {
        // NEED_INITIALIZE 在设置之前被调用
        // INVALID_SESSION 在登录之前被调用
        // DEVELOPER_ERROR, CommonLibraryMissing 未能引用成人验证库
    }
}];

家长同意

根据《青少年保护法》,19岁以下的青少年只能在获得父母同意的情况下加入和使用游戏。SDK提供了通过手机身份认证获取父母同意的功能,当未成年人加入PC游戏时。此外,在向父母提供游戏使用详情时,未成年人的出生日期和父母的电子邮件地址会传递给游戏应用。

要获取父母同意信息,您必须在完成父母同意后调用getParentalConsentInfo()方法。getParentalConsentInfo方法提供在父母同意期间提供的用户(未成年人)的出生日期和父母的电子邮件地址。

获取父母同意信息的示例代码如下:

API 参考: hive.AuthV4.getParentalConsentInfo

using hive;    

    AuthV4.ParentalConsentInfo parentalConsentInfo = AuthV4.getParentalConsentInfo();    
#include "HiveAuthV4.h"

TOptional<FHiveParentalConsentInfo> ParentalConsentInfo = FHiveAuthV4::GetParentalConsentInfo();

API 参考: AuthV4::getParentalConsentInfo

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    AuthV4::ParentalConsentInfo parentalConsentInfo = AuthV4::getParentalConsentInfo();