เข้าสู่ระบบและออกจากระบบ
การเข้าสู่ระบบในการตรวจสอบสิทธิ์ประกอบด้วยขั้นตอนดังต่อไปนี้
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 builds จะไม่สามารถใช้งานได้ สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ Quality Checklist for Google Play Games Services.
- การเข้าสู่ระบบโดยอัตโนมัติสำหรับ Google Play Games ควรพยายามทำในระหว่างการเข้าสู่ระบบครั้งแรกเท่านั้น สำหรับรายละเอียดเพิ่มเติม โปรดดูที่คู่มือของนักพัฒนา Google 1.5 Remember if players declined signing-in.
Note
- ในประเทศจีน การเข้าสู่ระบบแบบปริยายไม่สามารถใช้ได้บน Android เพราะเกม Google Play ไม่มีให้บริการ
- ในประเทศจีน ไม่สามารถใช้ 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
สำหรับการเข้าสู่ระบบ PC X IdP สามารถเข้าสู่ระบบด้วยบัญชี X ได้ แต่ไม่รองรับการเข้าสู่ระบบผ่านการรวมบัญชี Google และ Apple บนหน้าจอเข้าสู่ระบบ X ในการเข้าสู่ระบบ X ด้วยการรวมบัญชี Google หรือ Apple คุณต้องเข้าสู่ระบบด้วยบัญชีที่เกี่ยวข้องในเบราว์เซอร์ภายนอกก่อน แล้วจึงดำเนินการเข้าสู่ระบบ X ในเกม
สำหรับการเข้าสู่ระบบ Steam Deck X IdP รองรับเฉพาะการเข้าสู่ระบบด้วยบัญชี X เท่านั้น
การเข้าสู่ระบบอัตโนมัติและการเข้าสู่ระบบโดยปริยาย¶
การเข้าสู่ระบบอัตโนมัติ¶
หมายความว่าผู้ใช้เข้าสู่ระบบโดยอัตโนมัติด้วยการเชื่อมโยงบัญชี Apple Game Center ของตนบน iOS และบัญชี Google Play Games ของตนบน Android โดยไม่ต้องเลือกวิธีการเข้าสู่ระบบ มันจะดำเนินการเข้าสู่ระบบอัตโนมัติและทำการเข้าสู่ระบบโดยปริยายในกรณีที่การเข้าสู่ระบบอัตโนมัติล้มเหลว
ในการใช้การเข้าสู่ระบบอัตโนมัติในสภาพแวดล้อม iOS คุณต้องเพิ่ม Game Center Entitlement และหากคุณตรวจสอบ 'Apple GameCenter' Dependency ใน Unity มันจะเพิ่ม Entitlement ที่เกี่ยวข้องโดยอัตโนมัติผ่าน Unity PostProcess ใน 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.
การเข้าสู่ระบบอัตโนมัติในสภาพแวดล้อม 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' Dependency แล้ว Entitlement ที่เกี่ยวข้องจะถูกเพิ่มโดยอัตโนมัติผ่าน Unity PostProcess.
Note
เมื่อใช้คลาส AuthV4Helper
หากผู้ใช้ที่กำลังเล่นเกมปฏิเสธความพยายามในการเข้าสู่ระบบโดยปริยายระหว่าง PGS ระบบจะจดจำสิ่งนี้และจะไม่พยายามเข้าสู่ระบบโดยปริยายอีกต่อไป แม้ว่าการเข้าสู่ระบบอัตโนมัติจะเป็นไปได้ในขณะที่เซสชันของผู้เล่นยังคงอยู่ ระบบจะยังคงจดจำสถานะของการเข้าสู่ระบบโดยปริยายที่ถูกปฏิเสธเนื้อหานี้อิงจากคู่มือบริการเกม Google Play
ต่อไปนี้คือตัวอย่างโค้ดที่ทำการเข้าสู่ระบบโดยอัตโนมัติ
API Reference: hive.AuthV4.Helper.signIn
// Attempt to log 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:
// 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
// Cocos2d-x engine users
// e.g. exit(0);
// 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:
// Failed implicit login
// ex) AuthV4.showSignIn(...);
break;
default:
break;
}
}
});
API Reference: hive.AuthV4.Helper.signIn
// พยายามเข้าสู่ระบบ (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 -> {
// ล้มเหลวในการเข้าสู่ระบบโดยอัตโนมัติ
// ex) AuthV4.showSignIn(...)
}
else -> {
// สถานการณ์ข้อยกเว้นอื่น ๆ
}
}
}
}
})
API Reference: 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 Reference: 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
) จะมีการแสดงกล่องโต้ตอบเพื่อถามผู้ใช้ว่าต้องการเข้าสู่ระบบด้วยบัญชีที่เข้าสู่ระบบล่าสุดในกรณีที่มีความขัดแย้งของบัญชีเมื่อเข้าสู่ระบบด้วยบัญชีที่แตกต่างหลังจากการเข้าสู่ระบบครั้งแรก
พฤติกรรมการเข้าสู่ระบบโดยปริยาย: PC¶
การเข้าสู่ระบบโดยอัตโนมัติบน PC (เช่น Hive SDK Unity สำหรับ Windows และแพลตฟอร์ม 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
หากผู้ใช้ปิด UI การเลือก IdP ที่จัดเตรียมโดย SDK โดยการกดปุ่ม 'X' จะต้องมีวิธีการเข้าสู่ระบบอีกครั้ง ผู้ใช้ยังไม่ได้เข้าสู่ระบบ
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 app exit functionality
// e.g.) Application.Quit();
}
});
#include "HiveAuthV4.h"
// การร้องขอ UI การตรวจสอบสิทธิ์ Hive SDK AuthV4
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
// ตัวอย่าง) exit(0);
// สำหรับผู้ใช้เอนจิน Unreal
// ตัวอย่าง) 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) {
// Authentication successful
// playerInfo: Authenticated user information
// ตัวอย่างการดึงข้อมูลอีเมล
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: 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);
}
}];
การปรับแต่งการเข้าสู่ระบบแบบชัดเจน¶
UI ที่ปรับแต่งได้สำหรับการเข้าสู่ระบบที่ชัดเจนสามารถนำไปใช้ได้โดยใช้ providerTypeList
โดย providerTypeList
เป็นตัวจัดการการตอบกลับที่ส่งกลับเมื่อเรียกใช้วิธี AuthV4.setup()
เพื่อเริ่มต้น SDK Hive หรือเมื่อเรียกใช้วิธี 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()) {
// Call succeeded
// playerInfo : authenticated user information.
// Example of retrieving email information for 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) เมื่อดำเนินการ 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 ที่ได้รับใน callback เพื่อตรวจสอบข้อมูลของผู้ใช้ที่เข้าสู่ระบบแบบกำหนดเอง 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: Implement app exit functionality
// ตัวอย่าง) 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
// e.g.) exit(0);
// สำหรับผู้ใช้เครื่องยนต์ Unreal
// e.g.) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
}
});
});
เอกสารอ้างอิง API: com.hive.Auth4.signIn
// Directly implemented Twitter login 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 by Type, 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
} 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, ประเภทที่กำหนดเองถูกกำหนดโดย Type ดังนั้นต้องแยกแยะโดย 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
// Directly implemented Twitter login 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: นำฟังก์ชันการออกจากแอปไปใช้
// ตัวอย่าง) exit(0);
}
}];
}];
ชื่อผู้ใช้¶
เนื่องจากปัญหาต่างๆ เช่น COPPA ในสหรัฐอเมริกา เมื่อเข้าถึงและเข้าสู่ระบบในฐานะ IdP จากสหรัฐอเมริกาและดินแดนของมัน คุณต้องป้อนชื่อผู้ใช้เพื่อเปิดใช้งานการประมวลผลการตรวจสอบสิทธิ์การระบุตัวตนของผู้ใช้เพิ่มเติม สำหรับการอ้างอิง ประเทศที่รวมอยู่ในดินแดนของสหรัฐอเมริกาคือ อเมริกันซามัว (AS), กวม (GU), หมู่เกาะนอร์เทิร์นมาเรียนา (MP), เปอร์โตริโก (PR), หมู่เกาะเล็กน้อยของสหรัฐอเมริกา (UM) และหมู่เกาะเวอร์จินของสหรัฐอเมริกา (VI) หน้าจอป้อนชื่อผู้ใช้สำหรับการระบุตัวตนของผู้ใช้มีดังนี้
- หน้าจอกรอกชื่อผู้ใช้ใช้เพื่อการระบุผู้ใช้เท่านั้นและจะแสดงเพียงครั้งเดียวในระหว่างการรวม IdP เบื้องต้น; จะไม่แสดงอีกต่อไป
- หน้าจอกรอกชื่อผู้ใช้จะไม่แสดงในระหว่างการเข้าสู่ระบบในฐานะแแขก
การตรวจสอบคีย์โทเค็นการรับรองความถูกต้อง¶
เซิร์ฟเวอร์เกมสามารถตรวจสอบความถูกต้องของคีย์โทเค็นโดยใช้ข้อมูลโทเค็น, playerId, และ DID ที่ส่งกลับหลังจากการเข้าสู่ระบบที่สำเร็จ การพิสูจน์ตัวตน Hive อนุญาตให้เข้าสู่ระบบจากหลายอุปกรณ์และการเข้าถึงพร้อมกัน
หากไม่อนุญาตให้เข้าถึงซ้ำด้วยบัญชีเดียวกัน เซิร์ฟเวอร์เกมจะแสดงข้อความแจ้งเตือนบนอุปกรณ์ที่เชื่อมต่อก่อนและจากนั้นจะสิ้นสุดเกม ทำให้เกมสามารถดำเนินการต่อได้บนอุปกรณ์ที่เชื่อมต่อภายหลัง ในกรณีนี้ หากคุณพยายามเข้าถึงเกมอีกครั้งโดยไม่สิ้นสุดเกม บันทึกการเล่นของคุณอาจไม่สะท้อนอย่างถูกต้อง เพื่อใช้ฟีเจอร์นี้ คุณต้องจัดการกับคีย์โทเค็นที่ได้รับการตรวจสอบแล้วหรือจัดการกับคีย์เซสชันของเกมเองโดยใช้มัน
โปรดดูที่ API เซิร์ฟเวอร์การตรวจสอบความถูกต้องของโทเค็น เพื่อดำเนินการฟีเจอร์นี้
การตรวจจับการเปลี่ยนแปลงบัญชี IdP ในพื้นหลัง¶
ผู้ใช้สามารถเปลี่ยนบัญชีเกม Apple Game Center หรือ Google Play ของตนได้โดยไปที่การตั้งค่าอุปกรณ์ในขณะที่เกมกำลังทำงานอยู่ หากคุณต้องการตรวจสอบว่าบัญชี IdP ในระหว่างการเล่นเกมแตกต่างจากบัญชี IdP ที่เชื่อมโยงกับ PlayerID ปัจจุบันหรือไม่ ให้เรียก setProviderChangedListener()
หลังจากเริ่มต้น SDK โดยการเรียก API นี้ คุณจะได้รับเหตุการณ์ที่ระบุว่าบัญชี IdP ที่ตั้งไว้ในอุปกรณ์ได้เปลี่ยนแปลงเมื่อเกมกลับมาทำงานอีกครั้ง
iOS ทำงานเมื่อบัญชี Apple Game Center ถูกเปลี่ยน และ Android ทำงานเมื่อบัญชี Google Play Games ถูกเปลี่ยน และการตอบสนองจะถูกส่งมอบเฉพาะเมื่อ PlayerID ที่เข้าสู่ระบบในปัจจุบันเชื่อมโยงกับ IdP นั้น เมื่อได้รับเหตุการณ์การเปลี่ยนแปลงบัญชี IdP UI จะถูกกำหนดค่าเพื่อให้ผู้ใช้เลือกว่าจะใช้บัญชี IdP ที่เข้าสู่ระบบในอุปกรณ์หรือไม่ หากผู้ใช้เลือกบัญชี IdP ที่เข้าสู่ระบบในอุปกรณ์ signOut
จะถูกเรียกเพื่อออกจากระบบ และจากนั้นจะดำเนินการเข้าสู่ระบบโดยอัตโนมัติ
Warning
อุปกรณ์ที่ติดตั้งเกม Google Play ที่เผยแพร่หลังจากเดือนกรกฎาคม 2021 ไม่สามารถเปลี่ยนบัญชี IdP ในพื้นหลังได้เนื่องจากปัญหาการดำเนินงานกับเกม Google Play.
Note
ฟีเจอร์นี้อาจทำให้เกิดการหยุดชะงักในเกมและขอให้เปลี่ยนบัญชี และสามารถใช้ได้เฉพาะในช่วงเวลาที่จำเป็นต้องมีการซิงค์บัญชี เช่น การเข้าสู่ล็อบบี้หรือร้านค้า
ต่อไปนี้คือตัวอย่างโค้ดที่ตั้งค่าเพื่อรับเหตุการณ์เมื่อผู้ใช้เริ่มเกมใหม่และบัญชี IdP ที่ตั้งไว้ในอุปกรณ์ได้เปลี่ยนแปลง
API Reference: hive.AuthV4.setProviderChangedListener
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: 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: AuthV4Interface.setProviderChangedListener
API Reference: HIVEAuthV4:setProviderChangedListener
การเริ่มต้นข้อมูลเกม¶
อย่าทำการออกจากระบบเมื่อเริ่มต้นข้อมูลเกม เนื่องจาก PlayerID จะไม่ถูกลบ อาจเกิดความขัดแย้งระหว่างบัญชีได้ คุณควรทำให้แน่ใจว่าไม่ทำการออกจากระบบจนกว่าผู้ใช้จะร้องขออย่างชัดเจน เนื่องจากพวกเขาควรสามารถเล่นต่อไปได้ด้วยบัญชีที่เข้าสู่ระบบอยู่ในขณะนี้
ออกจากระบบ¶
Warning
- เมื่อออกจากระบบ ข้อมูลการตรวจสอบสิทธิ์ PlayerId และข้อมูลเซสชัน PlayerToken รวมถึงข้อมูลเซสชัน IDP ทั้งหมดจะถูกลบ
- ค่าที่ตั้งโดย API ทั้งหมดที่เริ่มต้นด้วย set จะไม่ถูกตั้งค่าใหม่หรือลบ
- วิธีการทั้งหมดที่เริ่มต้นด้วย set ในคลาส Configuration, Auth, Auth v4, Promotion และ Push
- ตัวอย่างที่เป็นตัวแทน ได้แก่ 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()
เพื่อทำการออกจากระบบ คุณจะถูกนำกลับไปยังชื่อเกม และจะมีการเข้าสู่ระบบอย่างชัดเจนเมื่อคุณคลิกที่ชื่อเกม
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 -> {
// ออกจากระบบสำเร็จ
}
else -> {
// สถานการณ์ข้อยกเว้นอื่น ๆ
}
}
}
})
เอกสารอ้างอิง 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] เพื่อลองอีกครั้ง. |
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 ของคุณและลองอีกครั้ง. |