เข้าสู่ระบบและออกจากระบบ
การเข้าสู่ระบบในการตรวจสอบสิทธิ์ประกอบด้วยขั้นตอนดังต่อไปนี้
Note
- เวอร์ชันที่ต่ำกว่า SDK 4.7.0 ไม่รองรับ Helper โปรดดูที่ [ต่อไปนี้] สำหรับวิธีการเข้าสู่ระบบที่มีอยู่
- สำหรับคำอธิบายเกี่ยวกับ AuthV4.Helper โปรดดูที่หน้า การตรวจสอบสิทธิ์
เข้าสู่ระบบ¶
การเข้าสู่ระบบในการตรวจสอบสิทธิ์ประกอบด้วยขั้นตอนดังต่อไปนี้
- การเข้าสู่ระบบอัตโนมัติและการเข้าสู่ระบบโดยปริยาย
- การเข้าสู่ระบบโดยชัดแจ้ง
- ตรวจสอบบัญชี IdP ที่เข้าสู่ระบบบนอุปกรณ์
- การเข้าสู่ระบบของแขก
Authv4Helper เป็นคลาสที่ทำการประมวลผลหลายขั้นตอนที่เกี่ยวข้องกับการเข้าสู่ระบบและถูกกำหนดค่าให้ไปยังหน้าจอที่เหมาะสมตามค่าการตอบกลับ
โปรดดูจุดต่อไปนี้เมื่อกำหนดค่าการเข้าสู่ระบบ。
Note
Apple ไม่สนับสนุน Apple Game Center และการซื้อในแอปใน iOS enterprise builds ดังนั้นการเข้าสู่ระบบโดยอัตโนมัติด้วยบัญชี Apple Game Center ไม่สามารถใช้ได้ใน iOS enterprise builds และการเข้าสู่ระบบแบบชัดเจนก็ไม่สามารถใช้ Apple Game Center ได้เช่นกัน เมื่อสร้างสำหรับ iOS enterprise ประเภทการเข้าสู่ระบบใน คอนโซล จะต้องไม่รวม Apple Game Center
Note
- หากเกมมีเป้าหมายหลักที่เด็กอายุต่ำกว่า 13 ปี บริการเกม Google Play จะไม่สามารถนำมาใช้ได้ และการเข้าสู่ระบบโดยอัตโนมัติไม่สามารถใช้ได้ในเวอร์ชัน Google สำหรับข้อมูลเพิ่มเติม โปรดดูที่ Quality Checklist for Google Play Games Services.
- การเข้าสู่ระบบโดยอัตโนมัติสำหรับเกม Google Play ควรพยายามทำในระหว่างการเข้าสู่ระบบครั้งแรกเท่านั้น สำหรับข้อมูลเพิ่มเติม โปรดดูที่คู่มือของนักพัฒนา Google 1.5 Remember if players declined signing-in.
Note
- ในประเทศจีน เกม Google Play ไม่สามารถใช้งานได้ ดังนั้นการเข้าสู่ระบบโดยอัตโนมัติจึงไม่สามารถใช้งานได้บน Android
- ในประเทศจีน Facebook ไม่สามารถใช้งานได้ ดังนั้น Facebook จึงไม่รวมอยู่ในรายการ IdP
- ในประเทศจีน ผู้ใช้ที่มีการรับรองชื่อจริงเท่านั้นที่สามารถเติมเงินหรือใช้บริการได้ (มีผลตั้งแต่วันที่ 1 พฤษภาคม 2017) ดังนั้นการเข้าสู่ระบบแบบแขกจึงไม่รวมอยู่ในรายการ IdP สำหรับการเข้าสู่ระบบจาก IP ของจีน
Note
iOS ไม่แสดงหน้าจอเข้าสู่ระบบแม้ว่า การเข้าสู่ระบบ Apple Game Center จะถูกยกเลิก ดังนั้น ข้อความแนะนำสามารถแสดงโดยตรงโดย SDK ที่เรียกใช้วิธีการ showGameCenterLoginCancelDialog() ของคลาส AuthV4Helper หรือเลือกที่จะให้เกมแสดง หากคุณต้องการให้ข้อความสำหรับผู้ใช้เพื่อเชื่อมต่อบัญชี Game Center ของพวกเขาอีกครั้ง ให้ใช้ ข้อความแนะนำการยกเลิก Game Center เมื่อผลลัพธ์ของการเรียกกลับของ AuthV4.signIn(AuthV4.ProviderType.APPLE, ...) และ AuthV4.connect(AuthV4.ProviderType.APPLE, ...) เป็น Cancel.
Note
ถ้าผู้ใช้พยายามเข้าสู่ระบบด้วย Apple เมื่ออุปกรณ์ของพวกเขาไม่ได้เข้าสู่ระบบด้วย Apple ID จะเกิดข้อผิดพลาด AuthV4SignInAppleUnknown ในระหว่างกระบวนการเรียกใช้เมธอด connect(), signIn() ของคลาส AuthV4Helper ที่นี่ ป๊อปอัปคำแนะนำการเข้าสู่ระบบด้วย Apple ID จะถูกแสดงโดยอัตโนมัติ ดังนั้นสตูดิโอเกมจึงไม่จำเป็นต้องแสดงป๊อปอัปคำแนะนำแยกต่างหาก
หากผู้ใช้พยายามเข้าสู่ระบบด้วย Apple ในขณะที่อุปกรณ์ของพวกเขายังไม่ได้เข้าสู่ระบบด้วย Apple ID จะเกิดข้อผิดพลาด AuthV4SignInAppleUnknown ในระหว่างกระบวนการเรียกใช้ connect(), signIn() ของคลาส AuthV4Helper methods ขึ้นมา โดยจะมีป๊อปอัปแนะแนวการเข้าสู่ระบบด้วย Apple ID แสดงขึ้นโดยอัตโนมัติ ดังนั้นสตูดิโอเกมจึงไม่จำเป็นต้องแสดง popup แยกต่างหากสำหรับการแนะแนว
Note
สำหรับการเข้าสู่ระบบ X IdP บน PC การเข้าสู่ระบบด้วยบัญชี X เป็นไปได้ แต่การเข้าสู่ระบบด้วยการรวมบัญชี Google และ Apple บนหน้าจอเข้าสู่ระบบ X ไม่ได้รับการสนับสนุน ในการเข้าสู่ระบบ X ด้วยการรวมบัญชี Google หรือ Apple คุณต้องเข้าสู่ระบบด้วยบัญชีที่เกี่ยวข้องในเบราว์เซอร์ภายนอกก่อนแล้วจึงดำเนินการเข้าสู่ระบบ X ในเกม
สำหรับการเข้าสู่ระบบ X IdP บน Steam Deck รองรับเฉพาะการเข้าสู่ระบบด้วยบัญชี X เท่านั้น
Hive SDK Windows notice
ในการสร้าง Hive SDK สำหรับ Windows ทั้งหมด หน้าต่างรอการเข้าสู่ระบบ IdP เช่นตัวอย่างด้านล่างอาจปรากฏขึ้นเมื่อเรียกใช้วิธีการ AuthV4.Helper.signIn, AuthV4.showSignIn หรือ AuthV4.signIn แม้ว่าหน้าต่างรอการนี้จะปิดลง การเข้าสู่ระบบยังไม่สมบูรณ์.<
การเข้าสู่ระบบจะสมบูรณ์ก็ต่อเมื่อได้รับการตอบกลับผลจากการเรียกใช้วิธีการ และการส่งการตอบกลับอาจล่าช้าขึ้นอยู่กับสภาพแวดล้อมของเครือข่าย ดังนั้นจึงแนะนำให้แจ้งผู้ใช้เกี่ยวกับสถานะความก้าวหน้าของการเข้าสู่ระบบผ่านการแสดงข้อความหรือสัญลักษณ์การโหลดภายในหน้าจอเกม
การเข้าสู่ระบบอัตโนมัติและการเข้าสู่ระบบโดยปริยาย¶
การเข้าสู่ระบบอัตโนมัติ¶
นี่หมายถึงวิธีการเข้าสู่ระบบที่ผู้ใช้ไม่เลือกวิธีการเข้าสู่ระบบ และใน iOS จะเชื่อมโยงกับบัญชี Apple Game Center โดยอัตโนมัติ ในขณะที่ใน Android จะเชื่อมโยงกับบัญชี Google Play Games มันจะดำเนินการเข้าสู่ระบบอัตโนมัติและทำการเข้าสู่ระบบโดยปริยายในกรณีที่การเข้าสู่ระบบอัตโนมัติล้มเหลว
ในการใช้การเข้าสู่ระบบอัตโนมัติในสภาพแวดล้อม iOS คุณต้องเพิ่ม Game Center Entitlement ซึ่ง Unity จะเพิ่มโดยอัตโนมัติผ่าน Unity PostProcess หากคุณได้ทำการตรวจสอบ 'Apple GameCenter' Dependency ใน iOS Native Xcode จะเพิ่ม Game Center Entitlement โดยอัตโนมัติ
โหมดออฟไลน์¶
ใน Hive SDK v4 23.1.0 ขึ้นไป ฟีเจอร์การเข้าสู่ระบบอัตโนมัติ (AuthV4.signIn โดยใช้ ProviderType.AUTO หรือ AuthV4.Helper.signIn) สามารถให้บริการได้แม้ว่าผู้ใช้จะไม่ได้เชื่อมต่อกับเครือข่ายเมื่อแอปพลิเคชันถูกเปิดใช้งาน เพื่อใช้โหมดออฟไลน์ กรุณาทำตามคำแนะนำด้านล่าง
- คุณต้องได้ทำการเรียกใช้งานแอปออนไลน์สำหรับการเข้าสู่ระบบที่ชัดเจน, โดยนัย, แขก, หรือแบบกำหนดเองสำเร็จ และได้รับ
playerIdและplayerToken。
จากมุมมองของนักพัฒนาแอป จำเป็นต้องมีการเรียกใช้ AuthV4.Helper.signIn, AuthV4.showSignIn, หรือ AuthV4.signInWithAuthKey อย่างน้อยหนึ่งครั้งในขณะที่ออนไลน์เพื่อรับ playerId และ playerToken ผ่านการเรียกกลับ จากมุมมองของผู้ใช้ ผู้ใช้ต้องเข้าสู่ระบบแอปอย่างน้อยหนึ่งครั้งในขณะที่อุปกรณ์ของพวกเขาเชื่อมต่อกับเครือข่าย อย่างไรก็ตาม หากบัญชีของผู้ใช้ถูกระงับหรือจำกัดในขณะที่พวกเขาพยายามเข้าสู่ระบบครั้งสุดท้ายในขณะที่ออนไลน์ ผู้ใช้จะไม่สามารถเข้าสู่ระบบได้แม้ในโหมดออฟไลน์
- เปิดโหมดออฟไลน์ในคอนโซล Hive App Center > Project Management > Game Details > Hive Product Settings.
Note
เพื่อให้การลงชื่อเข้าใช้ Google โดยอัตโนมัติสำหรับผู้ใช้ที่ใช้ระบบปฏิบัติการ Android ในโหมดออฟไลน์ โปรดดูที่ ต่อไปนี้.
การเข้าสู่ระบบอัตโนมัติในสภาพแวดล้อม Windows¶
สภาพแวดล้อม Windows ยังรองรับการเข้าสู่ระบบอัตโนมัติ ซึ่งสามารถเปิด/ปิดใช้งานได้ใน Hive Console App Center อย่างไรก็ตาม การเข้าสู่ระบบอัตโนมัติใน Windows มีพฤติกรรมที่แตกต่างจากบนมือถือ ความแตกต่างสำหรับการเข้าสู่ระบบอัตโนมัติใน Windows มีดังนี้
- บนอุปกรณ์เคลื่อนที่ หลังจากเข้าสู่ระบบ สถานะการเข้าสู่ระบบจะถูกเก็บรักษาไว้เสมอผ่านการเข้าสู่ระบบอัตโนมัติ แต่ใน Windows จะถูกเก็บรักษาไว้เฉพาะเมื่อผู้ใช้เปิดใช้งานช่องทำเครื่องหมาย "จำฉันไว้ในระบบ" (แสดงที่ด้านล่างของรายการ IdP ใน UI การเข้าสู่ระบบ) ในสถานการณ์อื่น สถานะการเข้าสู่ระบบจะไม่ถูกเก็บรักษา
- เมื่อเรียกใช้ AuthV4Helper.Connect บนอุปกรณ์เคลื่อนที่ หากเปลี่ยนไปใช้บัญชีใหม่ บัญชีใหม่จะยังคงสถานะการเข้าสู่ระบบอัตโนมัติ แต่ใน Windows หากเปลี่ยนไปใช้บัญชีใหม่ บัญชีใหม่จะไม่รักษาสถานะการเข้าสู่ระบบอัตโนมัติ
การเข้าสู่ระบบโดยปริยาย¶
AuthV4.Helper.signIn พยายามเข้าสู่ระบบโดยอัตโนมัติด้วยการใช้กุญแจโทเค็นการตรวจสอบสิทธิ์ของ PlayerID หากไม่มีการกุญแจโทเค็นการตรวจสอบสิทธิ์ที่มีอยู่ มันจะเข้าสู่ระบบ Apple Game Center สำหรับ iOS และ Google Play Games สำหรับ Android โดยอัตโนมัติ หากการเข้าสู่ระบบล้มเหลว มันจะกำหนดหน้าจอการเข้าสู่ระบบที่เหมาะสมตามค่าการตอบกลับ
Note
ในการใช้การเข้าสู่ระบบอัตโนมัติ คุณต้องเพิ่ม Game Center Entitlement หากคุณตรวจสอบการพึ่งพา 'Apple GameCenter' มันจะเพิ่ม Entitlement ที่เกี่ยวข้องโดยอัตโนมัติผ่าน Unity PostProcess.
Note
เมื่อใช้คลาส AuthV4Helper
หากผู้ใช้ที่ได้เริ่มเกมปฏิเสธความพยายามในการเข้าสู่ระบบโดยปริยายระหว่าง PGS ระบบจะจดจำสิ่งนี้และจะไม่พยายามเข้าสู่ระบบโดยปริยายอีกต่อไป แม้ว่าการเข้าสู่ระบบอัตโนมัติจะเป็นไปได้ในขณะที่เซสชันของผู้เล่นยังคงอยู่ ระบบจะยังคงจดจำสถานะของการเข้าสู่ระบบโดยปริยายที่ถูกปฏิเสธอยู่ดี เนื้อหานี้อิงจากคู่มือบริการเกม Google Play
ต่อไปนี้คือตัวอย่างโค้ดที่ทำการเข้าสู่ระบบอัตโนมัติ
API Reference: hive.AuthV4.Helper.signIn
// Attempt to sign in (signIn) with Hive SDK
AuthV4.Helper.signIn (delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) {
if (result.isSuccess()) {
// Login successful
} else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g. Application.Quit();
} else {
switch (result.code) {
case ResultAPI.Code.AuthV4ConflictPlayer:
// Account conflict
break;
case ResultAPI.Code.AuthV4HelperImplifiedLoginFail:
// Failed implicit login
// ex) AuthV4.showSignIn(...);
break;
default:
k // Other exceptions
break;
}
}
});
#include "HiveAuthV4.h"
// พยายามเข้าสู่ระบบ (signIn) ไปยัง Hive SDK
FHiveAuthV4::Helper::SignIn(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
if (Result.IsSuccess()) {
// เข้าสู่ระบบสำเร็จ
} else if (Result.NeedExit()) {
// TODO: Implement app exit functionality
// e.g.) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
switch (Result.Code) {
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// ข้อขัดแย้งของบัญชี
break;
case FHiveResultAPI::ECode::AuthV4HelperImplifiedLoginFail:
// ล้มเหลวในการเข้าสู่ระบบโดยนัย
// ex) FHiveAuthV4::ShowSigIn()
break;
default:
// ข้อยกเว้นอื่น ๆ
break;
}
}
}));
API Reference: Auth4::Helper::signIn
// Attempt to sign in (signIn) with Hive SDK
AuthV4::Helper::signIn([=](ResultAPI const & result, std::shared_ptr playerInfo) {
if (result.isSuccess()) {
// Login successful
} else if (result.needExit()) {
// TODO: Implement app exit functionality
// For Cocos2d-x engine users
// e.g. exit(0);
// For Unreal engine users
// e.g. UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
switch (result.code) {
case ResultAPI::AuthV4ConflictPlayer:
// Account conflict
break;
case ResultAPI::AuthV4HelperImplifiedLoginFail:
// Implicit login failed
// ex) AuthV4.showSignIn(...);
break;
default:
break;
}
}
});
API Reference: hive.AuthV4.Helper.signIn
// พยายามเข้าสู่ระบบโดยใช้ Hive SDK
AuthV4.Helper.signIn(object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result.isSuccess) {
// เข้าสู่ระบบสำเร็จ
} else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g.) exitProcess(0)
} else {
when (result.code) {
ResultAPI.Code.AuthV4ConflictPlayer -> {
// ขัดแย้งบัญชี
}
ResultAPI.Code.AuthV4HelperImplifiedLoginFail -> {
// ล้มเหลวในการเข้าสู่ระบบโดยนัย
// e.g.) AuthV4.showSignIn(...)
}
else -> {
// สถานการณ์ข้อยกเว้นอื่น ๆ
}
}
}
}
})
เอกสารอ้างอิง API: com.hive.AuthV4.Helper.signIn
// Hive SDK AuthV4 authentication UI request
AuthV4.Helper.signIn(new AuthV4.Helper.AuthV4HelperListener() {
@Override
public void onAuthV4Helper(ResultAPI result, PlayerInfo playerInfo) {
if (result.isSuccess()) {
// การตรวจสอบสิทธิ์สำเร็จ
} else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g.) System.exit(0);
} else {
switch (result.code) {
case ResultAPI.Code.AuthV4ConflictPlayer:
// ข้อขัดแย้งบัญชี
break;
case ResultAPI.Code.AuthV4HelperImplifiedLoginFail:
// การเข้าสู่ระบบโดยนัยล้มเหลว
// ex) AuthV4.showSignIn(...);
break;
default:
// สถานการณ์พิเศษอื่น ๆ
break;
}
}
}
});
เอกสาร API: HIVEAuthV4Helper:signIn
// Hive SDK AuthV4 authentication UI request
AuthV4Interface.helper().signIn { (result, playerInfo) in
if result.isSuccess() {
// การตรวจสอบสิทธิ์สำเร็จ
} else if result.needExit() {
// TODO: Implement app exit functionality
// e.g.) exit(0)
} else {
switch result.getCode() {
case .authV4ConflictPlayer:
// ข้อขัดแย้งบัญชี
break
case .authV4HelperImplifiedLoginFail:
// การเข้าสู่ระบบโดยนัยล้มเหลว
// ex) AuthV4.showSignIn(...)
break
default:
// สถานการณ์ข้อยกเว้นอื่น ๆ
break
}
}
}
}
API Reference: HIVEAuthV4:signIn
// Attempt to sign in (signIn) to Hive SDK
[[HIVEAuthV4 helper] signIn:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
if (result.isSuccess) {
// การเข้าสู่ระบบสำเร็จ
}
else if (result.needExit) {
// TODO: Implement app exit functionality
// ex) exit(0);
}
else {
switch (result.code) {
case kAuthV4ConflictPlayer:
// ข้อขัดแย้งบัญชี
break;
case kAuthV4HelperImplifiedLoginFail:
// การเข้าสู่ระบบโดยนัยล้มเหลว
// ex) [HIVEAuthV4 showSignIn:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
// // ทำอะไรบางอย่าง...
// }];
break;
default:
// ข้อยกเว้นอื่น ๆ
break;
}
}
}];
พฤติกรรมการเข้าสู่ระบบโดยปริยาย: มือถือ¶
การเข้าสู่ระบบโดยอัตโนมัติสำหรับมือถือ (Hive SDK Unity Android, แพลตฟอร์ม Android/iOS เป็นต้น) (AuthV4.Helper.signIn) จะส่งผลให้เกิดสถานการณ์ความขัดแย้งของบัญชีเมื่อเข้าสู่ระบบด้วยบัญชีที่แตกต่างหลังจากการเข้าสู่ระบบครั้งแรก โดยจะส่งคืนรหัสผลลัพธ์ AuthV4ConflictPlayer และจะมีการแจ้งเตือนผู้ใช้ด้วยกล่องโต้ตอบที่ถามว่าต้องการเข้าสู่ระบบด้วยบัญชีที่เข้าสู่ระบบล่าสุดหรือไม่ (AuthV4.Helper.showConflict การดำเนินการ)
อย่างไรก็ตาม การลงชื่อเข้าใช้ Google โดยไม่ต้องระบุในสภาพแวดล้อมมือถือ Android จะทำงานแตกต่างกันดังนี้
ในสภาพแวดล้อมมือถือ Android การเข้าสู่ระบบด้วย Google Sign-in แบบอิมพลิซิตจะส่งกลับผลลัพธ์เป็นความสำเร็จหรือความล้มเหลวโดยไม่ทำให้เกิดความขัดแย้งของบัญชี (AuthV4ConflictPlayer) ซึ่งแตกต่างจากสภาพแวดล้อมมือถืออื่น ๆ ในภาพด้านบน Legacy Support Google Authentication หมายถึงการเข้าสู่ระบบแบบอิมพลิซิตสำหรับ Google Sign-in ในสภาพแวดล้อมมือถือ Android
หลังจากการเข้าสู่ระบบสำเร็จ หากผู้ใช้พยายามที่จะ การรวม IdP หรือเรียก ความสำเร็จและกระดานผู้นำของ Google จะมี UI แสดงขึ้นเพื่อเลือกบัญชี Google (สร้างเซสชันการเข้าสู่ระบบใหม่) หาก PlayerInfo ของบัญชีที่เข้าสู่ระบบอยู่แล้วถูกตรวจสอบและบัญชี Google ที่เลือกใหม่แตกต่างจากข้อมูลนี้ จะเกิดความขัดแย้งของบัญชี (AuthV4ConflictPlayer) ในจุดนี้ หากคุณ จัดการสถานการณ์ความขัดแย้งของบัญชี คุณสามารถเข้าสู่ระบบด้วยบัญชี Google ที่เลือกใหม่ได้
ในสถานการณ์ที่ไม่มีเซสชันการเข้าสู่ระบบที่มีอยู่ (เช่น เมื่อแอปถูกติดตั้งและทำงานเป็นครั้งแรก) การเข้าสู่ระบบแบบอิมพลิซิตของ Google Sign-in ในสภาพแวดล้อมมือถือ Android จะทำงานแตกต่างกันไปขึ้นอยู่กับสถานการณ์ดังนี้
- สถานการณ์ที่มีบัญชี Google บัญชีเดียวที่เข้าสู่ระบบในแอปอยู่ในการตั้งค่าบัญชีของอุปกรณ์ Android OS (สถานการณ์ที่บัญชี Google ได้เข้าสู่ระบบในอุปกรณ์ Android OS)
- เข้าสู่ระบบด้วยบัญชี Google
- สถานการณ์ที่มีบัญชี Google สองบัญชีหรือมากกว่าที่เข้าสู่ระบบในแอปอยู่ในการตั้งค่าบัญชีของอุปกรณ์ Android OS (สถานการณ์ที่บัญชี Google เฉพาะได้เข้าสู่ระบบในอุปกรณ์ Android OS)
- แสดง UI ที่อนุญาตให้เลือกหนึ่งในบัญชี Google ที่เข้าสู่ระบบ
- เข้าสู่ระบบหลังจากเลือกบัญชีจาก UI
- หากผู้ใช้ปิด UI โดยไม่เลือกบัญชี Google ใด ๆ ให้แสดง UI พร้อมรายการบัญชี Google ทั้งหมดที่มีอยู่ในการตั้งค่าบัญชีของอุปกรณ์ Android OS
- หากผู้ใช้เลือกบัญชี Google ที่ต้องการจากรายการ UI ของบัญชี Google ทั้งหมด ให้เข้าสู่ระบบด้วยบัญชีนั้น
- สถานการณ์ที่ไม่มีบัญชี Google ที่เข้าสู่ระบบในแอป
- แสดง UI พร้อมรายการบัญชี Google ทั้งหมดที่มีอยู่ในการตั้งค่าบัญชีของอุปกรณ์ Android OS
- หากผู้ใช้เลือกบัญชี Google ที่ต้องการจากรายการ UI ของบัญชี Google ทั้งหมด ให้เข้าสู่ระบบด้วยบัญชีนั้น
ภาพด้านล่างแสดงตัวอย่าง UI สำหรับสามสถานการณ์ข้างต้น จากทางซ้าย พวกเขาตรงกับสถานการณ์ 1, 2 และ 3.
Note
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรับรองความถูกต้องของ Google โปรดดูที่ Google Credential Manager.
พฤติกรรมการเข้าสู่ระบบโดยปริยาย: PC¶
การเข้าสู่ระบบโดยอัตโนมัติบน PC (แพลตฟอร์ม Windows เช่น Hive SDK Unity Windows) (AuthV4.Helper.signIn) จะทำการเข้าสู่ระบบด้วยบัญชีที่เข้าสู่ระบบล่าสุดโดยอัตโนมัติเมื่อทำการเข้าสู่ระบบด้วยบัญชีที่แตกต่างหลังจากการเข้าสู่ระบบครั้งแรก จะไม่มีสถานการณ์ขัดแย้งของบัญชีเกิดขึ้น
การเข้าสู่ระบบที่ชัดเจน¶
การเข้าสู่ระบบแบบชัดเจนหมายถึงกระบวนการที่ผู้ใช้เลือก IdP เพื่อทำการตรวจสอบสิทธิ์ หากการเข้าสู่ระบบอัตโนมัติและการเข้าสู่ระบบโดยนัยล้มเหลว ให้ดำเนินการเพื่อให้การเข้าสู่ระบบแบบชัดเจนเกิดขึ้นเมื่อผู้ใช้คลิกที่ชื่อเรื่องหลังจากย้ายไปยังหน้าจอชื่อเกม
UI การเข้าสู่ระบบแบบชัดเจนสามารถใช้ UI ที่จัดเตรียมโดย Hive SDK หรือปรับแต่งได้โดยใช้รายการ IdP ที่ส่งคืนเป็นผลลัพธ์หลังจากการเริ่มต้น Hive SDK เสร็จสมบูรณ์ หากคุณกำลังปรับแต่ง UI โปรดดูที่ส่วน การปรับแต่งการเข้าสู่ระบบแบบชัดเจน
รายการ IdP ถูกควบคุมและจัดเตรียมโดยแพลตฟอร์ม Hive ตามนโยบายของแต่ละประเทศ ตัวอย่างเช่น ในประเทศจีน เกม Google Play และ Facebook ไม่สามารถใช้งานได้สำหรับแขก
สกรีนช็อตการเข้าสู่ระบบที่ชัดเจน¶
UI การเลือก IdP ที่จัดเตรียมโดย SDK 
เมื่อทำการติดตั้งโดยใช้ UI ที่จัดเตรียมโดย SDK¶
ในการดำเนินการเข้าสู่ระบบอย่างชัดเจนโดยใช้ UI ที่จัดเตรียมโดย SDK คุณสามารถเรียกใช้วิธีการ showSignIn() เพื่อเรียก UI รายการ IdP ได้เลย
Note
ผู้ใช้ต้องมีวิธีการเข้าสู่ระบบอีกครั้งหากปิดปุ่ม 'X' ใน UI การเลือก IdP ที่ให้โดย SDK ผู้ใช้ยังไม่ได้เข้าสู่ระบบ
Note
ในการปรับแต่งการลงชื่อเข้าใช้ที่ชัดเจน โปรดดูที่ ต่อไปนี้.
API Reference: hive.AuthV4.showSignIn
// Hive SDK AuthV4 authentication UI request
AuthV4.showSignIn((ResultAPI result, AuthV4.PlayerInfo playerInfo)=>{
if (result.isSuccess()) {
// Authentication successful
// playerInfo : Authenticated user information
// ตัวอย่างการดึงข้อมูลอีเมล
foreach (KeyValuePair<AuthV4.ProviderType, AuthV4.ProviderInfo> entry in playerInfo.providerInfoData) {
AuthV4.ProviderInfo providerInfo = entry.Value;
if(providerInfo.providerEmail != null && providerInfo.providerEmail != "") {
string email = providerInfo.providerEmail;
break;
}
}
}
else if (result.needExit()) {
// TODO: Implement the app exit functionality
// e.g.) Application.Quit();
}
});
#include "HiveAuthV4.h"
// การร้องขอ UI การตรวจสอบสิทธิ์ AuthV4 ของ Hive SDK
FHiveAuthV4::ShowSignIn(FHiveAuthV4OnSignInDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHivePlayerInfo& PlayerInfo) {
if (Result.IsSuccess()) {
// การตรวจสอบสิทธิ์สำเร็จ (PlayerInfo: ข้อมูลผู้ใช้ที่ตรวจสอบสิทธิ์)
// ตัวอย่างการดึงข้อมูลอีเมล
for (const auto& ProviderInfoEntry : PlayerInfo.ProviderInfoData) {
FHiveProviderInfo ProviderInfo = ProviderInfoEntry.Value;
FString Email = ProviderInfo.ProviderEmail;
}
} else if (Result.NeedExit()) {
// TODO: Implement app exit functionality
// ตัวอย่าง) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
}
}));
API Reference: AuthV4::showSignIn
// Hive SDK AuthV4 authentication UI request
AuthV4::showSignIn([=](ResultAPI const & result, PlayerInfo const & playerInfo) {
if (result.isSuccess()) {
// Authentication successful
// playerInfo: authenticated user information
// ตัวอย่างการดึงข้อมูลอีเมล
for(auto it = playerInfo.providerInfoData.begin(); it != playerInfo.providerInfoData.end(); ++it) {
hive::ProviderInfo providerInfo = it->second;
if(!providerInfo.providerEmail.empty()) {
std::string email = providerInfo.providerEmail;
break;
}
}
}
else if (result.needExit()) {
// TODO: Implement app exit functionality
// Cocos2d-x engine users
// ตัวอย่าง) exit(0);
// Unreal engine users
// ตัวอย่าง) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
}
});
API Reference: com.hive.AuthV4.showSignIn
// Hive SDK AuthV4 authentication UI request
AuthV4.showSignIn(object : AuthV4.AuthV4SignInListener {
override fun onAuthV4SignIn(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result.isSuccess) {
// การตรวจสอบสิทธิ์สำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมล
playerInfo?.let {
for ((key, value) in it.providerInfoData) {
var providerInfo: AuthV4.ProviderInfo = value
if(providerInfo.providerEmail.isNotEmpty()) {
val email = providerInfo.providerEmail
break
}
}
}
} else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g.) exitProcess(0)
}
}
})
API Reference: com.hive.AuthV4.showSignIn
// Hive SDK AuthV4 authentication UI request
AuthV4.showSignIn(new AuthV4.AuthV4SignInListener() {
@Override
public void onAuthV4SignIn(ResultAPI result, AuthV4.PlayerInfo playerInfo) {
if (result.isSuccess()) {
// การตรวจสอบสิทธิ์สำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมล
if(playerInfo != null) {
for (Map.Entry<AuthV4.ProviderType, AuthV4.ProviderInfo> entry : playerInfo.getProviderInfoData().entrySet()) {
AuthV4.ProviderInfo providerInfo = entry.getValue();
if (providerInfo.getProviderEmail() != "") {
String email = providerInfo.getProviderEmail();
break;
}
}
}
}
else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g. System.exit(0);
}
}
});
API Reference: HIVEAuthV4:showSignIn
var email = String()
// Hive SDK AuthV4 authentication UI request
AuthV4Interface.showSignIn { (result, playerInfo) in
if result.isSuccess() {
// การตรวจสอบสิทธิ์สำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมล
if let playerInfo = playerInfo {
// ค้นหาข้อมูล providerInfo ที่มี providerEmail (ผู้ให้บริการที่เข้าสู่ระบบอยู่ในขณะนี้)
for key in playerInfo.providerInfoData.keys {
if let providerInfo = playerInfo.providerInfoData[key],
providerInfo.providerEmail.count > 0 {
// providerEmail != ""
email = providerInfo.providerEmail
break
}
}
}
} else if result.needExit() {
// TODO: Implement app exit functionality
// e.g. exit(0)
}
}
API Reference: HIVEAuthV4:showSignIn
__block NSString* email = @"";
// Hive SDK AuthV4 การร้องขอ UI การตรวจสอบสิทธิ์
[HIVEAuthV4 showSignIn:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
if([result isSuccess]){
// การตรวจสอบสิทธิ์สำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมล
if(playerInfo != nil) {
// ค้นหาข้อมูล providerInfo ด้วย providerEmail ที่มีอยู่ (ผู้ให้บริการที่เข้าสู่ระบบในปัจจุบัน)
for (NSString* key in playerInfo.providerInfoData.allKeys) {
HIVEProviderInfo* providerInfo = playerInfo.providerInfoData[key];
if (providerInfo != nil && providerInfo.providerEmail.length > 0) {
// providerEmail != ""
email = providerInfo.providerEmail;
break;
}
}
}
} else if ([result needExit]) {
// TODO: Implement app exit functionality
// e.g. exit(0);
}
}];
เมื่อไม่มีเซสชันการเข้าสู่ระบบที่มีอยู่ (เช่น เมื่อแอปถูกติดตั้งและรันเป็นครั้งแรก) การเข้าสู่ระบบ Google อย่างชัดเจนในสภาพแวดล้อมมือถือ Android จะทำงานแตกต่างกันไปขึ้นอยู่กับสถานการณ์ดังต่อไปนี้
- สถานการณ์ที่บัญชี Google หนึ่งบัญชีเข้าสู่ระบบในแอปพลิเคชันซึ่งปรากฏในการตั้งค่าบัญชีของอุปกรณ์ Android OS (สถานการณ์ที่บัญชี Google ได้เข้าสู่ระบบในอุปกรณ์ Android OS)
- เข้าสู่ระบบด้วยบัญชี Google ที่เกี่ยวข้อง
- สถานการณ์ที่มีบัญชี Google สองบัญชีหรือมากกว่าที่เข้าสู่ระบบในแอปพลิเคชันซึ่งปรากฏในการตั้งค่าบัญชีของอุปกรณ์ Android OS (สถานการณ์ที่บัญชี Google เฉพาะได้เข้าสู่ระบบในอุปกรณ์ Android OS)
- แสดง UI ที่อนุญาตให้เลือกหนึ่งในบัญชี Google ที่เข้าสู่ระบบ
- เข้าสู่ระบบหลังจากเลือกบัญชีจาก UI
- หากผู้ใช้ปิด UI โดยไม่เลือกบัญชี Google ใด ๆ ให้แสดง UI ที่มีรายการบัญชี Google ทั้งหมดที่ปรากฏในการตั้งค่าบัญชีของอุปกรณ์ Android OS
- เมื่อผู้ใช้เลือกบัญชี Google ที่ต้องการจาก UI รายการบัญชี Google ทั้งหมด ให้เข้าสู่ระบบด้วยบัญชีนั้น
- สถานการณ์ที่ไม่มีบัญชี Google ใด ๆ ที่เข้าสู่ระบบในแอปพลิเคชัน
- แสดง UI ที่มีรายการบัญชี Google ทั้งหมดที่ปรากฏในการตั้งค่าบัญชีของอุปกรณ์ Android OS
- เมื่อผู้ใช้เลือกบัญชี Google ที่ต้องการจาก UI รายการบัญชี Google ทั้งหมด ให้เข้าสู่ระบบด้วยบัญชีนั้น
ภาพด้านล่างเป็นตัวอย่างของ UI สำหรับสามสถานการณ์ข้างต้น จากทางซ้าย พวกเขาตรงกับสถานการณ์ที่ 1, 2 และ 3.
Note
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรับรองความถูกต้องของ Google โปรดดูที่ Google Credential Manager.
การปรับแต่งการเข้าสู่ระบบแบบชัดเจน¶
UI ที่ปรับแต่งได้สำหรับการเข้าสู่ระบบที่ชัดเจนสามารถนำไปใช้ได้โดยใช้ providerTypeList โดย providerTypeList คือ ตัวจัดการการตอบกลับที่ส่งกลับเมื่อเรียกใช้เมธอด AuthV4.setup() เพื่อเริ่มต้น Hive SDK หรือเมื่อเรียกใช้เมธอด AuthV4.Helper.getIDPList() หลังจากการเริ่มต้น ฟีเจอร์นี้ใช้เมื่อคุณต้องการแสดงหน้าจอเข้าสู่ระบบตาม UI ของเกมหรือเปิดเผยการรวมกับ IdP ที่เฉพาะเจาะจง หลังจากนำ UI ที่ปรับแต่งได้ไปใช้แล้ว ให้เรียกใช้เมธอด signIn() ด้วย ProviderType ที่ต้องการตามการกระทำของผู้ใช้เพื่อดำเนินการเข้าสู่ระบบ
Note
- เมื่อสร้างปุ่มเข้าสู่ระบบ คุณควรอ้างอิงถึงแนวทางการออกแบบที่จัดทำโดยแต่ละ IdP
- Game Center: ไม่มีข้อกำหนดเฉพาะ
- Google Play Games: แนวทางการสร้างแบรนด์
- Google: แนวทางการสร้างแบรนด์
- Hive Membership: แนวทาง Hive BI
- Facebook: ศูนย์ทรัพยากรแบรนด์
- QQ: นโยบายและข้อกำหนด
- WeChat: แบรนด์หลัก & แนวทาง
- VK: VK Brandbook
- Apple: แนวทางการออกแบบอินเทอร์เฟซมนุษย์
- LINE: แนวทางการออกแบบปุ่มเข้าสู่ระบบ LINE
- Huawei: ข้อกำหนดไอคอน HUAWEI ID
- Steam: แนวทางการสร้างแบรนด์ Steam
- X: ชุดเครื่องมือแบรนด์ X
- Telegram: โลโก้และภาพหน้าจอแอป Telegram
- สิ่งสำคัญคือต้องปฏิบัติตามแนวทางปุ่มเข้าสู่ระบบ Google สำหรับ Google Featured
- สำหรับชื่อปุ่มเข้าสู่ระบบหลายภาษา ที่ใช้กับการตรวจสอบสิทธิ์ Hive โปรดดูที่ ที่นี่.
- ภาพหน้าจอตัวอย่าง UI ที่แสดงเฉพาะปุ่มการรวม Facebook บนหน้าจอเข้าสู่ระบบ
ต่อไปนี้คือตัวอย่างโค้ดต้นทางที่สมมติสถานการณ์ที่ผู้ใช้เลือกการเข้าสู่ระบบ Google ใน UI การเข้าสู่ระบบที่กำหนดเอง
API Reference: hive.AuthV4.signIn
using hive;
AuthV4.signIn(AuthV4.ProviderType.GOOGLE, (ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
if (result.isSuccess()) {
// การเรียกใช้สำเร็จ
// playerInfo : ข้อมูลผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมลสำหรับ ProviderType.GOOGLE
Dictionary<AuthV4.ProviderType, AuthV4.ProviderInfo> providerInfoData = playerInfo.providerInfoData;
AuthV4.ProviderInfo providerInfo = providerInfoData[AuthV4.ProviderType.GOOGLE];
string email = providerInfo.providerEmail;
}
});
#include "HiveAuthV4.h"
FHiveAuthV4::SignIn(EHiveProviderType::GOOGLE,
FHiveAuthV4OnSignInDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHivePlayerInfo& PlayerInfo) {
if (Result.IsSuccess()) {
// การเรียกใช้สำเร็จ (PlayerInfo: ข้อมูลผู้ใช้ที่ผ่านการตรวจสอบแล้ว)
// ตัวอย่างการดึงข้อมูลอีเมลสำหรับ EHiveProviderType::GOOGLE
TMap<EHiveProviderType, FHiveProviderInfo> ProviderInfoData = PlayerInfo.ProviderInfoData;
if (const FHiveProviderInfo* ProviderInfo = ProviderInfoData.Find(EHiveProviderType::GOOGLE)) {
FString Email = ProviderInfo->ProviderEmail;
}
}
}));
API Reference: Auth4::signIn
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
AuthV4::signIn(ProviderType::GOOGLE, [=](ResultAPI const & result, PlayerInfo const & playerInfo) {
if (result.isSuccess()) {
// การเรียกสำเร็จ
// playerInfo : ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์.
// ตัวอย่างการดึงข้อมูลอีเมลสำหรับ ProviderType::GOOGLE
map<ProviderType, ProviderInfo> providerInfoData = playerInfo.providerInfoData;
ProviderInfo providerInfo = providerInfoData[ProviderType::GOOGLE];
string email = providerInfo.providerEmail;
}
});
API Reference: AuthV4.signIn
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.signIn(AuthV4.ProviderType.GOOGLE, object : AuthV4.AuthV4SignInListener {
override fun onAuthV4SignIn(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result.isSuccess) {
// การเรียกใช้สำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมลสำหรับ ProviderType.GOOGLE
if (playerInfo != null) {
val providerInfoData = playerInfo.providerInfoData
val providerInfo = providerInfoData[AuthV4.ProviderType.GOOGLE]
if (providerInfo != null) {
val email = providerInfo.providerEmail
}
}
}
}
})
API Reference: com.hive.Auth4.signIn
import com.hive.AuthV4;
import com.hive.ResultAPI;
AuthV4.signIn(AuthV4.ProviderType.GOOGLE, (result, playerInfo) -> {
if (result.isSuccess()) {
// การเรียกสำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์
// ตัวอย่างการดึงข้อมูลอีเมลสำหรับ ProviderType.GOOGLE
if (playerInfo != null) {
HashMap<AuthV4.ProviderType, AuthV4.ProviderInfo> providerInfoData = playerInfo.getProviderInfoData();
AuthV4.ProviderInfo providerInfo = providerInfoData.get(AuthV4.ProviderType.GOOGLE);
if (providerInfo != null) {
String email = providerInfo.getProviderEmail();
}
}
}
});
API Reference: AuthV4Interface.signIn
import HIVEService
AuthV4Interface.signIn(.Google) { result, playerInfo in
if result.isSuccess() {
// การเรียกสำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์.
// ตัวอย่างการดึงข้อมูลอีเมลของ Google
if
let playerInfo = playerInfo,
let providerInfo = playerInfo.providerInfoData["GOOGLE"] {
let email = providerInfo.providerEmail
}
}
}
API Reference: HIVEAuth4:signIn
#import <HIVEService/HIVEService-Swift.h>
[HIVEAuthV4 signIn:HIVEProviderTypeGoogle handler:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
if ([result isSuccess]){
// การเรียกสำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการรับรองสิทธิ์.
// ตัวอย่างการดึงข้อมูลอีเมลสำหรับ HIVEProviderTypeGoogle
if(playerInfo != nil) {
HIVEProviderInfo *providerInfo = playerInfo.providerInfoData[@"GOOGLE"];
if(providerInfo != nil){
NSString *email = providerInfo.providerEmail;
}
}
}
}];
ตรวจสอบบัญชี IdP ที่เข้าสู่ระบบบนอุปกรณ์¶
การเข้าสู่ระบบอัตโนมัติใช้คีย์โทเค็นการตรวจสอบสิทธิ์ของ PlayerID ที่บันทึกไว้เพื่อเข้าสู่ระบบ ในขณะที่การเข้าสู่ระบบแบบชัดเจนจะเข้าสู่ระบบบัญชีที่เชื่อมโยงกับ IdP หลายรายการ ในทั้งสองกรณี บัญชี IdP ของ PlayerID ที่เข้าสู่ระบบอาจแตกต่างจากบัญชี IdP ที่เข้าสู่ระบบบนอุปกรณ์จริง (DevicePlayer) จะมีแนวทางในการรวมบัญชีทั้งสองเพื่อเตรียมความพร้อมสำหรับความสำเร็จในอนาคตหรือการใช้งานกระดานผู้นำ
ต่อไปนี้คือตัวอย่างโค้ดเพื่อตรวจสอบข้อมูล IdP
API Reference: AuthV4.Helper.syncAccount
using hive;
AuthV4.ProviderType providerType = AuthV4.ProviderType.GOOGLE;
AuthV4.Helper.syncAccount (providerType, delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) {
switch (result.code) {
case ResultAPI.Code.Success:
// ปกติ
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// ข้อขัดแย้งบัญชี
// ex) เมื่อใช้ Hive UI
// AuthV4.Helper.showConflict(...);
// หรือ
// ex) เมื่อทำการใช้งาน GameUI
// AuthV4.Helper.resolverConflict(...);// เมื่อเลือกผู้ใช้ปัจจุบัน
// AuthV4.Helper.switchAccount(...);// เมื่อเลือกสลับผู้ใช้
break;
default:
// ข้อยกเว้นอื่น ๆ
break;
}
});
#include "HiveAuthV4.h"
FHiveAuthV4::Helper::SyncAccount(ProviderType,
FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result,
const TOptional<FHivePlayerInfo>& PlayerInfo) {
switch (Result.Code) {
case FHiveResultAPI::ECode::Success:
// การตอบกลับปกติ
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// ความขัดแย้งของบัญชี
// ex) เมื่อใช้ Hive UI
// FHiveAuthV4::Helper::ShowConflict()
// ex) เมื่อดำเนินการ Game UI
// FHiveAuthV4::Helper::ResolveConflict() // การเลือกผู้ใช้ปัจจุบัน
// FHiveAuthV4::Helper::SwitchAccount() // การเลือกเปลี่ยนผู้ใช้
break;
default:
// สถานการณ์พิเศษอื่น ๆ
break;
}
}));
API Reference: AuthV4::Helper::syncAccount
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
ProviderType providerType = ProviderType::GOOGLE;
AuthV4::Helper::syncAccount(providerType, [=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// ปกติ
break;
case ResultAPI::AuthV4ConflictPlayer:
// ความขัดแย้งของบัญชี
// ex) เมื่อใช้ Hive UI
// AuthV4::Helper::showConflict(...);
// หรือ
// ex) เมื่อดำเนินการ GameUI
// AuthV4::Helper::resolverConflict(...);// เมื่อเลือกผู้ใช้ปัจจุบัน
// AuthV4::Helper::switchAccount(...);// เมื่อเลือกที่จะเปลี่ยนผู้ใช้
break;
default:
// สถานการณ์ข้อยกเว้นอื่น ๆ
break;
}
});
API Reference: AuthV4.Helper.syncAccount
import com.hive.AuthV4
import com.hive.ResultAPI
val providerType = AuthV4.ProviderType.GOOGLE
AuthV4.Helper.syncAccount(providerType, object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
when (result.code) {
ResultAPI.Code.Success -> {
// ปกติ
}
ResultAPI.Code.AuthV4ConflictPlayer -> {
// ความขัดแย้งของบัญชี
// ex) เมื่อใช้ Hive UI
// AuthV4.Helper.showConflict(...);
// หรือ
// ex) เมื่อดำเนินการ GameUI
// AuthV4.Helper.resolverConflict(...);// เมื่อเลือกผู้ใช้ปัจจุบัน
// AuthV4.Helper.switchAccount(...);// เมื่อเลือกการสลับผู้ใช้
}
else -> {
// สถานการณ์พิเศษอื่น ๆ
}
}
}
})
API Reference: AuthV4.Helper.syncAccount
import com.hive.AuthV4;
import com.hive.ResultAPI;
AuthV4.ProviderType providerType = AuthV4.ProviderType.GOOGLE;
AuthV4.Helper.syncAccount(providerType, (result, playerInfo) -> {
switch (result.getCode()) {
case Success:
// ปกติ
case AuthV4ConflictPlayer:
break;
// ข้อขัดแย้งของบัญชี
// ex) เมื่อใช้ Hive UI
// AuthV4.Helper.showConflict(...);
// หรือ
// ex) เมื่อดำเนินการ GameUI
// AuthV4.Helper.resolverConflict(...);// เมื่อเลือกผู้ใช้ปัจจุบัน
// AuthV4.Helper.switchAccount(...);// เมื่อเลือกการสลับผู้ใช้
break;
default:
// ข้อยกเว้นอื่นๆ
break;
}
});
API Reference: AuthV4Interface.helper().syncAccount
import HIVEService
let providerType: ProviderType = .Google
AuthV4Interface.helper().syncAccount(providerType) { result, playerInfo in
switch result.getCode() {
case .success:
// ปกติ
case .authV4ConflictPlayer:
// ความขัดแย้งของบัญชี
// ex) เมื่อใช้ Hive UI
// AuthV4Interface.helper().showConflict(...);
// หรือ
// ex) เมื่อทำการ implement GameUI
// AuthV4Interface.helper().resolverConflict(...);// เมื่อผู้ใช้ปัจจุบันถูกเลือก
// AuthV4Interface.helper().switchAccount(...);// เมื่อมีการเลือกเปลี่ยนผู้ใช้
default:
// สถานการณ์พิเศษอื่นๆ
break
}
}
API Reference: [HIVEAuthV4 helper] syncAccount
#import <HIVEService/HIVEService-Swift.h>
HIVEProviderType providerType = HIVEProviderTypeGoogle
[[HIVEAuthV4 helper] syncAccount: providerType handler: ^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
switch ([result getCode]) {
case HIVEResultAPICodeSuccess:
// ปกติ
break;
case HIVEResultAPICodeAuthV4ConflictPlayer:
// ข้อขัดแย้งของบัญชี
// ex) เมื่อใช้ Hive UI
// [[HIVEAuthV4 helper] showConflict: ...];
// หรือ
// ex) เมื่อดำเนินการ GameUI
// [[HIVEAuthV4 helper] resolverConflict:...];// เมื่อผู้ใช้ปัจจุบันถูกเลือก
// [[HIVEAuthV4 helper] switchAccount:...];// เมื่อมีการเลือกเปลี่ยนผู้ใช้
break;
default:
// ข้อยกเว้นอื่น ๆ
break;
}
}];
การเข้าสู่ระบบแขก¶
ฟีเจอร์การเข้าสู่ระบบแขกช่วยให้ผู้ใช้สามารถเล่นเกมในโหมดแขกโดยไม่ต้องเลือก IdP คุณสามารถเลือกการเข้าสู่ระบบแขกจาก UI การเข้าสู่ระบบที่ชัดเจนที่ให้โดย Hive SDK หรือดำเนินการเข้าสู่ระบบแขกโดยตรงหากคุณกำลังปรับแต่งในเกมของคุณ สภาพแวดล้อม Windows ไม่รองรับการเข้าสู่ระบบแขก
เมื่อเข้าสู่ระบบในฐานะแขก คุณต้องปฏิบัติตามนโยบายต่อไปนี้
นโยบายการเข้าสู่ระบบของแขก¶
- ดำเนินการเกมเพื่อให้ผู้ใช้ที่ยืนยันตัวตนด้วย IdP และผู้ใช้ที่เป็นแขกสามารถใช้ได้ในลักษณะเดียวกัน ฟีเจอร์ส่วนใหญ่ของแพลตฟอร์ม Hive สามารถใช้งานได้แม้จะเข้าสู่ระบบในฐานะแขก ดังนั้นโปรดดำเนินการเกมของคุณเพื่อให้ผู้ใช้ที่เข้าสู่ระบบในฐานะแขกสามารถใช้เกมได้ในลักษณะเดียวกับผู้ใช้ที่เชื่อมโยงกับ IdP ตัวอย่างเช่น ผู้ใช้ที่เป็นแขกควรสามารถซื้อไอเทมและทำการชำระเงินภายในเกมได้เช่นกัน
- ไม่ให้ฟังก์ชันออกจากระบบสำหรับผู้ใช้ที่เป็นแขก หากผู้ใช้ออกจากระบบหลังจากเข้าสู่ระบบในฐานะแขก พวกเขาจะไม่สามารถเข้าสู่ระบบด้วย PlayerID เดิมได้ ดังนั้นจึงไม่ควรมีปุ่มออกจากระบบเพื่อให้ผู้ใช้ไม่สามารถออกจากระบบเมื่อพวกเขาเข้าสู่ระบบในฐานะแขก
- นโยบายห้ามเข้าสู่ระบบของแขกจากจีน หากใช้ IP ของจีน ผู้ใช้ที่ผ่านการตรวจสอบชื่อจริงเท่านั้นที่สามารถเติมเงินและใช้ทรัพยากรได้ (มีผลตั้งแต่วันที่ 1 พฤษภาคม 2017) ดังนั้นการเข้าสู่ระบบของแขกจึงไม่รวมอยู่ในรายชื่อ IdP ที่สามารถเข้าสู่ระบบด้วย IP ของจีน
ในการเข้าสู่ระบบในฐานะแขก ให้เรียกใช้เมธอด signIn() โดยใช้ ProviderType.GUEST เป็นพารามิเตอร์ นี่คือตัวอย่างโค้ดสำหรับการเข้าสู่ระบบในฐานะแขก
Note
ไม่มี providerInfoData ใน playerInfo สำหรับ PlayerID ในสถานะแขกโดยไม่มีการตรวจสอบ IdP ใด ๆ
API Reference: hive.AuthV4.signIn
API Reference: Auth4::signIn
API Reference: AuthV4.signIn
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.signIn(AuthV4.ProviderType.GUEST, object : AuthV4.AuthV4SignInListener {
override fun onAuthV4SignIn(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result.isSuccess) {
// การตรวจสอบสิทธิ์สำเร็จ
// playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์
}
}
})
API Reference: com.hive.Auth4.signIn
API Reference: AuthV4Interface.signIn
API Reference: HIVEAuth4:signIn
การเข้าสู่ระบบที่กำหนดเอง¶
การเข้าสู่ระบบแบบกำหนดเอง เป็นฟีเจอร์สำหรับ การเข้าสู่ระบบที่ปรับแต่งได้ ซึ่งช่วยให้คุณสามารถดำเนินการเข้าสู่ระบบผ่าน IdP ที่รวมเข้ากับเกมเอง นอกเหนือจาก IdP ที่ให้โดย Hive ลองสร้างคีย์การรับรองความถูกต้อง (authKey) เพื่อใช้เมื่อเรียก API การเข้าสู่ระบบแบบกำหนดเองตามที่ระบุใน Authenticate v4 Custom Authentication
หลังจากเรียกใช้ API การเข้าสู่ระบบที่กำหนดเอง คุณสามารถเข้าถึงข้อมูล customProviderInfoData ผ่านอินสแตนซ์ของคลาส PlayerInfo ที่ได้รับเป็นการตอบกลับเพื่อตรวจสอบข้อมูลของผู้ใช้ที่เข้าสู่ระบบแบบกำหนดเอง ProviderType (enum) ของ customProviderInfoData ถูกตั้งค่าให้เป็น CUSTOM อย่างสม่ำเสมอ และสามารถแยกแยะรายละเอียดได้โดย ProviderName (String).
ข้อมูลของ IdP ที่ได้ทำการปรับแต่งการเข้าสู่ระบบในเกมจะไม่รวมอยู่ในผลลัพธ์ของการเรียกใช้เมธอด setup() และ showSignIn() ของคลาส AuthV4
หากคุณได้รับ playerId และ playerToken หลังจากการดำเนินการครั้งแรกของการเข้าสู่ระบบแบบกำหนดเอง API ผลลัพธ์ของ authV4SessionExist(code) จะถูกส่งเป็น callback เมื่อ API การเข้าสู่ระบบแบบกำหนดเองถูกเรียกอีกครั้ง ในกรณีนี้ คุณควรเรียก signIn() โดยใช้ ProviderType.Auto เป็นพารามิเตอร์เพื่อดำเนินการเข้าสู่ระบบอัตโนมัติโดยใช้บัญชีที่เข้าสู่ระบบแล้ว โปรดดูตัวอย่างโค้ดด้านล่าง
วิธีการ connect() และ disconnect() ของคลาส AuthV4 ไม่รองรับการรวมและการตัดการเชื่อมต่อเพิ่มเติมของ IdP การเข้าสู่ระบบที่กำหนดเอง วิธีการ connectWithAuthKey() และ disconnectWithName() รองรับการรวมและการตัดการเชื่อมต่อเพิ่มเติมของ IdP การเข้าสู่ระบบที่กำหนดเอง
นี่คือตัวอย่างโค้ดสำหรับการสร้างการเข้าสู่ระบบแบบกำหนดเอง
API Reference: hive.AuthV4.signIn
// การเข้าสู่ระบบ Twitter ถูกนำไปใช้โดยตรงในเกม
Game.Login("CUSTOM_TWITTER", (string authKey) => {
AuthV4.signInWithAuthKey(authKey, (ResultAPI result, PlayerInfo playerInfo) => {
if (result.isSuccess()) {
Dictionary<string, ProviderInfo> customProviderInfoData = playerInfo.customProviderInfoData;
ProviderInfo providerInfo = customProviderInfoData["CUSTOM_TWITTER"];
// ตรวจสอบข้อมูลการเชื่อมโยงผู้ใช้ต่อไปนี้
providerInfo.providerType; // ProviderType.CUSTOM, ประเภทที่กำหนดเองจะต้องแยกแยะโดย providerName
providerInfo.providerName; // "CUSTOM_TWITTER"
providerInfo.providerUserId; // รหัสผู้ใช้ที่ใช้สำหรับการเข้าสู่ระบบ Twitter แบบกำหนดเอง
return;
}
else if (result.code == ResultAPI.Code.AuthV4SessionExist) {
// หาก playerId และ playerToken ได้รับการออกแล้วและต้องการการเข้าสู่ระบบอัตโนมัติ
// TODO: AuthV4.signIn(ProviderType.AUTO, (ResultAPI _result, PlayerInfo playerInfo) => {});
}
else if (result.code == ResultAPI.Code.AuthV4NotInitialized) {
// TODO: ต้องมีการเริ่มต้น SDK
}
else if (result.code == ResultAPI.Code.AuthV4InvalidParam) {
// TODO: ตรวจสอบว่าค่าของ authKey ที่ให้มาคือ NULL หรือว่างเปล่า
}
else if (result.needExit()) {
// TODO: นำฟังก์ชันการออกจากแอปไปใช้
// ตัวอย่าง) Application.Quit();
}
});
});
#include "HiveAuthV4.h"
// นำเข้าการเข้าสู่ระบบ Twitter โดยตรงในเกมด้วยประเภท "CUSTOM_TWITTER"
void GameLogin(const FString& AuthKey)
{
FHiveAuthV4::SignInWithAuthKey(AuthKey, FHiveAuthV4OnSignInDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHivePlayerInfo& PlayerInfo) {
if (Result.IsSuccess()) {
TMap<FString, FHiveProviderInfo> CustomProviderInfoData = PlayerInfo.CustomProviderInfoData;
if (const FHiveProviderInfo* ProviderInfo = CustomProviderInfoData.Find(TEXT("CUSTOM_TWITTER"))) {
EHiveProviderType ProviderType = ProviderInfo->ProviderType; // EHiveProviderType::CUSTOM, custom types are fixed
FString ProviderName = ProviderInfo->ProviderName; // Need to distinguish by ProviderName
FString ProviderUserId = ProviderInfo->ProviderUserId; // User id used in the custom Twitter login
}
} else if (Result.NeedExit()) {
// TODO: Implement app exit functionality
// e.g.) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else if (Result.Code == FHiveResultAPI::ECode::AuthV4SessionExist) {
// If playerId and playerToken have already been issued and automatic login is needed
// TODO: FHiveAuthV4.SignIn(EHiveProviderType::GUEST, Delegate);
} else if (Result.Code == FHiveResultAPI::ECode::AuthV4NotInitialized) {
// TODO: SDK initialization needed
} else if (Result.Code == FHiveResultAPI::ECode::AuthV4InvalidParam) {
// TODO: Check if the value of the provided authKey is empty
}
}));
}
API Reference: Auth4::signIn
using namespace std;
using namespace hive;
// การเข้าสู่ระบบ Twitter ถูกนำไปใช้โดยตรงในเกม
Game::Login("CUSTOM_TWITTER", [=](string authKey) {
AuthV4::signInWithAuthKey(authKey, [=](ResultAPI const & result, PlayerInfo const & playerInfo) {
if (result.isSuccess()) {
map<string, ProviderInfo> customProviderInfoData = playerInfo.customProviderInfoData;
ProviderInfo providerInfo = customProviderInfoData["CUSTOM_TWITTER"];
// ตรวจสอบข้อมูลการเชื่อมโยงผู้ใช้ต่อไปนี้
providerInfo.providerType; // ProviderType::CUSTOM, เนื่องจากประเภทที่กำหนดเองนั้นถูกกำหนดไว้ ต้องแยกแยะโดย providerName
providerInfo.providerName; // "CUSTOM_TWITTER"
providerInfo.providerUserId; // รหัสผู้ใช้ที่ใช้สำหรับการเข้าสู่ระบบ Twitter แบบกำหนดเอง
return;
}
else if (result.code == ResultAPI::Code::AuthV4SessionExist) {
// หาก playerId และ playerToken ได้รับการออกแล้วและต้องการการเข้าสู่ระบบอัตโนมัติ
// TODO: AuthV4.signIn(ProviderType::AUTO, [=](ResultAPI const & _result, PlayerInfo const & playerInfo) {});
}
else if (result.code == ResultAPI::Code::AuthV4NotInitialized) {
// TODO: ต้องมีการเริ่มต้น SDK
}
else if (result.code == ResultAPI::Code::AuthV4InvalidParam) {
// TODO: ตรวจสอบว่าค่าของ authKey ที่ให้มานั้นเป็น NULL หรือว่างเปล่าหรือไม่
}
else if (result.needExit()) {
// TODO: นำฟังก์ชันการออกจากแอปไปใช้
// สำหรับผู้ใช้เครื่องยนต์ Cocos2d-x
// ตัวอย่าง) exit(0);
// สำหรับผู้ใช้เครื่องยนต์ Unreal
// ตัวอย่าง) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
}
});
});
API Reference: com.hive.Auth4.signIn
// Twitter login implemented directly in the game
Game.Login("CUSTOM_TWITTER") { authKey: String ->
AuthV4.signInWithAuthKey(authKey, object : AuthV4.AuthV4SignInListener {
override fun onAuthV4SignIn(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result.isSuccess && playerInfo != null) {
playerInfo.customProviderInfoData["CUSTOM_TWITTER"]?.let { providerInfo ->
providerInfo.providerType // ProviderType.CUSTOM, custom types are fixed, so need to distinguish by providerName
providerInfo.providerName // "CUSTOM_TWITTER"
providerInfo.providerUserId // User id used for the custom Twitter login
}
}
else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g.) exitProcess(0)
}
else if (result.code == ResultAPI.Code.AuthV4SessionExist) {
// If playerId and playerToken have already been issued and automatic login is needed
// TODO: AuthV4.signIn(AuthV4.ProviderType.AUTO, authV4SignInListener)
}
else if (result.code == ResultAPI.Code.AuthV4NotInitialized) {
// TODO: SDK initialization needed
}
else if (result.code == ResultAPI.Code.AuthV4InvalidParam) {
// TODO: Check if the value of the provided authKey is NULL or empty
}
}
})
}
API Reference: com.hive.Auth4.signIn
// Twitter login implemented directly in the game
Game.Login("CUSTOM_TWITTER") { authKey: String ->
AuthV4.signInWithAuthKey(authKey, new AuthV4.AuthV4SignInListener() {
@Override
public void onAuthV4SignIn(@NonNull ResultAPI result, @Nullable AuthV4.PlayerInfo playerInfo) {
if(result.isSuccess() && playerInfo != null) {
HashMap<String, AuthV4.ProviderInfo> customProviderInfoData = playerInfo.getCustomProviderInfoData();
AuthV4.ProviderInfo providerInfo = customProviderInfoData.get("CUSTOM_TWITTER");
// ตรวจสอบข้อมูลการเชื่อมโยงผู้ใช้ต่อไปนี้
if (providerInfo != null){
providerInfo.getProviderType(); // AuthV4.ProviderType.CUSTOM, เนื่องจากประเภทที่กำหนดเองมีการกำหนดไว้ ต้องแยกแยะโดย providerName
providerInfo.getProviderName(); // "CUSTOM_TWITTER"
providerInfo.getProviderUserId(); // รหัสผู้ใช้ที่ใช้สำหรับการเข้าสู่ระบบ Twitter แบบกำหนดเองที่นำไปใช้โดยตรง
}
} else if (result.needExit()) {
// TODO: Implement app exit functionality
// e.g.) System.exit(0);
} else if (result.getCode() == ResultAPI.Code.AuthV4SessionExist) {
// หาก playerId และ playerToken ได้รับการออกแล้วและต้องการเข้าสู่ระบบอัตโนมัติ
// TODO: AuthV4.signIn(AuthV4.ProviderType.AUTO, authV4SignInListener)
} else if (result.getCode() == ResultAPI.Code.AuthV4NotInitialized) {
// TODO: SDK initialization needed
} else if (result.getCode() == ResultAPI.Code.AuthV4InvalidParam) {
// TODO: ตรวจสอบว่าค่าของ authKey ที่ให้มาคือ NULL หรือว่างเปล่า
}
}
});
}
API Reference: HIVEAuth4:signIn
// การเข้าสู่ระบบ Twitter ที่ดำเนินการโดยตรงในเกม
Game.login("CUSTOM_TWITTER") { (authKey) in
AuthV4Interface.signInWithAuthKey(authKey) { (result, playerInfo) in
if result.isSuccess() {
let customProviderInfoData = playerInfo?.customProviderInfoData;
let providerInfo = customProviderInfoData?["CUSTOM_TWITTER"]
// ตรวจสอบข้อมูลการเชื่อมโยงผู้ใช้ต่อไปนี้
providerInfo?.providerType; // AuthProviderType, ประเภทที่กำหนดเองจะถูกกำหนดอย่างแน่นอนดังนั้นจึงต้องแยกแยะตาม providerName
providerInfo?.providerName; // "CUSTOM_TWITTER"
providerInfo?.providerUserId; // รหัสผู้ใช้ที่ใช้สำหรับการเข้าสู่ระบบ Twitter แบบกำหนดเอง
return
}
else if result.getCode() == .authV4SessionExist {
// หาก playerId และ playerToken ได้รับการออกแล้วและต้องการการเข้าสู่ระบบอัตโนมัติ
// TODO: AuthV4Interface.signIn(.auto) { (result, playerInfo) in }
}
else if result.getCode() == .authV4NotInitialized {
// TODO: ต้องมีการเริ่มต้น SDK
}
else if result.getCode() == .authV4invalidParam {
// TODO: ตรวจสอบว่าค่าของ authKey ที่ให้มานั้นเป็น nil หรือว่างเปล่า
}
else if result.needExit() {
// TODO: นำฟังก์ชันการออกจากแอปไปใช้
// e.g. exit(0)
}
}
}
API Reference: HIVEAuth4:signIn
// Twitter login implemented directly in the game
[Game login:@"CUSTOM_TWITTER" handler:^(NSString* authKey) {
[HIVEAuthV4 signInWithAuthKey:authKey handler:^(HIVEResultAPI* result, HIVEPlayerInfo* playerInfo) {
if (result.isSuccess) {
NSDictionary<NSString*, HIVEProviderInfo*>* customProviderInfoData = playerInfo.customProviderInfoData;
ProviderInfo* providerInfo = [customProviderInfoData objectForKey:@"CUSTOM_TWITTER"];
// ตรวจสอบข้อมูลการเชื่อมโยงผู้ใช้ต่อไปนี้
providerInfo.providerType; // HIVEProviderTypeCustom, ประเภทที่กำหนดเองมีการกำหนดไว้ ดังนั้นต้องแยกแยะตาม providerName
providerInfo.providerName; // "CUSTOM_TWITTER"
providerInfo.providerUserId; // รหัสผู้ใช้ที่ใช้ในการเข้าสู่ระบบ Twitter แบบกำหนดเอง
return;
}
else if (result.getCode == HIVEResultAPICodeAuthV4SessionExist) {
// หาก playerId และ playerToken ได้ถูกออกแล้วและต้องการเข้าสู่ระบบอัตโนมัติ
// TODO: [HIVEAuthV4 signIn:HIVEProviderTypeAuto, handler:^(HIVEResultAPI* _result, HIVEPlayerInfo* playerInfo) {}];
}
else if (result.getCode == HIVEResultAPICodeAuthV4NotInitialized) {
// TODO: ต้องมีการเริ่มต้น SDK
}
else if (result.getCode == HIVEResultAPICodeAuthV4InvalidParam) {
// TODO: ตรวจสอบว่าค่าของ authKey ที่ให้มานั้นเป็น NULL หรือว่างเปล่าหรือไม่
}
else if (result.needExit) {
// TODO: นำฟังก์ชันการออกจากแอปไปใช้
// e.g) exit(0);
}
}];
}];
ตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติ¶
ตัวเลือก การรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติ เป็นฟีเจอร์ที่ช่วยให้เกมสามารถเปิดหรือปิดฟังก์ชันการเข้าสู่ระบบอัตโนมัติได้。
ลำดับการดำเนินการพื้นฐาน¶
ลำดับการใช้ตัวเลือกการรักษาความปลอดภัยการเข้าสู่ระบบอัตโนมัติใน Hive SDK มีดังนี้:
- เรียกใช้ฟังก์ชันการเริ่มต้น SDK
- เรียกใช้ API
AuthV4.setAutoLoginEnabledโดยเมื่อเรียกใช้ ให้ส่งค่าคอนฟิกต่อไปนี้เพื่อกำหนด 'ตัวเลือกการเก็บรักษาเข้าสู่ระบบอัตโนมัติ':true: เปิดใช้งานการเข้าสู่ระบบอัตโนมัติ ค่าคอนฟิกนี้จะถูกนำไปใช้กับฟังก์ชันการเข้าสู่ระบบที่เรียกใช้ในภายหลัง (AuthV4.signIn, AuthV4.showSignIn, ฯลฯ) เพื่อบันทึกข้อมูลการเข้าสู่ระบบและเปิดใช้งานการเข้าสู่ระบบอัตโนมัติในระหว่างการเข้าสู่ระบบอีกครั้งfalse: ปิดการใช้งานการเข้าสู่ระบบอัตโนมัติ ข้อมูลการเข้าสู่ระบบจะไม่ถูกบันทึกแม้จะเข้าสู่ระบบสำเร็จ ดังนั้นในระหว่างการเข้าสู่ระบบอีกครั้ง ผู้ใช้จะต้องเลือกวิธีการเข้าสู่ระบบและดำเนินการตามกระบวนการเข้าสู่ระบบที่มีอยู่
- เรียกใช้ฟังก์ชันการเข้าสู่ระบบและเข้าสู่ระบบสำเร็จ
- เมื่อเข้าสู่ระบบสำเร็จ หากค่าคอนฟิกที่ส่งเมื่อเรียกใช้ API
AuthV4.setAutoLoginEnabledในขั้นตอนที่ 2 เป็นtrueข้อมูลการเข้าสู่ระบบจะถูกบันทึก
- เมื่อเข้าสู่ระบบสำเร็จ หากค่าคอนฟิกที่ส่งเมื่อเรียกใช้ API
- ผู้ใช้บังคับให้ปิดแอปเกมโดยไม่ออกจากระบบ (สมมติ)
- เรียกใช้แอปและเรียกใช้ฟังก์ชันการเริ่มต้น SDK สำหรับการเข้าสู่ระบบอีกครั้ง
- หากค่าคอนฟิกที่ส่งเมื่อเรียกใช้ API
AuthV4.setAutoLoginEnabledในขั้นตอนที่ 2 เป็นtrueจะส่งคืน 'ประเภทการเข้าสู่ระบบ AUTO' เป็นค่าคืนจากฟังก์ชันการเริ่มต้น SDK - 'ประเภทการเข้าสู่ระบบ AUTO' จะถูกนำไปใช้เมื่อเรียกใช้ API
AuthV4.signInหรือ APIAuthV4.showSignInที่เกี่ยวข้องกับการดำเนินการเข้าสู่ระบบอีกครั้งในภายหลัง อย่างไรก็ตาม ในสภาพแวดล้อมการเข้าสู่ระบบ PC จะไม่ถูกนำไปใช้เมื่อเรียกใช้ APIAuthV4.showSignInเนื่องจากตัวเลือกการเข้าสู่ระบบอัตโนมัติจะถูกนำเสนอเป็นช่องทำเครื่องหมายแยกต่างหาก
- หากค่าคอนฟิกที่ส่งเมื่อเรียกใช้ API
-
ในระหว่างการเข้าสู่ระบบอีกครั้ง การเข้าสู่ระบบอัตโนมัติเป็นไปได้โดยตรงด้วยประเภท
AuthV4.signin AUTOหรือAuthV4.Helper.SignInโดยไม่ต้องเรียกใช้ APIAuthV4.setAutoLoginEnabled -
หากผู้ใช้ยุติและเรียกใช้งานแอปเกมใหม่โดยไม่ผ่านกระบวนการออกจากระบบ การเข้าสู่ระบบอัตโนมัติเป็นไปได้ด้วยประเภท
AuthV4.signin AUTOหรือAuthV4.Helper.SignInที่ส่งคืนเป็นฟังก์ชันการเริ่มต้นของการเรียกกลับ
ค่าคอนฟิกที่ส่งเมื่อเรียกใช้ API AuthV4.setAutoLoginEnabled จะถูกรีเซ็ตเป็นค่าดีฟอลต์ตามสภาพแวดล้อมของอุปกรณ์แอปเกมแต่ละตัวด้านล่างเมื่อแอปเกมถูกเรียกใช้ใหม่หรือออกจากระบบ
- **มือถือ**: `true` (การเข้าสู่ระบบอัตโนมัติที่ใช้ได้, ค่าดีฟอลต์ Android และ iOS)
- **PC**: `false` (การเข้าสู่ระบบอัตโนมัติถูกปิดใช้งาน)
Warning
ค่าคอนฟิกที่ส่งเมื่อเรียกใช้ AuthV4.setAutoLoginEnabled จะถูกนำไปใช้กับ API ที่เกี่ยวข้องกับการเข้าสู่ระบบที่เรียกใช้ในภายหลัง (AuthV4.signIn, AuthV4.showSignIn เป็นต้น) ดังนั้น API AuthV4.setAutoLoginEnabled จะต้องถูกเรียกใช้ หลังจากการเริ่มต้น SDK ~ ก่อนการเข้าสู่ระบบ.
ลักษณะการทำงานและข้อจำกัด¶
เมื่อเรียกใช้ API AuthV4.setAutoLoginEnabled จะต้องยืนยันและใช้ลักษณะการทำงานของตัวเลือกการเก็บรักษาการเข้าสู่ระบบอัตโนมัติดังต่อไปนี้:
- ตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติสามารถตั้งค่าได้ ก่อนการเข้าสู่ระบบ เท่านั้น และ API
AuthV4.setAutoLoginEnabledไม่สามารถเรียกใช้ได้ในขณะที่เข้าสู่ระบบอยู่ ความสำเร็จและความล้มเหลวของการตั้งค่าค่าสามารถยืนยันได้จากข้อมูลการตอบกลับ - หากมีเซสชันการเข้าสู่ระบบอัตโนมัติอยู่แล้วและ 'isAutoSignIn=true' ในข้อมูลการตอบกลับ
AuthV4.setupผู้ใช้แอปอยู่ในสถานการณ์ที่ตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติถูกนำไปใช้และสามารถเข้าสู่ระบบด้วยประเภท AUTO ดังนั้นจึงสามารถเรียกใช้ 'AuthV4.signIn' ได้โดยตรงโดยไม่ต้องเรียกใช้AuthV4.setAutoLoginEnabledนอกจากนี้ หากเรียกใช้AuthV4.setAutoLoginEnabledเมื่อการเข้าสู่ระบบประเภท AUTO เป็นไปได้ จะมีการส่งคืนการตอบกลับความล้มเหลวRESPONSE_FAILเป็นข้อมูลการตอบกลับและส่งคืนtrueเป็นค่าการตั้งค่าการเข้าสู่ระบบอัตโนมัติ - สำหรับการเข้าสู่ระบบแขก ต้องระวังไม่ให้ใช้
AuthV4.setAutoLoginEnabled=falseเมื่อเรียกใช้ด้วยfalseข้อมูลเซสชันจะไม่ถูกบันทึกหลังจากการเข้าสู่ระบบ ซึ่งอาจส่งผลให้ข้อมูลบัญชีแขกสูญหาย - API บางตัวที่เรียกใช้ในสภาพแวดล้อมอุปกรณ์แอปเกมจะไม่ได้รับผลกระทบจาก
AuthV4.setAutoLoginEnabled- เมื่อเรียกใช้
AuthV4.showSignInในสภาพแวดล้อม PC: ตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติจะทำงานตามค่าของช่องทำเครื่องหมาย 'ตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติ' ที่รวมอยู่ใน UI ที่เปิดเผย ดังนั้นค่าการกำหนดค่าที่ส่งเมื่อเรียกใช้AuthV4.setAutoLoginEnabledจะถูกละเว้น ค่าที่ตั้งไว้ในช่องทำเครื่องหมายจะมีผลจนกว่าจะมีการเรียกใช้แอปใหม่หรือออกจากระบบ เช่นเดียวกับAuthV4.setAutoLoginEnabledดังนั้นการตั้งค่าปัจจุบันจะถูกเก็บรักษาไว้แม้เมื่อมีการเปลี่ยนบัญชี
ในสภาพแวดล้อม PC หากการเข้าสู่ระบบสำเร็จโดยการเรียกใช้AuthV4.showSignInข้อมูลการเข้าสู่ระบบจะถูกบันทึกตามค่าของช่องทำเครื่องหมายและสามารถใช้การเข้าสู่ระบบอัตโนมัติได้ - เมื่อเรียกใช้
AuthV4.signInWithStoredPlayerIdในสภาพแวดล้อม PC และมือถือ: ตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติจะตรวจสอบสถานะแอปพลิเคชันผ่านพารามิเตอร์useAutoSignInแยกต่างหาก ดังนั้นค่าการกำหนดค่าที่ส่งเมื่อเรียกใช้AuthV4.setAutoLoginEnabledจะถูกละเว้น ค่าการกำหนดค่าuseAutoSignInจะมีผลจนกว่าจะมีการเรียกใช้แอปใหม่หรือออกจากระบบ เช่นเดียวกับAuthV4.setAutoLoginEnabledดังนั้นการตั้งค่าปัจจุบันจะถูกเก็บรักษาไว้แม้เมื่อมีการเปลี่ยนบัญชี
ในสภาพแวดล้อม PC และมือถือ หากการเข้าสู่ระบบสำเร็จโดยการเรียกใช้AuthV4.signInWithStoredPlayerIdข้อมูลการเข้าสู่ระบบจะถูกบันทึกตามค่าการกำหนดค่าuseAutoSignInและสามารถใช้การเข้าสู่ระบบอัตโนมัติได้
- เมื่อเรียกใช้
- การดำเนินการอาจถูกจำกัดหากค่าการกำหนดค่าเมื่อเรียกใช้ API AuthV4.setAutoLoginEnabled ไม่ได้ใช้เป็น 'ค่าดีฟอลต์ตามสภาพแวดล้อมอุปกรณ์แอปเกม'
- ในสภาพแวดล้อมมือถือ เมื่อเข้าสู่ระบบผ่าน โหมดออฟไลน์ การใช้
AuthV4.setAutoLoginEnabled=trueเป็นสิ่งจำเป็น (หรือไม่เรียกใช้ 'AuthV4.setAutoLoginEnabled' เพื่อให้ใช้การตั้งค่าค่าดีฟอลต์) หากผู้ใช้เคยใช้AuthV4.setAutoLoginEnabled=falseสำหรับโหมดออฟไลน์ ข้อมูลเซสชันการเข้าสู่ระบบจะไม่ถูกบันทึก ดังนั้นการเข้าสู่ระบบในโหมดออฟไลน์จึงไม่สามารถทำได้ในระหว่างการเรียกใช้แอปครั้งถัดไป
- ในสภาพแวดล้อมมือถือ เมื่อเข้าสู่ระบบผ่าน โหมดออฟไลน์ การใช้
Info
เกณฑ์ในการกำหนดตัวเลือกการเข้าสู่ระบบอัตโนมัติเมื่อเกิดความขัดแย้งของบัญชี โดยพื้นฐานจะปฏิบัติตามค่า AuthV4.setAutoLoginEnabled ที่กำหนดไว้
อย่างไรก็ตาม เมื่อเรียกใช้ API ที่เกี่ยวข้องกับการเข้าสู่ระบบในสภาพแวดล้อมของอุปกรณ์แอปเกมเฉพาะตามที่แสดงด้านล่าง จะมีการใช้ค่าแฟลกการเข้าสู่ระบบอัตโนมัติแยกต่างหากที่ใช้โดย API นั้นแทนค่าคอนฟิก AuthV4.setAutoLoginEnabled และจะมีการรักษาเกณฑ์เดียวกันเมื่อสลับบัญชีหลังจากเกิดความขัดแย้งของบัญชี
- อิงจากค่าของช่องทำเครื่องหมายตัวเลือกการรักษาความต่อเนื่องในการเข้าสู่ระบบอัตโนมัติที่แสดงใน UI การเข้าสู่ระบบเมื่อเรียกใช้
AuthV4.showSignInในสภาพแวดล้อม PC - อิงจากค่าของธงการใช้งานการเข้าสู่ระบบอัตโนมัติภายใน
useAutoSignInเมื่อเรียกใช้AuthV4.signInWithStoredPlayerIdในสภาพแวดล้อม PC และมือถือ
ตัวอย่างรหัสการใช้งาน¶
ตัวอย่างโค้ดสำหรับการใช้งานตัวเลือกการเก็บรักษาการเข้าสู่ระบบอัตโนมัติมีดังนี้:
ชื่อผู้ใช้¶
เนื่องจากปัญหาต่างๆ เช่น COPPA ในสหรัฐอเมริกา เมื่อเข้าถึงและเข้าสู่ระบบในฐานะ IdP จากสหรัฐอเมริกาและดินแดนของตน ผู้ใช้ต้องป้อนชื่อผู้ใช้เพื่ออำนวยความสะดวกในการประมวลผลการตรวจสอบสิทธิ์การระบุตัวตนของผู้ใช้งานเพิ่มเติม สำหรับข้อมูลอ้างอิง ประเทศที่รวมอยู่ในดินแดนของสหรัฐอเมริกาคือ อเมริกันซามัว (AS), กวม (GU), หมู่เกาะนอร์เทิร์นมาเรียนา (MP), เปอร์โตริโก (PR), หมู่เกาะนอกชายฝั่งขนาดเล็กของสหรัฐอเมริกา (UM) และหมู่เกาะเวอร์จินของสหรัฐอเมริกา (VI) หน้าจอสำหรับการป้อนชื่อผู้ใช้เพื่อการระบุตัวตนของผู้ใช้มีดังนี้
- หน้าจอกรอกชื่อผู้ใช้ใช้เพื่อการระบุผู้ใช้เท่านั้น ดังนั้นจึงจะแสดงเพียงครั้งเดียวในระหว่างการรวม IdP เบื้องต้นและจะไม่แสดงอีกต่อไป
- หน้าจอกรอกชื่อผู้ใช้จะไม่แสดงในระหว่างการเข้าสู่ระบบในฐานะแขก.
การตรวจสอบความถูกต้องของกุญแจโทเค็น¶
เซิร์ฟเวอร์เกมสามารถตรวจสอบความถูกต้องของกุญแจโทเค็นโดยใช้ข้อมูลโทเค็น, playerId, และ DID ที่ส่งกลับหลังจากการเข้าสู่ระบบที่สำเร็จ การตรวจสอบสิทธิ์ของ Hive อนุญาตให้เข้าสู่ระบบจากหลายอุปกรณ์และการเข้าถึงพร้อมกัน
หากไม่อนุญาตให้เข้าถึงซ้ำด้วยบัญชีเดียวกัน เซิร์ฟเวอร์เกมจะแสดงข้อความแจ้งเตือนบนอุปกรณ์ที่เชื่อมต่อก่อนและจากนั้นจะออกจากเกม โดยอนุญาตให้เกมดำเนินต่อบนอุปกรณ์ที่เชื่อมต่อภายหลัง หากคุณพยายามเข้าถึงเกมอีกครั้งโดยไม่ออกจากเกม บันทึกการเล่นเกมของคุณอาจไม่สะท้อนอย่างถูกต้อง เพื่อดำเนินการฟีเจอร์นี้ คุณต้องจัดการกับคีย์โทเค็นที่ได้รับการตรวจสอบหรือคีย์เซสชันของเกมเองโดยใช้มัน
ดำเนินการฟีเจอร์นี้โดยอ้างอิงจาก API เซิร์ฟเวอร์การตรวจสอบความถูกต้องของโทเค็น.
การตรวจสอบการเปลี่ยนแปลงบัญชี IdP ในพื้นหลัง¶
ผู้ใช้สามารถไปที่การตั้งค่าอุปกรณ์ระหว่างการเล่นเกมเพื่อเปลี่ยนบัญชี Apple Game Center หรือ Google Play Games ของตน หากคุณต้องการตรวจสอบว่าบัญชี IdP ระหว่างการเล่นเกมแตกต่างจากบัญชี IdP ของ PlayerID ปัจจุบันหรือไม่ ให้เรียกใช้ setProviderChangedListener() หลังจากทำการเริ่มต้น SDK โดยการเรียกใช้ API นี้ คุณจะได้รับเหตุการณ์ที่บ่งชี้ว่าบัญชี IdP ที่ตั้งไว้ในอุปกรณ์ได้เปลี่ยนแปลงเมื่อเกมกลับมาทำงานอีกครั้ง
iOS ทำงานร่วมกับ Apple Game Center และ Android ทำงานร่วมกับเกม Google Play เมื่อบัญชีถูกเปลี่ยน และการตอบสนองจะถูกส่งเฉพาะเมื่อ PlayerID ที่เข้าสู่ระบบอยู่ในปัจจุบันเชื่อมโยงกับ IdP ที่เกี่ยวข้อง เมื่อได้รับเหตุการณ์การเปลี่ยนแปลงบัญชี IdP UI จะถูกกำหนดค่าเพื่อให้ผู้ใช้เลือกว่าจะใช้บัญชี IdP ที่เข้าสู่ระบบในอุปกรณ์หรือไม่ หากผู้ใช้เลือกบัญชี IdP ที่เข้าสู่ระบบในอุปกรณ์ signOut จะถูกเรียกเพื่อออกจากระบบ และจากนั้นจะทำการเข้าสู่ระบบโดยอัตโนมัติ
Warning
อุปกรณ์ที่ติดตั้งเกม Google Play ที่เผยแพร่หลังจากเดือนกรกฎาคม 2021 ไม่สามารถเปลี่ยนบัญชี IdP ในพื้นหลังได้เนื่องจากปัญหาการดำเนินงานกับเกม Google Play.
Note
ฟีเจอร์นี้อาจทำให้เกมหยุดชั่วคราวและขอเปลี่ยนบัญชี และสามารถใช้ได้เฉพาะในช่วงเวลาที่ต้องการการซิงค์บัญชี เช่น การเข้าสู่ล็อบบี้หรือร้านค้า
ต่อไปนี้คือตัวอย่างโค้ดที่ตั้งค่าเพื่อรับเหตุการณ์เมื่อผู้ใช้เริ่มเกมใหม่และบัญชี IdP ที่ตั้งไว้บนอุปกรณ์ได้เปลี่ยนแปลง
API Reference: hive.AuthV4.setProviderChangedListener
#include "HiveAuthV4.h"
FHiveAuthV4::SetProviderChangedListener(FHiveAuthV4OnCheckProviderDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveProviderInfo& ProviderInfo) {
if (Result.IsSuccess()) {
// การเรียกใช้สำเร็จ ตรวจสอบข้อมูลผู้ใช้ที่เปลี่ยนแปลงผ่านวัตถุ ProviderInfo
}
}));
API Reference: AuthV4::setProviderChangedListener
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
AuthV4::setProviderChangedListener([=](ResultAPI const & result, ProviderInfo const & providerInfo) {
if (!result.isSuccess()) {
return;
}
if (providerInfo != null && providerInfo.providerType == ProviderType::GOOGLE) {
// เปลี่ยนบัญชีบริการเกม Google Play
}
});
API Reference: AuthV4.setProviderChangedListener
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.setProviderChangedListener(object : AuthV4.AuthV4CheckProviderListener {
override fun onDeviceProviderInfo(result: ResultAPI, providerInfo: AuthV4.ProviderInfo?) {
if (!result.isSuccess) {
return
}
if (providerInfo != null && providerInfo.providerType == AuthV4.ProviderType.GOOGLE) {
// เปลี่ยนบัญชีบริการเกม Google Play
}
}
})
API Reference: com.hive.AuthV4.setProviderChangedListener
API Reference: AuthV4Interface.setProviderChangedListener
API Reference: HIVEAuthV4:setProviderChangedListener
การเริ่มต้นข้อมูลเกม¶
ห้ามเรียก logout เมื่อเริ่มต้นข้อมูลเกม เนื่องจาก PlayerID จะไม่ถูกลบ อาจเกิดความขัดแย้งระหว่างบัญชีได้ คุณควรทำให้ผู้ใช้สามารถเล่นต่อด้วยบัญชีที่เข้าสู่ระบบอยู่ในปัจจุบันและไม่เรียก logout จนกว่าผู้ใช้จะร้องขออย่างชัดเจน
ออกจากระบบ¶
Warning
- ในระหว่างการออกจากระบบ ข้อมูลการตรวจสอบสิทธิ์ PlayerId และข้อมูลเซสชัน PlayerToken รวมถึงข้อมูลเซสชันของ IDP ทั้งหมดจะถูกลบออก
- ค่าที่ตั้งโดย API ทั้งหมดที่เริ่มต้นด้วย set จะไม่ถูกตั้งค่าใหม่หรือลบออก
- วิธีการทั้งหมดที่เริ่มต้นด้วย set ในคลาส Configuration, Auth, Auth v4, Promotion, และ Push
- ตัวอย่างที่เป็นตัวแทน ได้แก่ ex> Configuration.setServer, Configuration.setUseLog, Configuration.setGameLanguage, Configuration.setHiveCertificationKey, Auth.setEmergencyMode, AuthV4.setProviderChangedListener, Promotion.setUserEngagementReady, Promotion.setAddtionalInfo, Push.setRemotePush, Push.setForegroundPush เป็นต้น วิธีการทั้งหมดที่เริ่มต้นด้วย set จะอยู่ในหมวดหมู่นี้
- ตั้งแต่ Hive SDK v4 24.3.0 จะมีการส่งคืนรหัสข้อผิดพลาดเมื่อผู้ใช้ที่เป็นแขกออกจากระบบ หลังจากนั้น เซสชันของไคลเอนต์และเซิร์ฟเวอร์จะถูกเก็บรักษาไว้
- ช่วงความถูกต้องของค่าที่ตั้งค่าผ่านวิธีการที่เริ่มต้นด้วย set ใน SDK จะถูกเก็บรักษาไว้ภายในวงจรชีวิตของแอป โดยไม่คำนึงถึงสถานะการล็อกอินหรือออกจากระบบ
หากคุณได้เข้าสู่ระบบ Hive แล้ว PlayerID และกุญแจโทเค็นการตรวจสอบสิทธิ์จะถูกออกให้ การออกจากระบบจะทำหน้าที่ในการเริ่มต้น PlayerID และกุญแจโทเค็นการตรวจสอบสิทธิ์ เมื่อคุณเรียกใช้วิธีการ signOut() เพื่อทำการออกจากระบบ คุณจะถูกเปลี่ยนเส้นทางไปยังชื่อเกม และจะมีการเข้าสู่ระบบอย่างชัดเจนเมื่อคุณคลิกที่ชื่อเกม
เมื่อเรียกใช้ AuthV4.signOut การสื่อสารเครือข่ายกับเซิร์ฟเวอร์เป็นสิ่งจำเป็นเพื่อทำให้เซสชันการเข้าสู่ระบบหมดอายุ ดังนั้น จะมีการส่งคืนข้อผิดพลาดหากอุปกรณ์ไม่ได้เชื่อมต่อกับเครือข่าย。
Note
- เมื่อออกจากระบบในสถานะการเข้าสู่ระบบของแขก จะไม่สามารถค้นหา PlayerID เดิมได้อีก ดังนั้นกรุณาดำเนินการให้การออกจากระบบไม่สามารถทำได้ในสถานะแขก
- สถานะการเชื่อมต่อ IdP ของ PlayerID จะไม่เปลี่ยนแปลงแม้หลังจากออกจากระบบ
- เมื่อการออกจากระบบเสร็จสมบูรณ์ จะย้ายไปยังชื่อเกม และจะมีการเข้าสู่ระบบอย่างชัดเจนเมื่อคลิกที่ชื่อเกม
- หลังจากออกจากระบบ หากแอปถูกรีสตาร์ท จะมีการเข้าสู่ระบบโดยอัตโนมัติก่อน
นี่คือตัวอย่างโค้ดที่ทำการออกจากระบบ
API Reference: hive.AuthV4.signOut
#include "HiveAuthV4.h"
FHiveAuthV4::Helper::SignOut(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
AHIVESDKV4TesterGameMode::getGameModeInstance()->appendLogString(ELogType::AuthV4Helper ,TEXT("Helper::SignOut Result = %s"), *(Result.ToString()));
switch (Result.Code) {
case FHiveResultAPI::ECode::Success:
// Logout successful
break;
default:
// Other exceptions
break;
}
}));
API Reference: AuthV4::signOut
เอกสารอ้างอิง API: AuthV4.Helper.signOut
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.Helper.signOut(object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
when (result.code) {
ResultAPI.Code.Success -> {
// Logout successful
}
else -> {
// Other exceptional situations
}
}
}
})
เอกสาร API: AuthV4.Helper.signOut
เอกสาร API: AuthV4Interface.helper().signOut()
เอกสารอ้างอิง API: [HIVEAuthV4 helper] signOut
ข้อความแจ้งยกเลิกศูนย์เกม¶
| Language | Phrase |
|---|---|
| Korean | การเข้าสู่ระบบ Apple Game Center ถูกยกเลิกแล้ว กรุณาเข้าสู่ระบบที่ [การตั้งค่า > Game Center] เพื่อซิงค์กับบัญชี Game Center ของคุณและลองอีกครั้ง |
| English | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อซิงค์กับบัญชี Game Center และลองอีกครั้ง |
| Japanese | การเข้าสู่ระบบ Apple Game Center ถูกยกเลิกแล้ว กรุณาเข้าสู่ระบบที่ [การตั้งค่า > Game Center] เพื่อทดลองอีกครั้งหลังจากซิงค์กับบัญชี Game Center ของคุณ |
| Simplified Chinese | Apple Game Center ได้ออกจากระบบแล้ว หากคุณต้องการซิงค์กับบัญชี Game Center กรุณาเข้าสู่ระบบอีกครั้งที่ [การตั้งค่า> Game Center] และลองอีกครั้ง |
| Traditional Chinese | การเข้าสู่ระบบ Apple Game Center ถูกยกเลิกแล้ว หากคุณต้องการเชื่อมโยงกับบัญชี Game Center กรุณาเข้าสู่ระบบที่ [การตั้งค่า > Game Center] และลองอีกครั้ง |
| French | การเชื่อมต่อของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า > Game Center] เพื่อซิงค์บัญชี Game Center ของคุณและลองอีกครั้ง |
| German | การเข้าสู่ระบบไปยัง Apple Game Center ถูกยกเลิกแล้ว ซิงค์กับบัญชี Game Center โดยการเข้าสู่ระบบที่ [การตั้งค่า > Game Center] และลองอีกครั้ง |
| Russian | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบไปยัง Game Center ผ่าน [การตั้งค่า > Game Center] และลองอีกครั้ง |
| Spanish | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อซิงค์กับบัญชี Game Center และลองอีกครั้ง |
| Portuguese | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อซิงค์กับบัญชี Game Center และลองอีกครั้ง |
| Indonesian | การเข้าสู่ระบบไปยัง Apple Game Center ถูกยกเลิกแล้ว เชื่อมต่อบัญชี Game Center ของคุณโดยการเข้าสู่ระบบที่ [การตั้งค่า > Game Center] และลองอีกครั้ง |
| Malaysian | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อซิงค์กับบัญชี Game Center และลองอีกครั้ง |
| Vietnamese | การเข้าสู่ระบบไปยัง Apple Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า > Game Center] เพื่อซิงค์กับบัญชี Game Center ของคุณและลองอีกครั้ง |
| Thai | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อเชื่อมต่อกับบัญชี Game Center ของคุณและลองอีกครั้ง |
| Italian | การเข้าถึงของคุณไปยัง Apple Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า > Game Center] เพื่อซิงค์บัญชีของคุณกับ Game Center และลองอีกครั้ง |
| Turkish | การเข้าสู่ระบบของคุณไปยัง Apple Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อเข้าถึงบัญชี Game Center และลองอีกครั้ง |
| Arabic | การเข้าสู่ระบบของคุณไปยัง Game Center ถูกยกเลิกแล้ว เข้าสู่ระบบที่ [การตั้งค่า> Game Center] เพื่อซิงค์กับบัญชี Game Center ของคุณและลองอีกครั้ง |









