ข้ามไปที่เนื้อหา

การจัดการเข้าสู่ระบบหลายบัญชี

การจัดการการเข้าสู่ระบบหลายบัญชี เป็นฟีเจอร์ที่บันทึกข้อมูลบัญชีเมื่อเข้าสู่ระบบหรือออกจากระบบ ช่วยให้ผู้ใช้สามารถโหลดข้อมูลบัญชีที่บันทึกไว้สำหรับการเข้าสู่ระบบในอนาคตได้ ซึ่งจะมอบประสบการณ์การเข้าสู่ระบบที่รวดเร็วและสะดวกสบายยิ่งขึ้นโดยการใช้ข้อมูลบัญชีที่ได้รับการตรวจสอบสิทธิ์ก่อนหน้านี้


กระบวนการดำเนินงานและข้อจำกัด

ก่อนที่จะดำเนินการฟีเจอร์การจัดการล็อกอินหลายบัญชี ให้เราอธิบายการไหลของการทำงานและข้อจำกัดต่างๆ

การดำเนินการต่อไปนี้สำหรับแต่ละฟังก์ชันเป็นสถานการณ์ตัวอย่างเพื่อใช้เป็นข้อมูลอ้างอิงเมื่อดำเนินการจัดการการเข้าสู่ระบบหลายบัญชี ขึ้นอยู่กับสภาพแวดล้อมการพัฒนาของคุณ ลำดับของการไหลหรือวิธีการบันทึกข้อมูลบัญชีอาจแตกต่างจากสถานการณ์เหล่านี้

การบันทึกข้อมูลบัญชีในขณะที่เข้าสู่ระบบ

สถานการณ์นี้อธิบายถึงการบันทึกข้อมูลบัญชีในขณะที่ผู้ใช้เข้าสู่ระบบหลังจากที่ได้ทำการ เข้าสู่ระบบอย่างชัดเจน เสร็จสิ้น

จากผลลัพธ์ของสถานการณ์นี้ คุณสามารถดำเนินการ เข้าสู่ระบบอีกครั้งหรือการลบบัญชีโดยใช้ข้อมูลบัญชีที่บันทึกไว้ ในภายหลัง

※ วิธีการบันทึกและจัดการข้อมูลบัญชีอาจแตกต่างกันไปขึ้นอยู่กับการนำไปใช้ของเกมไคลเอนต์


การบันทึกข้อมูลบัญชีเมื่อออกจากระบบ

สถานการณ์นี้อธิบายการบันทึกข้อมูลบัญชีเมื่อผู้ใช้ที่เข้าสู่ระบบออกจากระบบ.

จากผลลัพธ์ของสถานการณ์นี้ คุณสามารถดำเนินการ เข้าสู่ระบบอีกครั้งหรือการลบบัญชีโดยใช้ข้อมูลบัญชีที่บันทึกไว้ ในภายหลัง

※ วิธีการบันทึกและจัดการข้อมูลบัญชีอาจแตกต่างกันไปขึ้นอยู่กับการใช้งานของเกมไคลเอนต์


เข้าสู่ระบบอีกครั้งหรือ ลบโดยใช้ข้อมูลบัญชีที่บันทึก

นี่คือกระบวนการสำหรับการเข้าสู่ระบบอีกครั้งโดยใช้ข้อมูลบัญชีที่บันทึกหรือการลบข้อมูลบัญชีเฉพาะจากรายการที่ดึงมา ซึ่งเป็นสถานการณ์การใช้งานจริงสำหรับการจัดการการเข้าสู่ระบบหลายบัญชี.

ในขั้นตอนที่ผู้ใช้เลือกบัญชีจาก UI รายการ PlayerID ที่นำไปใช้ในเกม พฤติกรรมจะแตกต่างกันขึ้นอยู่กับว่าผู้ใช้เข้าสู่ระบบอยู่หรือไม่

