跳轉至

身分驗證服務

為遵守大韓民國相關法令與法規遵循,Hive 平台提供如成人驗證、監護人同意、身分驗證等「身分驗證服務」。「身分驗證服務」僅可由在大韓民國持有居民登錄號或外國人登錄號,且持有本人名義手機的使用者執行。

成人驗證

青少年不得使用等級的遊戲,依據《青少年保護法》等相關法令,必須限制未滿 19 歲的未成年人無法使用。Hive 平台的成人驗證功能會透過手機身分驗證確認使用者是否為成人,並僅在確認為成人時提供可登入遊戲。

成人驗證自首次驗證時起 1 年內有效,若在啟動 App 時判定有效期間已到期,將自動進行重新驗證流程。

成人驗證

若在 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 在設定前呼叫
        // 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 在設定前呼叫
        // 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 在設定前呼叫
        // 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 在設定前呼叫
            // 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 在設定前呼叫
        // 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 在設定前呼叫
        // 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 在設定前呼叫
        // 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+、MVNO),輸入以簡訊(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 在設定前呼叫
        // 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 在設定前呼叫
        // 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 在設定前呼叫
        // 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 在設定前呼叫
            // 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 在設定前呼叫
        // 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 在設定前呼叫
        // 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 在設定前呼叫
        // CANCELED 在收到驗證結果前關閉視窗
        // RESPONSE_FAIL 非正常回應
        // DEVELOPER_ERROR, CommonLibraryMissing 參照身分驗證函式庫失敗
    }
}];

成人驗證與身分驗證的 DI 雜湊值整理

分類 成人驗證 身分驗證
DI 雜湊值 可用於使用者識別並可與 PlayerID 映射 僅為單純身分驗證結果值,無法映射
特性 與登入工作階段連動,可作為識別值使用 可在是否登入無關下呼叫,因此禁止作為識別值使用(僅一次性確認用途)

同時使用身分驗證與成人驗證,或身分驗證與裝置管理的情況

在 App 中若將身分驗證與成人驗證,或身分驗證與裝置管理結合使用,為了使用者便利,僅會透過 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 驗證流程,以快速進行

身分驗證 + 成人驗證 + 裝置管理