การจัดการเข้าสู่ระบบหลายบัญชี
การจัดการการเข้าสู่ระบบหลายบัญชี เป็นฟีเจอร์ที่บันทึกข้อมูลบัญชีเมื่อเข้าสู่ระบบหรือออกจากระบบ ช่วยให้ผู้ใช้สามารถโหลดข้อมูลบัญชีที่บันทึกไว้สำหรับการเข้าสู่ระบบในอนาคตได้ ซึ่งจะมอบประสบการณ์การเข้าสู่ระบบที่รวดเร็วและสะดวกสบายยิ่งขึ้นโดยการใช้ข้อมูลบัญชีที่ได้รับการตรวจสอบสิทธิ์ก่อนหน้านี้
กระบวนการดำเนินงานและข้อจำกัด¶
ก่อนที่จะดำเนินการฟีเจอร์การจัดการล็อกอินหลายบัญชี ให้เราอธิบายการไหลของการทำงานและข้อจำกัดต่างๆ
การดำเนินการต่อไปนี้สำหรับแต่ละฟังก์ชันเป็นสถานการณ์ตัวอย่างเพื่อใช้เป็นข้อมูลอ้างอิงเมื่อดำเนินการจัดการการเข้าสู่ระบบหลายบัญชี ขึ้นอยู่กับสภาพแวดล้อมการพัฒนาของคุณ ลำดับของการไหลหรือวิธีการบันทึกข้อมูลบัญชีอาจแตกต่างจากสถานการณ์เหล่านี้
การบันทึกข้อมูลบัญชีในขณะที่เข้าสู่ระบบ¶
สถานการณ์นี้อธิบายถึงการบันทึกข้อมูลบัญชีในขณะที่ผู้ใช้เข้าสู่ระบบหลังจากที่ได้ทำการ เข้าสู่ระบบอย่างชัดเจน เสร็จสิ้น
จากผลลัพธ์ของสถานการณ์นี้ คุณสามารถดำเนินการ เข้าสู่ระบบอีกครั้งหรือการลบบัญชีโดยใช้ข้อมูลบัญชีที่บันทึกไว้ ในภายหลัง
※ วิธีการบันทึกและจัดการข้อมูลบัญชีอาจแตกต่างกันไปขึ้นอยู่กับการนำไปใช้ของเกมไคลเอนต์
การบันทึกข้อมูลบัญชีเมื่อออกจากระบบ¶
สถานการณ์นี้อธิบายการบันทึกข้อมูลบัญชีเมื่อผู้ใช้ที่เข้าสู่ระบบออกจากระบบ.
จากผลลัพธ์ของสถานการณ์นี้ คุณสามารถดำเนินการ เข้าสู่ระบบอีกครั้งหรือการลบบัญชีโดยใช้ข้อมูลบัญชีที่บันทึกไว้ ในภายหลัง
※ วิธีการบันทึกและจัดการข้อมูลบัญชีอาจแตกต่างกันไปขึ้นอยู่กับการใช้งานของเกมไคลเอนต์
เข้าสู่ระบบอีกครั้งหรือ ลบโดยใช้ข้อมูลบัญชีที่บันทึก¶
นี่คือกระบวนการสำหรับการเข้าสู่ระบบอีกครั้งโดยใช้ข้อมูลบัญชีที่บันทึกหรือการลบข้อมูลบัญชีเฉพาะจากรายการที่ดึงมา ซึ่งเป็นสถานการณ์การใช้งานจริงสำหรับการจัดการการเข้าสู่ระบบหลายบัญชี.
ในขั้นตอนที่ผู้ใช้เลือกบัญชีจาก UI รายการ PlayerID ที่นำไปใช้ในเกม พฤติกรรมจะแตกต่างกันขึ้นอยู่กับว่าผู้ใช้เข้าสู่ระบบอยู่หรือไม่
※ วิธีการกำหนดค่าผู้ใช้สำหรับรายการ PlayerID ที่นำไปใช้ในไคลเอนต์เกมอาจแตกต่างกันไปขึ้นอยู่กับสภาพแวดล้อมการพัฒนาเกม。
ข้อจำกัดในการดำเนินงาน¶
ก่อนที่จะ ดำเนินการจัดการการเข้าสู่ระบบหลายบัญชี โปรดพิจารณาข้อจำกัดในการดำเนินงานดังต่อไปนี้
- ข้อมูลบัญชีสามารถบันทึกได้ เฉพาะเมื่อเข้าสู่ระบบ.
- การใช้ข้อมูลบัญชีที่บันทึกไว้เพื่อดูรายการ PlayerID หรือการลบข้อมูลบัญชีที่บันทึกไว้สามารถทำได้โดยไม่คำนึงถึงสถานะการเข้าสู่ระบบ.
- การเข้าสู่ระบบอีกครั้งด้วยข้อมูลบัญชีที่บันทึกไว้หลังจากดูรายการ PlayerID เป็นไปได้เฉพาะเมื่อออกจากระบบ.
คู่มือการใช้งาน¶
คู่มือนี้อธิบายวิธีการใช้งานฟีเจอร์การจัดการการเข้าสู่ระบบหลายบัญชีโดยใช้ SDK.
ดำเนินการฟีเจอร์ทีละขั้นตอนโดยการเรียกใช้ API ที่จัดเตรียมโดย SDK ตามลำดับต่อไปนี้:
- หลังจากที่เข้าสู่ระบบเสร็จสิ้น, บันทึกข้อมูลบัญชีที่เข้าสู่ระบบปัจจุบัน
- เพื่อเข้าสู่ระบบด้วยบัญชีที่บันทึกไว้หรือเพื่อลบข้อมูลบัญชีที่บันทึกไว้, เรียกคืนข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID)
- โดยใช้ข้อมูลบัญชีที่บันทึกไว้ที่เรียกคืนมา, ให้ดำเนินการฟีเจอร์เพื่อแสดง UI รายการ PlayerID เมื่อผู้ใช้คลิกที่ การจัดการการเข้าสู่ระบบหลายบัญชี
- ใน UI รายการ PlayerID, ให้ดำเนินการ เข้าสู่ระบบด้วยบัญชีที่บันทึกไว้ (PlayerID) หรือ ลบบัญชีที่บันทึกไว้ (PlayerID)
1. บันทึกข้อมูลบัญชีที่เข้าสู่ระบบปัจจุบัน¶
บันทึกข้อมูลบัญชีที่เข้าสู่ระบบอยู่ในขณะนี้ โดยการใช้ข้อมูลบัญชีที่บันทึกไว้ คุณสามารถ เข้าสู่ระบบได้เร็วขึ้นโดยไม่ต้องมีขั้นตอนการตรวจสอบสิทธิ์แยกต่างหากในระหว่างการเข้าสู่ระบบครั้งถัดไป
ในเกมไคลเอนต์ หากผู้ใช้ล็อกอินอยู่ ให้จัดเตรียมองค์ประกอบ UI ในเมนูการตั้งค่าบัญชีเพื่อให้ผู้ใช้สามารถบันทึกบัญชีที่ล็อกอินอยู่ในปัจจุบันได้ทุกเมื่อ และเรียกใช้ API บันทึกบัญชีเมื่อผู้ใช้เปิดใช้งานฟีเจอร์บันทึกบัญชี สำหรับการไหลที่เกี่ยวข้อง โปรดดูที่ การบันทึกข้อมูลบัญชีในขณะที่ล็อกอิน ข้างต้น
ตัวอย่างของการนำ UI ไปใช้สำหรับการบันทึกบัญชีที่เข้าสู่ระบบในปัจจุบันมีดังนี้
นอกจากนี้ เมื่อออกจากระบบ คุณสามารถดำเนินการตามขั้นตอนที่ว่า หากผู้ใช้ล็อกอินอยู่และเลือกที่จะออกจากระบบ จะมีป๊อปอัพแสดงขึ้นถามว่าต้องการบันทึกบัญชีหรือไม่ และหากผู้ใช้คลิก บันทึกและออกจากระบบ จะมีการเรียก API บันทึกบัญชีเพื่อบันทึกข้อมูลบัญชีที่ล็อกอินอยู่ในปัจจุบันและจากนั้นออกจากระบบ สำหรับขั้นตอนที่เกี่ยวข้อง โปรดดูที่ การบันทึกข้อมูลบัญชีเมื่อออกจากระบบ ข้างต้น
ตัวอย่างโค้ดสำหรับการเรียก API เพื่อบันทึกบัญชีที่เข้าสู่ระบบในปัจจุบันมีดังนี้
2. ดึงข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID)¶
ดึงข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID) จาก SDK และเซิร์ฟเวอร์การตรวจสอบสิทธิ์ ไคลเอนต์เกมสามารถใช้รายการ PlayerID ที่ดึงมาได้เพื่อ implement UI รายการ PlayerID แยกต่างหาก
ตัวอย่างโค้ดสำหรับเรียก API เพื่อดึงข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID) มีดังนี้
AuthV4.getStoredPlayerIdList(new AuthV4.AuthV4PlayerIdListListener() {
@Override
public void onAuthV4GetPlayerIdList(ResultAPI result, ArrayList<Long> playerIdList) {
if (result.isSuccess()) {
if(playerIdList != null) {
for(Long playerId : playerIdList) {
// API call succeeded
// playerId: player ID
}
}
}
}
});
3. ลงชื่อเข้าใช้ด้วยบัญชีที่บันทึกไว้ (PlayerID)¶
เข้าสู่ระบบอย่างรวดเร็วด้วยบัญชีที่บันทึกไว้ (PlayerID) ผ่านฟีเจอร์การจัดการล็อกอินหลายบัญชีในขณะที่ออกจากระบบ
ขั้นตอนการดำเนินการสำหรับการเข้าสู่ระบบด้วยบัญชีที่บันทึกไว้มีดังนี้
- หลังจากที่ผู้ใช้ออกจากระบบและพยายามเข้าสู่ระบบอีกครั้ง ในหน้าจอเข้าสู่ระบบ ให้คลิกที่ การจัดการการเข้าสู่ระบบหลายบัญชี → เรียก API เพื่อนำข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID)
- แสดง UI รายการ PlayerID ที่ดำเนินการในขั้นตอนก่อนหน้า
รูปที่ 3. ตัวอย่างการเข้าสู่ระบบด้วยบัญชีที่บันทึกผ่าน การจัดการการเข้าสู่ระบบหลายบัญชี
-
ผู้ใช้เลือกบัญชีเฉพาะจาก UI รายการ PlayerID และเข้าสู่ระบบ → เรียก API เพื่อลงชื่อเข้าใช้ด้วย 'ข้อมูลบัญชีที่บันทึกไว้ (PlayerID)'
'ตัวอย่างโค้ดสำหรับเรียก API เพื่อลงชื่อเข้าใช้ด้วย PlayerID ที่บันทึกไว้' มีดังนี้:AuthV4.signInWithStoredPlayerId(playerId, useAutoSignIn, (ResultAPI result, AuthV4.PlayerInfo playerInfo)=>{ if (result.isSuccess()) { // การตรวจสอบสิทธิ์สำเร็จ // playerInfo: ข้อมูลผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์ // ตัวอย่าง: ดึงข้อมูลอีเมล 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(); } });
FHiveAuthV4::SignInWithStoredPlayerId(playerId, useAutoSignIn, FHiveAuthV4OnSignInDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHivePlayerInfo& PlayerInfo) { if (Result.IsSuccess()) { // Authentication succeeded (PlayerInfo: Authenticated user information) // ตัวอย่าง: ดึงข้อมูลอีเมล for (const auto& ProviderInfoEntry : PlayerInfo.ProviderInfoData) { FHiveProviderInfo ProviderInfo = ProviderInfoEntry.Value; FString Email = ProviderInfo.ProviderEmail; } } else if (Result.NeedExit()) { // TODO: Implement app exit functionality // e.g.) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false); } }));
AuthV4::signInWithStoredPlayerId(playerId, useAutoSignIn, [=](ResultAPI const & result, PlayerInfo const & playerInfo) { if (result.isSuccess()) { // Authentication succeeded // 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 // e.g.) exit(0); // Unreal engine users // e.g.) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false); } });
AuthV4.signInWithStoredPlayerId(playerId, useAutoSignInState, 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(
4. ลบบัญชีที่บันทึกไว้ (PlayerID)¶
ลบบัญชีที่บันทึกไว้ (PlayerID) ผ่านฟีเจอร์การจัดการล็อกอินหลายบัญชีในขณะที่ออกจากระบบ.
ใน UI รายการ PlayerID ที่แสดง ผู้ใช้สามารถเลือกที่จะลบบัญชีที่บันทึก (PlayerID) แทนที่จะเข้าสู่ระบบ
<
ตัวอย่างโค้ดสำหรับเรียก API เพื่อลบบัญชีที่บันทึก (PlayerID) มีดังนี้
รหัสข้อผิดพลาด¶
ส่วนนี้อธิบายรหัสข้อผิดพลาดที่ส่งโดย SDK ระหว่างการดำเนินการฟีเจอร์การจัดการเข้าสู่ระบบหลายบัญชี
รหัสข้อผิดพลาด | ข้อความ | คำอธิบาย |
NEED_INITIALIZE | AuthV4NotInitialized | หากการตั้งค่า SDK ยังไม่เสร็จสมบูรณ์ (AuthV4.setup) |
IN_PROGRESS | AuthV4InProgress | หากมีการเรียก API อีกครั้งก่อนที่จะได้รับการตอบกลับ |
INVALID_SESSION | AuthV4SessionNotExist | หาก PlayerID ที่ร้องขอไม่มีอยู่ในรายการ |
INVALID_SESSION | AuthV4SessionProcessingFail | ไม่สามารถบันทึก/ลบเซสชันได้ |
หมายเหตุการใช้งาน¶
โปรดทราบสิ่งต่อไปนี้เมื่อดำเนินการฟีเจอร์การจัดการล็อกอินหลายบัญชี
-
ข้อจำกัดการเรียก API ต่อเนื่อง
หากคุณเรียก API ซ้ำ ๆ ก่อนที่จะได้รับการตอบสนองหลังจากการเรียกอินเทอร์เฟซ คุณอาจไม่ได้รับการตอบสนองปกติ อย่าลืมรอการตอบสนองก่อนที่จะเรียก API ถัดไป
-
ระวังวิธีการจัดเก็บเซสชันการเข้าสู่ระบบ
เซสชันการเข้าสู่ระบบจะถูกเก็บตามบัญชีที่เข้าสู่ระบบ ไม่ใช่ตามอุปกรณ์ ดังนั้น ขึ้นอยู่กับวิธีการที่นำไปใช้ ข้อมูลการเข้าสู่ระบบอาจถูกเปิดเผยต่อผู้ใช้คนอื่นที่ใช้ อุปกรณ์เดียวกัน โปรดระมัดระวังเมื่อใช้ฟีเจอร์การเก็บเซสชันการเข้าสู่ระบบสำหรับบริการที่ต้องการความปลอดภัย
-
ห้ามการใช้ฟีเจอร์การจัดการการเข้าสู่ระบบหลายบัญชีสำหรับการบังคับใช้ COPPA (ageGateU13 = true)
ฟีเจอร์การจัดการการเข้าสู่ระบบหลายบัญชีช่วยให้การเข้าสู่ระบบรวดเร็วโดยการบันทึกข้อมูลบัญชี อย่างไรก็ตาม สำหรับผู้ที่อยู่ภายใต้ COPPA ให้จำกัดฟีเจอร์การจัดการการเข้าสู่ระบบหลายบัญชีเพื่อไม่ให้บันทึกข้อมูลบัญชีและไม่ให้มีการเข้าสู่ระบบแบบเซสชัน
SDK ไม่ได้จำกัดการใช้ฟีเจอร์การจัดการล็อกอินหลายบัญชีโดยอัตโนมัติ ดังนั้นจึงต้องมีการตอบสนองแยกต่างหาก นอกจากนี้ COPPA จำกัดการเก็บรวบรวม การใช้ และการแบ่งปันข้อมูลส่วนบุคคลสำหรับผู้ใช้ที่อายุต่ำกว่า 13 ปี ดังนั้นจึงแนะนำให้หลีกเลี่ยงการจัดเก็บข้อมูลที่เกี่ยวข้อง รวมถึงข้อมูลเซสชัน