※ วิธีการกำหนดค่าผู้ใช้สำหรับรายการ PlayerID ที่นำไปใช้ในไคลเอนต์เกมอาจแตกต่างกันไปขึ้นอยู่กับสภาพแวดล้อมการพัฒนาเกม。

ข้อจำกัดในการดำเนินงาน

ก่อนที่จะ ดำเนินการจัดการการเข้าสู่ระบบหลายบัญชี โปรดพิจารณาข้อจำกัดในการดำเนินงานดังต่อไปนี้

  • ข้อมูลบัญชีสามารถบันทึกได้ เฉพาะเมื่อเข้าสู่ระบบ.
  • การใช้ข้อมูลบัญชีที่บันทึกไว้เพื่อดูรายการ PlayerID หรือการลบข้อมูลบัญชีที่บันทึกไว้สามารถทำได้โดยไม่คำนึงถึงสถานะการเข้าสู่ระบบ.
  • การเข้าสู่ระบบอีกครั้งด้วยข้อมูลบัญชีที่บันทึกไว้หลังจากดูรายการ PlayerID เป็นไปได้เฉพาะเมื่อออกจากระบบ.

คู่มือการใช้งาน

คู่มือนี้อธิบายวิธีการใช้งานฟีเจอร์การจัดการการเข้าสู่ระบบหลายบัญชีโดยใช้ SDK.

ดำเนินการฟีเจอร์ทีละขั้นตอนโดยการเรียกใช้ API ที่จัดเตรียมโดย SDK ตามลำดับต่อไปนี้:

  1. หลังจากที่เข้าสู่ระบบเสร็จสิ้น, บันทึกข้อมูลบัญชีที่เข้าสู่ระบบปัจจุบัน
  2. เพื่อเข้าสู่ระบบด้วยบัญชีที่บันทึกไว้หรือเพื่อลบข้อมูลบัญชีที่บันทึกไว้, เรียกคืนข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID)
  3. โดยใช้ข้อมูลบัญชีที่บันทึกไว้ที่เรียกคืนมา, ให้ดำเนินการฟีเจอร์เพื่อแสดง UI รายการ PlayerID เมื่อผู้ใช้คลิกที่ การจัดการการเข้าสู่ระบบหลายบัญชี
  4. ใน UI รายการ PlayerID, ให้ดำเนินการ เข้าสู่ระบบด้วยบัญชีที่บันทึกไว้ (PlayerID) หรือ ลบบัญชีที่บันทึกไว้ (PlayerID)

1. บันทึกข้อมูลบัญชีที่เข้าสู่ระบบปัจจุบัน

บันทึกข้อมูลบัญชีที่เข้าสู่ระบบอยู่ในขณะนี้ โดยการใช้ข้อมูลบัญชีที่บันทึกไว้ คุณสามารถ เข้าสู่ระบบได้เร็วขึ้นโดยไม่ต้องมีขั้นตอนการตรวจสอบสิทธิ์แยกต่างหากในระหว่างการเข้าสู่ระบบครั้งถัดไป

ในเกมไคลเอนต์ หากผู้ใช้ล็อกอินอยู่ ให้จัดเตรียมองค์ประกอบ UI ในเมนูการตั้งค่าบัญชีเพื่อให้ผู้ใช้สามารถบันทึกบัญชีที่ล็อกอินอยู่ในปัจจุบันได้ทุกเมื่อ และเรียกใช้ API บันทึกบัญชีเมื่อผู้ใช้เปิดใช้งานฟีเจอร์บันทึกบัญชี สำหรับการไหลที่เกี่ยวข้อง โปรดดูที่ การบันทึกข้อมูลบัญชีในขณะที่ล็อกอิน ข้างต้น

ตัวอย่างของการนำ UI ไปใช้สำหรับการบันทึกบัญชีที่เข้าสู่ระบบในปัจจุบันมีดังนี้

รูปที่ 1. ตัวอย่างการนำไปใช้ในการบันทึกบัญชีที่เข้าสู่ระบบในขณะที่ล็อกอินอยู่

นอกจากนี้ เมื่อออกจากระบบ คุณสามารถดำเนินการตามขั้นตอนที่ว่า หากผู้ใช้ล็อกอินอยู่และเลือกที่จะออกจากระบบ จะมีป๊อปอัพแสดงขึ้นถามว่าต้องการบันทึกบัญชีหรือไม่ และหากผู้ใช้คลิก บันทึกและออกจากระบบ จะมีการเรียก API บันทึกบัญชีเพื่อบันทึกข้อมูลบัญชีที่ล็อกอินอยู่ในปัจจุบันและจากนั้นออกจากระบบ สำหรับขั้นตอนที่เกี่ยวข้อง โปรดดูที่ การบันทึกข้อมูลบัญชีเมื่อออกจากระบบ ข้างต้น

รูปที่ 2. ตัวอย่างการบันทึกบัญชีที่เข้าสู่ระบบในปัจจุบันเมื่อออกจากระบบ

ตัวอย่างโค้ดสำหรับการเรียก API เพื่อบันทึกบัญชีที่เข้าสู่ระบบในปัจจุบันมีดังนี้

AuthV4.storeCurrentPlayerId((ResultAPI result)=>{
    if (result.isSuccess()) {
        // API call succeeded
    }
});
FHiveAuthV4::StoreCurrentPlayerId(FHiveAuthV4OnStoreCurrentPlayerIdDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
    if (Result.IsSuccess()) {
        // API call succeeded
    } 
}));
AuthV4::storeCurrentPlayerId([=](ResultAPI const & result) {
    if (result.isSuccess()) {
        // API call succeeded
    }
});
AuthV4.storeCurrentPlayerId(object : AuthV4.AuthV4StorePlayerIdListener {
    override fun onAuthV4StorePlayerId(result: ResultAPI) {
        if (result.isSuccess) {
            // API call succeeded
        }
    }
})
AuthV4.storeCurrentPlayerId(new AuthV4.AuthV4StorePlayerIdListener() {
    @Override
    public void onAuthV4StorePlayerId(ResultAPI result) {
        if (result.isSuccess()) {
            // API call succeeded
        }
    }
});
AuthV4Interface.storeCurrentPlayerId { (result) in
    if result.isSuccess() {
        // API call succeeded
    }
}
[HIVEAuthV4 storeCurrentPlayerId: ^(HIVEResultAPI * result) {
    if([result isSuccess]){
        // API call succeeded
    }
}];


2. ดึงข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID)

ดึงข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID) จาก SDK และเซิร์ฟเวอร์การตรวจสอบสิทธิ์ ไคลเอนต์เกมสามารถใช้รายการ PlayerID ที่ดึงมาได้เพื่อ implement UI รายการ PlayerID แยกต่างหาก

ตัวอย่างโค้ดสำหรับเรียก API เพื่อดึงข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID) มีดังนี้

AuthV4.getStoredPlayerIdList((ResultAPI result, List<long> playerIdList) =>
{
    if (result.isSuccess())
    {
        foreach (long playerId in playerIdList) {
            // API call succeeded
            // playerId: player ID
        }
    }
});
FHiveAuthV4::GetStoredPlayerIdList(FHiveAuthV4OnGetStoredPlayerIdListDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<int64>& PlayerIdList) {
    if (Result.IsSuccess()) {
        for (int64 PlayerId : PlayerIdList) {
            // API call succeeded
            // playerId: player ID
        }
    }
}));
AuthV4::getStoredPlayerIdList([=](ResultAPI const & result, std::vector<PlayerID> const& playerIdList) {
    if (result.isSuccess()) {
        for (auto playerId : playerIdList) {
            // API call succeeded
            // playerId: player ID
        }
    }
});
AuthV4.getStoredPlayerIdList(object : AuthV4.AuthV4PlayerIdListListener {
    override fun onAuthV4GetPlayerIdList(result: ResultAPI, playerIdList: ArrayList<Long>?) {
        if (result.isSuccess) {
            playerIdList?.let {
                for (playerId in it) {
                    // API call succeeded
                            // playerId: player ID
                }
            }
        }
    }
})
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
                }
            }
        }
    }
});
AuthV4Interface.getStoredPlayerIdList { (result, playerIdList) in
    if result.isSuccess() {
        for playerId in playerIdList {
                            // การเรียก API สำเร็จ
                            // playerId: รหัสผู้เล่น
        }
    }
}
[HIVEAuthV4 getStoredPlayerIdList: ^(HIVEResultAPI * result, NSArray<NSNumber *> * playerIdList) {
    if([result isSuccess]){
        for (NSNumber* playerId in playerIdList) {
            // API call succeeded
            // playerId: player ID
        }
    }
}];


3. ลงชื่อเข้าใช้ด้วยบัญชีที่บันทึกไว้ (PlayerID)

เข้าสู่ระบบอย่างรวดเร็วด้วยบัญชีที่บันทึกไว้ (PlayerID) ผ่านฟีเจอร์การจัดการล็อกอินหลายบัญชีในขณะที่ออกจากระบบ

ขั้นตอนการดำเนินการสำหรับการเข้าสู่ระบบด้วยบัญชีที่บันทึกไว้มีดังนี้

  1. หลังจากที่ผู้ใช้ออกจากระบบและพยายามเข้าสู่ระบบอีกครั้ง ในหน้าจอเข้าสู่ระบบ ให้คลิกที่ การจัดการการเข้าสู่ระบบหลายบัญชี → เรียก API เพื่อนำข้อมูลบัญชีที่บันทึกไว้ (รายการ PlayerID)
  2. แสดง UI รายการ PlayerID ที่ดำเนินการในขั้นตอนก่อนหน้า

    รูปที่ 3. ตัวอย่างการเข้าสู่ระบบด้วยบัญชีที่บันทึกผ่าน การจัดการการเข้าสู่ระบบหลายบัญชี


  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) แทนที่จะเข้าสู่ระบบ

รูปที่ 4. ตัวอย่างการลบบัญชีที่บันทึกไว้ผ่าน การจัดการล็อกอินหลายบัญชี


<

ตัวอย่างโค้ดสำหรับเรียก API เพื่อลบบัญชีที่บันทึก (PlayerID) มีดังนี้

AuthV4.deleteStoredPlayerId(playerId, (ResultAPI result)=>{
    if (result.isSuccess()) {
        // API call succeeded
    }
});
FHiveAuthV4::DeleteStoredPlayerId(playerId, FHiveAuthV4OnDeleteStoredPlayerIdDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
    if (Result.IsSuccess()) {
        // API call succeeded
    } 
}));
AuthV4::deleteStoredPlayerId(playerId, [=](ResultAPI const & result) {
    if (result.isSuccess()) {
        // API call succeeded
    }
});
AuthV4.deleteStoredPlayerId(playerId, object : AuthV4.AuthV4DeletePlayerIdListener {
    override fun onAuthV4DeletePlayerId(result: ResultAPI) {
        if (result.isSuccess) {
            // API call succeeded
        }
    }
})
AuthV4.deleteStoredPlayerId(playerId, new AuthV4.AuthV4DeletePlayerIdListener() {
    @Override
    public void onAuthV4DeletePlayerId(ResultAPI result) {
        if (result.isSuccess()) {
            // API call succeeded
        }
    }
});
AuthV4Interface.deleteStoredPlayerId(playerId) { (result) in
    if result.isSuccess() {
        // API call succeeded
    }
}
[HIVEAuthV4 deleteStoredPlayerId: playerId handler:^(HIVEResultAPI *result) {
    if([result isSuccess]){
        // API call succeeded
    }
}];


รหัสข้อผิดพลาด

ส่วนนี้อธิบายรหัสข้อผิดพลาดที่ส่งโดย 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 ปี ดังนั้นจึงแนะนำให้หลีกเลี่ยงการจัดเก็บข้อมูลที่เกี่ยวข้อง รวมถึงข้อมูลเซสชัน