เชื่อมโยง Idp
Note
- สำหรับคำอธิบายของ AuthV4.Helper โปรดดูที่หน้า Authentication
หลังจากเข้าสู่ระบบ ผู้ใช้จะต้องสามารถแสดงสถานะการเชื่อมโยงของ PlayerID ที่ใช้งานอยู่ในขณะนี้และได้รับความสามารถในการเชื่อมโยงกับ IdP อื่น ๆ (ผู้ให้บริการ ID ซึ่งจะเรียกว่า IdP ต่อไป)
โปรดกำหนดค่าผู้ใช้ให้แสดงสถานะการรวม IdP ในเมนูการตั้งค่าเกมและอนุญาตให้มีการรวม IdP และการตัดการเชื่อมต่อ
ตรวจสอบข้อมูลสถานะการรวม IdP¶
คุณสามารถตรวจสอบรายชื่อ IdP ที่เชื่อมโยงกับ PlayerID ที่เข้าสู่ระบบในปัจจุบันได้โดยใช้ AuthV4 คลาส's getPlayerInfo()
วิธีการ กรุณากำหนดค่า UI เพื่อแสดงว่า IdP ใดเชื่อมโยงในหน้าจอการตั้งค่าในเกมและเปิดเผย ข้อความที่กระตุ้นการรวม IdP。
ในหน้าจอการตั้งค่าในเกม จะต้องแสดง PlayerID ของผู้ใช้พร้อมกับข้อมูลการรวม IdP PlayerID ควรระบุว่าเป็น CS Code และควรเปิดเผยค่าของ PlayerID ของผู้ใช้ที่เข้าสู่ระบบอยู่ในขณะนี้
- หน้าจอตัวอย่างสำหรับตรวจสอบ IdP ที่เชื่อมโยงกับ PlayerID ที่เข้าสู่ระบบในปัจจุบัน
- หน้าจอตัวอย่างสำหรับกระตุ้นการเชื่อมโยงบัญชี
ต่อไปนี้จะตรวจสอบรายการ IdP ที่มีอยู่ในแอปปัจจุบันผ่านทาง providerTypeList ที่ส่งกลับจาก setup()
และจากนั้นใช้โค้ดตัวอย่างด้านล่างเพื่อตรวจสอบรายการ IdP ที่เชื่อมโยงกับ PlayerID และแสดงสถานะการเชื่อมโยง
API Reference: hive.AuthV4.getPlayerInfo
API Reference: AuthV4::getPlayerInfo
// Request the sync status of Hive SDK AuthV4
for( auto providerInfo : AuthV4::getPlayerInfo().providerInfoData ) {
cout<<"ProviderType : "<<ProviderInfo::stringProviderType(providerInfo.second.providerType)<<endl;
cout<<"ProviderUserId : "<<providerInfo.second.providerUserId<<endl;
}
API Reference: com.hive.AuthV4.getPlayerInfo
API Reference: HIVEAuthV4:getPlayerInfo
API Reference: AuthV4Interface.getPlayerInfo
วลีเพื่อแนะนำการซิงค์ IdP¶
Language | Phrase |
---|---|
Korean | 계정 연동을 통해 플레이 데이터를 안전하게 지키세요! |
English | Sync your account to protect your game data! |
Japanese | アカウントを連動してプレイデータを守りましょう! |
Chinese (Simplified) | 绑定账号,保护游戏数据安全吧! |
Chinese (Traditional) | 綁定帳號,保護帳號資料安全! |
French | Synchronise ton compte afin de protéger tes données de jeu ! |
German | Synchronisiere dein Konto, um deine Spieldaten zu schützen! |
Russian | Синхронизируйте аккаунт, чтобы обезопасить игровые данные. |
Spanish | ¡Sincronicen su cuenta para proteger sus datos del juego! |
Portuguese | Sincronize sua conta para proteger seus dados de jogo! |
Indonesian | Hubungkan akunmu untuk mengamankan data game milikmu! |
Vietnamese | Vui lòng liên kết tài khoản để bảo vệ an toàn cho dữ liệu game của bạn! |
Thai | ซิงค์บัญชีเพื่อปกป้องข้อมูลเกมของคุณ! |
Italian | Sincronizza il tuo account per proteggere i tuoi dati di gioco. |
Turkish | Oyun verilerini korumak için hesabınızı senkronize ediniz. |
Arabic | زامن حسابك لحماية بيانات اللعبة الخاصة بك! |
IdP Sync¶
ผู้เล่นที่เข้าสู่ระบบอยู่ในขณะนี้สามารถซิงค์กับ IdP ใหม่ได้ แต่เมื่อผู้ใช้พยายามซิงค์กับ IdP ที่เชื่อมโยงกับ PlayerID ที่แตกต่างกัน จะเกิดข้อผิดพลาดขึ้น หากการซิงค์สำเร็จ ให้ตรวจสอบข้อมูลสถานะการซิงค์และอัปเดต UI ข้อมูลซิงค์
Note
เพื่อแทรกรูปไอคอนหรือโลโก้ของ IdP โปรดดูคู่มือของเราสำหรับแต่ละ IdP.
Warning
การเข้าสู่ระบบ Steam บน iOS รองรับเฉพาะเวอร์ชัน 14 ขึ้นไป มีปัญหาที่สงสัยว่าเกี่ยวข้องกับปัญหาการเรนเดอร์บนหน้าเข้าสู่ระบบ Steam ซึ่งช่องกรอกชื่อผู้ใช้และรหัสผ่านไม่ปรากฏในเบราว์เซอร์ Safari และ WKWebView บน iOS เวอร์ชันที่ต่ำกว่า 14
Warning
ตั้งแต่เดือนมีนาคม 2020, Apple App Store จะเตือนการใช้ UIWebView (ITMS-90809) และเรียกร้องให้ลบโค้ดที่เกี่ยวข้องกับ UIWebView จนถึงเดือนเมษายน 2020 ในกรณีของแอปและเกมที่เผยแพร่หลังจากเดือนกันยายน 2019 เนื่องจากการส่งแอป เราได้ยืนยันว่า Twitter framwork ที่เพิ่มจาก Hive SDK v4.14.0 ใช้คลาสที่เกี่ยวข้องกับ UIWebView และมันจะเตือนใน App Center ทุกครั้งที่มีการส่งเกม เพื่อป้องกันการถูกปฏิเสธ, Twitter framwork จะถูกลบชั่วคราวจนกว่าจะมีเฟรมเวิร์กใหม่ที่ไม่มี UIWebView พร้อมใช้งาน สั้นๆ คือ, สตูดิโอเกมต้องตอบสนองต่อสถานการณ์ที่เมื่อผู้ใช้ลงชื่อเข้าใช้ด้วย Twitter และเรียกใช้ API ที่เกี่ยวข้อง, ResultAPI จะได้รับรหัส NotSupportedProviderType.
จาก Hive SDK v4.14.4, เฟรมเวิร์กใหม่ที่ตอบสนองต่อคำเตือนที่เกี่ยวข้องกับ UIWebView มีให้ใช้งานกับ Unity ก่อนปี 2019.3. หากเกมของคุณต้องการ Unity 2019.3 ขึ้นไป, Twitter จะไม่สามารถใช้ในการตรวจสอบสิทธิ์ได้, ดังนั้นโปรดตรวจสอบให้แน่ใจว่าคุณได้ปฏิบัติตามการตั้งค่าด้านล่างเพื่อลบและป้องกัน Hive SDK จากการอ้างอิงถึงเฟรมเวิร์กที่เกี่ยวข้องกับ Twitter.
- ลบกรอบงาน Twitter ผ่านการตั้งค่าการพึ่งพาภายนอก
- ลบ ProviderTwitter.framework ในโครงการ Xcode
Warning
- ตรวจสอบให้แน่ใจว่าได้เขียนชื่อผลิตภัณฑ์ของ Google และ Apple เป็นภาษาอังกฤษ
- IdP ใหม่ Apple ควรระบุเป็น Sign In with Apple เป็นภาษาอังกฤษ และ Apple로 로그인 เป็นภาษาเกาหลี การจัดเรียงข้อความบนไอคอนควรกึ่งกลาง
- สำหรับชื่อปุ่มเข้าสู่ระบบหลายภาษาใน Authentication คลิก ที่นี่
เมื่อ IdP ที่คุณต้องการเพิ่มในการเชื่อมต่อ IdP เชื่อมโยงกับ PlayerID อื่น นี่เรียกว่าภาวะขัดแย้งของบัญชี เพื่อแก้ไขสถานการณ์ขัดแย้งนี้ โปรดดูที่ การจัดการความขัดแย้งของบัญชีเมื่อทำงานกับ IdP
สำหรับการรวม IdP ให้เรียกใช้วิธีการ connect ()
พร้อมกับ ProviderType
ที่คุณต้องการทำงานด้วยเป็นพารามิเตอร์ ต่อไปนี้คือตัวอย่างโค้ดในการดำเนินการซิงค์ IdP
API Reference: hive.AuthV4.Helper.connect
// Hive SDK AuthV4 Request to sync with IdP
AuthV4.Helper.connect (providerType, delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) {
switch(result.code) {
case ResultAPI.Code.Success:
// Success to sync IdP
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// Account conflict
break;
default:
// Exceptional case
break;
}
});
#include "HiveAuthV4.h"
EHiveProviderType ProviderType = EHiveProviderType::HIVE;
FHiveAuthV4::Helper::Connect(ProviderType, FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
switch (Result.Code) {
case FHiveResultAPI::ECode::Success:
// สำเร็จในการซิงค์ IdP
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
// ข้อขัดแย้งของบัญชี
break;
default:
// กรณีพิเศษ
break;
}
}));
API Reference: AuthV4::Helper::connect
// Hive SDK AuthV4 Request to sync with IdP
AuthV4::Helper::connect(ProviderInfo::providerTypeFromString(providerType), [=](ResultAPI const & result, std::shared_ptr playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// Success to sync IdP
break;
case ResultAPI::AuthV4ConflictPlayer:
// Account conflict
break;
default:
// Exceptional case
break;
}
});
API Reference: com.hive.AuthV4.Helper.connect
// Hive SDK AuthV4 Request to sync with IdP
AuthV4.Helper.connect(ProviderType providerType, new AuthV4.Helper.AuthV4HelperListener() {
@Override
public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) {
switch(result.code) {
case Success:
// Success to sync IdP
break;
case AuthV4ConflictPlayer:
// Account conflict
break;
default:
// Exceptional case
break;
}
}
});
API Reference: HIVEAuthV4Helper::connect:handler:
// Hive SDK AuthV4 Request to sync with IdP
[[HIVEAuthV4 helper] connect:providerType handler:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
switch(result.code) {
case kSuccess:
// สำเร็จในการซิงค์ IdP
break;
case kAuthV4ConflictPlayer:
// ข้อขัดแย้งของบัญชี
break;
default:
// กรณีพิเศษ
break;
}
}];
API Reference: AuthV4Interface.connect
การจัดการความขัดแย้งของบัญชีกับ IdP Sync¶
เมื่อเรียกใช้ connect()
สำหรับการรวม IdP หากบัญชี IdP ที่ผู้ใช้พยายามเชื่อมต่อนั้นเชื่อมโยงกับ PlayerID อื่นอยู่แล้ว จะเกิดความขัดแย้งของบัญชีขึ้น สำหรับคำอธิบายเพิ่มเติม เราจะสมมติสถานการณ์ดังต่อไปนี้
- CurrentPlayer: ผู้เล่นของบัญชีที่ผู้ใช้กำลังเข้าสู่ระบบอยู่ (บัญชีผู้เยี่ยมชม หรือ บัญชี IdP)
- ConflictPlayer: ผู้เล่นที่มีอยู่แล้วในบัญชี IdP ที่ผู้ใช้ต้องการเชื่อมโยง
เมื่อบันทึกการเล่นเกมของ ConflictPlayer มีอยู่ในเซิร์ฟเวอร์เกม¶
ในกรณีนี้ เมื่อเกิดความขัดแย้งของบัญชี ข้อมูลการเล่นของ ConflictPlayer จะถูกแจ้งให้ผู้ใช้ทราบและ UI สำหรับการเลือก ConflictPlayer จะถูกเปิดเผย เพื่อใช้ UI ที่จัดเตรียมโดย Hive SDK ให้กำหนดค่าข้อมูล ConflictPlayer ให้เหมาะสมกับเกมและเรียกใช้วิธีการ showConflict()
โดยใช้ข้อมูล ConflictPlayer เป็นพารามิเตอร์ เมื่อเรียกใช้ คุณสามารถเปลี่ยนไปยัง ConflictPlayer หรือเลือกยกเลิกเพื่อเล่นเกมต่อกับ CurrentPlayer ในตัวอย่างภาพ UI ด้านล่าง การคลิกปุ่มตรวจสอบจะเปลี่ยนไปยัง ConflictPlayer และการคลิกปุ่ม X จะทำให้เกมดำเนินต่อไปกับ CurrentPlayer
Note
UI การเลือกบัญชีสามารถเป็น UI ที่จัดเตรียมโดย Hive SDK หรือสามารถปรับแต่งโดยฝ่ายเกม สำหรับการปรับแต่ง UI การเลือกบัญชี โปรดดูที่ การปรับแต่งใน IdP Conflict.
เมื่อบันทึกการเล่นเกมของ ConflictPlayer ไม่มีอยู่ในเซิร์ฟเวอร์เกม¶
บางครั้ง จะมีเพียงตัวระบุผู้เล่น (PlayerId) ของ ConflictPlayer เท่านั้น แต่ไม่มีบันทึกการเล่นจริงบนเซิร์ฟเวอร์เกม ในกรณีนี้ ให้เรียกใช้ resolveConflict(CB)
เพื่อเลือก PlayerID ของ CurrentPlayer และดำเนินเกมต่อไป แสดง UI ต่อไปนี้เมื่อเกิดความขัดแย้งของบัญชี
-
เมื่อ CurrentPlayer เป็นบัญชีผู้เยี่ยมชมและ ConflictPlayer เป็นบัญชี IdP
-
เมื่อ CurrentPlayer เป็นบัญชี IdP 1 (ตัวอย่าง: Facebook) และ ConflictPlayer เป็นบัญชี IdP 2 (ตัวอย่าง: Google Play)
เมื่อ ConflictPlayer เป็นบัญชีที่ถูกจำกัด¶
เมื่อ ConflictPlayer (บัญชี IdP) อยู่ใน สถานะที่จำกัด หาก CurrentPlayer (บัญชี IdP หรือบัญชีผู้เยี่ยมชม) พยายามเชื่อมต่อจากอุปกรณ์อื่นโดยใช้ AuthV4.connect
จะไม่มีความขัดแย้งของบัญชี และแทนที่จะมีการแสดงป๊อปอัปข้อจำกัด หากผู้ใช้แอปปิดป๊อปอัปข้อจำกัด AuthV4.connect
จะส่งคืนข้อผิดพลาด และความพยายามของ CurrentPlayer ในการเชื่อมต่อกับ IdP นี้จะล้มเหลว
ตัวอย่าง 1: เมื่อ CurrentPlayer เป็นบัญชี IdP¶
หากบัญชี Facebook IdP ที่เชื่อมโยงก่อนหน้านี้ (ConflictPlayer) อยู่ในสถานะถูกระงับและผู้ใช้พยายามเชื่อมโยง Google IdP (CurrentPlayer) จะมีป๊อปอัปการระงับปรากฏขึ้น การปิดป๊อปอัปจะทำให้ผู้ใช้ล็อกเอาต์จาก Facebook IdP
ตัวอย่าง 2: เมื่อ CurrentPlayer เป็นบัญชีแขก¶
หากบัญชี Facebook IdP ที่เชื่อมโยงไว้ก่อนหน้านี้ (ConflictPlayer) อยู่ในสถานะถูกระงับ และผู้ใช้พยายามเชื่อมโยงกับ Facebook IdP ด้วยบัญชีผู้เยี่ยมชม (CurrentPlayer) จะมีป๊อปอัปการระงับปรากฏขึ้น การปิดป๊อปอัปจะทำให้ผู้ใช้ถูกออกจากระบบ Facebook IdP
หมายเหตุเกี่ยวกับการเลือกบัญชี¶
หากผู้ใช้เลือก ConflictPlayer และ CurrentPlayer อยู่ในสถานะแขก CurrentPlayer จะไม่สามารถพบได้อีกต่อไป และหาก CurrentPlayer มีข้อมูลจากเซิร์ฟเวอร์เกมอื่นในสถานะแขก ข้อมูลเกมนั้นก็จะไม่สามารถพบได้อีกต่อไป ดังนั้นคุณควรป้องกันไม่ให้ผู้ใช้ทำการเปลี่ยนแปลงเซิร์ฟเวอร์เกมเมื่อพวกเขาเป็นแขกเพื่อหลีกเลี่ยงปัญหานี้ หากผู้ใช้แตะปุ่ม X ในหน้าการเลือกบัญชีที่จัดเตรียมโดย SDK การซิงค์บัญชีจะถูกยกเลิก
การประกอบข้อมูลเกม¶
ข้อมูล ConflictPlayer ประกอบด้วยกุญแจสำคัญสองตัวคือ player_id
และ game_data
player_id
: PlayerID ของ ConflictPlayergame_data
: จัดระเบียบข้อมูลเกม เช่น ชื่อตัวละคร, จำนวนเงินในเกม, และระดับในรูปแบบMap<String, Object >;
ด้านล่างนี้คือตัวอย่างโค้ดในการจัดเรียงข้อมูลของ ConflictPlayer
การสร้าง UI การเลือกบัญชีจาก Hive SDK (พร้อมข้อมูลการเล่นเกม)¶
เมื่อคุณได้ทำการกำหนดค่าข้อมูล ConflictPlayer เสร็จสิ้นแล้ว เมธอด showConflict () จะถูกเรียกเพื่อเปิดเผย UI ที่จัดเตรียมโดย SDK และการเลือกของผู้ใช้จะถูกส่งกลับเป็นผลลัพธ์ หากผลลัพธ์สำเร็จและผู้ใช้เลือก ConflictPlayer คุณจะต้องโหลดข้อมูลเกมอีกครั้ง ผลลัพธ์จะส่งกลับความล้มเหลวเมื่อผู้ใช้ข้ามหรือไม่สามารถเลือกบัญชีได้ และในกรณีนี้ให้แน่ใจว่าต่อไปจะเล่นเกมตามปกติ อย่างไรก็ตาม หากไม่สามารถตรวจสอบสิทธิ์อุปกรณ์ในบัญชีที่เปลี่ยน (AuthV4NotRegisteredDevice
) เกมจะต้องกลับไปที่หน้าต้นฉบับเพื่อเข้าสู่ระบบอีกครั้ง ซึ่งจะทำให้การเข้าสู่ระบบกับ SDK ถูกยกเลิกและ isAutoSignIn จะส่งกลับ true
ต่อไปนี้คือตัวอย่างโค้ดในการ implement UI ที่ Hive SDK ให้โดยการกำหนดข้อมูลเกมของ PlayerID ที่ขัดแย้ง
API Reference: hive .AuthV4.Helper.showConflict
// สร้างวัตถุข้อมูลเกมของบัญชีที่มีปัญหา
AuthV4.Helper.ConflictSingleViewInfo conflictInfo = new AuthV4.Helper.ConflictSingleViewInfo(playerId);
conflictInfo.setValue("Gold", 2048);
conflictInfo.setValue("Gem", 220);
// ขอ Hive SDK AuthV4.Helper UI การเลือกบัญชี
AuthV4.Helper.showConflict (conflictInfo, (ResultAPI result, AuthV4.PlayerInfo playerInfo) =>; {
if (result. needExit()) {
// TODO: implement the termination of the app.
// ตัวอย่าง) Application.Quit();
} else {
switch(result.code) {
case ResultAPI.Code.AuthV4PlayerChange:
// การสลับบัญชี: ต้องเริ่มเกมใหม่
break;
case ResultAPI.Code.AuthV4PlayerResolved:
// รักษาผู้ใช้ปัจจุบัน
break;
case ResultAPI.Code.AuthV4NotRegisteredDevice:
// นี่คือกรณีที่การเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบอุปกรณ์ล้มเหลว ลองเข้าสู่ระบบใหม่ด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
});
#include "HiveAuthV4.h"
int64 PlayerId = 12345678;
FHiveConflictSingleViewData ViewData = FHiveConflictSingleViewData(PlayerId);
ViewData.SetData(TEXT("Gold"), TEXT("2048"));
ViewData.SetData(TEXT("Gem"), TEXT("220"));
FHiveAuthV4::Helper::ShowConflict(ViewData, FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
if (Result.NeedExit()) {
// TODO: implement the termination of the app.
// Example) Application.Quit();
} else {
switch (Result.Code) {
case FHiveResultAPI::ECode::AuthV4PlayerChange:
// การสลับบัญชี: ต้องเริ่มเกมใหม่
break;
case FHiveResultAPI::ECode::AuthV4PlayerResolved:
// เก็บผู้ใช้ปัจจุบัน
break;
case FHiveResultAPI::ECode::AuthV4NotRegisteredDevice:
// นี่คือกรณีที่การเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบสิทธิ์อุปกรณ์ล้มเหลว ลองเข้าสู่ระบบใหม่ด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
}));
API Reference: AuthV4 ::Helper::showConflict
// create game info object of the conflicted account
ConflictSingleViewInfo* conflictInfo = new ConflictSingleViewInfo(playerId);
conflictInfo->;SetValue("Gold", 2048);
conflictInfo->;SetValue("Gem", 220);
// Hive SDK AuthV4::Helper การเลือกบัญชี UI request
AuthV4::Helper::showConflict(*conflictInfo, [=](ResultAPI const & result, std::shared_ptr playerInfo) {
if (result. needExit()) {
// TODO: implement the termination of the app.
// ผู้ใช้ของเอนจิน Cocos2d-x
// ex) exit(0);
// ผู้ใช้เอนจิน Unreal
// ตัวอย่าง) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
switch(result.code) {
case ResultAPI::AuthV4PlayerChange:
// การเปลี่ยนบัญชี: ต้องเริ่มเกมใหม่
break;
case ResultAPI::AuthV4PlayerResolved:
// รักษาผู้ใช้ปัจจุบัน
break;
case ResultAPI::Code::AuthV4NotRegisteredDevice:
// นี่คือกรณีที่การเข้าสู่ระบบถูกยกเลิกเนื่องจากความล้มเหลวในการตรวจสอบสิทธิ์อุปกรณ์ ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
});
API Reference: com.hive.AuthV4.Helper.showConflict
// create game info object of the conflicted account
val conflictInfo = AuthV4.Helper.ConflictSingleViewInfo(playerId)
conflictInfo.setValue("Gold", 2048)
conflictInfo.setValue("Gem", 220)
// ขอ Hive SDK AuthV4.Helper UI การเลือกบัญชี
AuthV4.Helper.showConflict(conflictInfo, object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result. needExit()) {
// TODO: implement the termination of the app.
// ex) exitProcess(0)
} else {
when (result.code) {
ResultAPI.Code.AuthV4PlayerChange ->; {
// การสลับบัญชี: ต้องเริ่มเกมใหม่
}
ResultAPI.Code.AuthV4CancelDialog ->; {
// รักษาผู้ใช้ปัจจุบัน
}
ResultAPI.Code.AuthV4NotRegisteredDevice ->; {
// นี่คือกรณีที่การเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบสิทธิ์อุปกรณ์ล้มเหลว ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
}
else ->; {
// จัดการข้อยกเว้นอื่น ๆ
}
}
}
}
})
API Reference: com .hive.AuthV4.Helper.showConflict
// create game info object of the conflicted account
AuthV4.Helper.ConflictSingleViewInfo conflictInfo = new AuthV4.Helper.ConflictSingleViewInfo(playerId);
conflictInfo.setValue("Gold", 2048);
conflictInfo.setValue("Gem", 220);
// ขอ Hive SDK AuthV4.Helper UI การเลือกบัญชี
AuthV4.Helper.showConflict(conflictInfo, new AuthV4.Helper.AuthV4HelperListener() {
@Override
public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) {
if (result. needExit()) {
// TODO: implement the termination of the app.
// ex) System.exit(0);
} else {
switch(result.code) {
case AuthV4PlayerChange:
// account switching: game restart required
break;
case AuthV4CancelDialog:
// keep current user
break;
case AuthV4NotRegisteredDevice:
// This is the case that the login is canceled due to device authentication failure. Try logging in back with AUTO, or log out.
break;
default:
// handle other exceptions
break;
}
}
}
});
API Reference: HIVEAuthV4Helper::showConflict:handler:
// create game info object of the conflicted account
let conflictInfo = ConflictSingleViewInfo(playerId: 12345678)
conflictInfo.setValue("Gold", intValue: 2048)
conflictInfo.setValue("Gem", intValue: 220)
// Hive SDK AuthV4:Helper การเลือกบัญชี UI request
AuthV4Interface.helper().showConflict(conflictInfo) { (result, playerInfo) in
if result.needExit() {
// TODO: implement the termination of the app.
// ex) exit(0)
} else {
switch result.getCode() {
case .authV4PlayerChange:
// account switching: game restart required
case .authV4CancelDialog:
// keep current user
case .authV4NotRegisteredDevice:
// This is the case that the login is canceled due to device authentication failure. Try logging in back with AUTO, or log out.
default:
// handle other exceptions
break
}
}
}
API Reference: HIVEAuthV4Helper ::showConflict:handler:
// สร้างวัตถุข้อมูลเกมของบัญชีที่มีข้อขัดแย้ง
HIVEConflictSingleViewInfo *conflictInfo = [[HIVEConflictSingleViewInfo alloc] initWithPlayerId:12345678];
[conflictInfo setValue:@"Gold" intValue:2048];
[conflictInfo setValue:@"Gem" intValue:220];
// Hive SDK AuthV4:Helper การเลือกบัญชี UI request
[[HIVEAuthV4 helper] showConflict:conflictInfo handler:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
if (result. needExit) {
// TODO: implement the termination of the app.
// ex) exit(0);
} else {
switch(result.code) {
case kAuthV4PlayerChange:
// account switching: game restart required
break;
case kAuthV4CancelDialog:
// keep current user
break;
case kAuthV4NotRegisteredDevice:
// This is the case that the login is canceled due to device authentication failure. Try logging in back with AUTO, or log out.
break;
default:
// handle other exceptions
break;
}
}
}];
การ implement UI การเลือกบัญชีจาก Hive SDK (โดยไม่มีข้อมูลเกมหรือข้อมูลที่ไม่รู้จัก)¶
หากคุณไม่สามารถตรวจสอบข้อมูลเกมในขณะที่แสดง UI การเลือกบัญชีหรือเพียงแค่แจ้งการเปลี่ยนแปลงในการลงชื่อเข้าใช้ UI ที่เรียบง่ายนั้นเหมาะสำหรับกรณีต่างๆ ผลลัพธ์จะส่งคืนความล้มเหลวเมื่อผู้ใช้ข้ามหรือไม่สามารถเลือกบัญชีได้ และในกรณีนี้ให้แน่ใจว่าต้องดำเนินการเล่นเกมต่อไปตามปกติ อย่างไรก็ตาม หากไม่สามารถตรวจสอบความถูกต้องของอุปกรณ์ในบัญชีที่เปลี่ยน (AuthV4NotRegisteredDevice
) เกมจะต้องกลับไปยังหน้าต้นฉบับเพื่อเข้าสู่ระบบอีกครั้ง ซึ่งทำให้การเข้าสู่ระบบ SDK ถูกยกเลิกและ isAutoSignIn จะส่งคืน true
ต่อไปนี้เป็นตัวอย่างโค้ดในการ implement UI ที่ Hive SDK ให้มาโดยการซ่อนข้อมูลเกมของ PlayerID ที่ขัดแย้ง
API Reference: hive .AuthV4.Helper.showConflict
// ขอ Hive SDK AuthV4.Helper เลือกบัญชีผู้ใช้
AuthV4.Helper.showConflict ((ResultAPI result, AuthV4.PlayerInfo playerInfo) =>; {
if (result. needExit()) {
// TODO: implement app exit functionality
// ตัวอย่าง) Application.Quit();
} else {
switch(result.code) {
case ResultAPI.Code.AuthV4PlayerChange:
// การเปลี่ยนบัญชี: ต้องเริ่มเกมใหม่
break;
case ResultAPI.Code.AuthV4PlayerResolved:
// เก็บผู้ใช้ปัจจุบัน
break;
case ResultAPI.Code.AuthV4NotRegisteredDevice:
// นี่คือกรณีที่การเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบสิทธิ์อุปกรณ์ล้มเหลว ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
});
#include "HiveAuthV4.h"
FHiveAuthV4::Helper::ShowConflict(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
if (Result.NeedExit()) {
// TODO: implement app exit functionality
// Users of the Cocos2d-x engine
// ex) exit(0);
// Unreal engine users
// Example) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
switch (Result.Code) {
case FHiveResultAPI::ECode::AuthV4PlayerChange:
// account switching: game restart required.
break;
case FHiveResultAPI::ECode::AuthV4PlayerResolved:
// keep current user
break;
case FHiveResultAPI::ECode::AuthV4NotRegisteredDevice:
// This is the case when login is canceled due to device authentication failure. Try logging back in with AUTO or log out.
break;
default:
// handle other exceptions
break;
}
}
}));
API Reference: AuthV4 ::Helper::showConflict
// Hive SDK AuthV4::Helper การเลือกบัญชี UI request
AuthV4::Helper::showConflict([=](ResultAPI const & result, std::shared_ptr playerInfo) {
if (result. needExit()) {
// TODO: implement app exit functionality
// ผู้ใช้ของเอนจิน Cocos2d-x
// ex) exit(0);
// ผู้ใช้เอนจิน Unreal
// ตัวอย่าง) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
switch(result.code) {
case ResultAPI::AuthV4PlayerChange:
// การเปลี่ยนบัญชี: ต้องเริ่มเกมใหม่
break;
case ResultAPI::AuthV4PlayerResolved:
// รักษาผู้ใช้ปัจจุบัน
break;
case ResultAPI::Code::AuthV4NotRegisteredDevice:
// นี่คือกรณีเมื่อการเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบสิทธิ์อุปกรณ์ล้มเหลว ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
});
API Reference: com.hive.AuthV4.Helper.showConflict
// ขอ Hive SDK AuthV4.Helper เลือกบัญชีผู้ใช้
AuthV4.Helper.showConflict(object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result. needExit()) {
// TODO: implement app exit functionality
// ex) exitProcess(0)
} else {
when (result.code) {
ResultAPI.Code.AuthV4PlayerChange ->; {
// การเปลี่ยนบัญชี: ต้องเริ่มเกมใหม่
}
ResultAPI.Code.AuthV4CancelDialog ->; {
// รักษาผู้ใช้ปัจจุบัน
}
ResultAPI.Code.AuthV4NotRegisteredDevice ->; {
// นี่คือกรณีเมื่อการเข้าสู่ระบบถูกยกเลิกเนื่องจากความล้มเหลวในการตรวจสอบอุปกรณ์ ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
}
else ->; {
// จัดการข้อยกเว้นอื่น ๆ
}
}
}
}
})
API Reference: com .hive.AuthV4.Helper.showConflict
// ขอ Hive SDK AuthV4.Helper สำหรับการเลือกบัญชี
AuthV4.Helper.showConflict(new AuthV4.Helper.AuthV4HelperListener() {
@Override
public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) {
if (result. needExit()) {
// TODO: implement app exit functionality
// ex) System.exit(0);
} else {
switch(result.code) {
case AuthV4PlayerChange:
// การเปลี่ยนบัญชี: ต้องเริ่มเกมใหม่
break;
case AuthV4CancelDialog:
// รักษาผู้ใช้ปัจจุบัน
break;
case AuthV4NotRegisteredDevice:
// นี่คือกรณีเมื่อการเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบสิทธิ์อุปกรณ์ล้มเหลว ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
}
});
เอกสารอ้างอิง API: HIVEAuthV4Helper::showConflict:
// Hive SDK AuthV4:Helper account selection UI request
AuthV4Interface.helper().showConflict() { (result, playerInfo) in
if result.needExit() {
// TODO: implement app exit functionality
// ex) exit(0)
} else {
switch result.getCode() {
case .authV4PlayerChange:
// account switching: game restart required
case .authV4CancelDialog:
// keep current user
case .authV4NotRegisteredDevice:
// This is the case when login is canceled due to device authentication failure. Try logging back in with AUTO or log out.
default:
// handle other exceptions
break
}
}
}
API Reference: HIVEAuthV4Helper ::showConflict:
// Hive SDK AuthV4:Helper account selection UI request
[[HIVEAuthV4 helper] showConflict:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
ถ้า (result. needExit) {
// TODO: implement app exit functionality
// ex) exit(0);
} else {
switch(result.code) {
case kAuthV4PlayerChange:
// การเปลี่ยนบัญชี: ต้องเริ่มเกมใหม่
break;
case kAuthV4CancelDialog:
// รักษาผู้ใช้ปัจจุบัน
break;
case kAuthV4NotRegisteredDevice:
// นี่คือกรณีเมื่อการเข้าสู่ระบบถูกยกเลิกเนื่องจากการตรวจสอบสิทธิ์อุปกรณ์ล้มเหลว ลองเข้าสู่ระบบอีกครั้งด้วย AUTO หรือออกจากระบบ
break;
default:
// จัดการข้อยกเว้นอื่น ๆ
break;
}
}
}];
การปรับแต่งในกรณีที่มีข้อขัดแย้งของ IdP¶
หาก IdP เกิดความขัดแย้งในระหว่างกระบวนการซิงค์ IdP คุณสามารถกำหนดค่าข้อมูลเกมโดยใช้ PlayerID ที่ขัดแย้งที่ส่งกลับมาและดำเนินการ UI การเลือกบัญชีโดยตรงในเกม หากผู้ใช้เลือกบัญชีใน UI การเลือก ให้ดำเนินการกับเมธอด selectConflict()
โดยใช้ PlayerID ของบัญชีที่เลือกเป็นพารามิเตอร์
ในคำอธิบายต่อไปนี้ บัญชีที่เข้าสู่ระบบในขณะนี้เรียกว่า CurrentPlayer และบัญชีที่เกิดความขัดแย้งเรียกว่า ConfilctPlayer เมื่อปรับแต่ง UI การเลือกบัญชี จำเป็นต้องตรวจสอบความแตกต่างของการกระทำตามการเลือกของผู้ใช้และแจ้งข้อควรระวังที่เหมาะสมในรูปแบบการกำหนดค่า UI เมื่อเกิดความขัดแย้งของ IdP ปัญหาต่อไปนี้อาจเกิดขึ้นขึ้นอยู่กับการเลือกของผู้ใช้
- การเลือก ConfilctPlayer:
selectConflict(ConfilctPlayer, CB)
ถูกเรียก.- หาก CurrentPlayer เป็นแขก, CurrentPlayer จะไม่สามารถค้นหาได้.
- การเลือก CurrentPlayer:
selectConflict(CurrentPlayer, CB)
ถูกเรียก.- CurrentPlayer ซิงค์กับ IdP, ดังนั้น ConfilctPlayer จึงไม่ซิงค์.
- หาก ConflictPlayer ไม่ซิงค์กับ IdP อื่น ๆ สถานะที่เรียกว่าแขกอาจทำให้ ConflictPlayer ไม่สามารถค้นหาได้.
- หากยกเลิก (ผู้ใช้เพียงแค่ปิดหน้าการเลือก):
resolveConflict(CB)
ถูกเรียก.- เล่นเกมต่อไปกับ CurrentPlayer โดยไม่มีการเปลี่ยนแปลงใน IdP sync.
คุณจำเป็นต้องกำหนดข้อความเตือนที่เหมาะสมเมื่อกำหนดค่า UI การเลือกบัญชี เพราะในบางกรณี ข้อมูลที่ไม่ได้เลือกอาจไม่พบในสถานะของผู้เข้าชม นอกจากนี้ หากคุณต้องการกำหนดค่าไม่ให้เปลี่ยนแปลงข้อมูลที่เชื่อมโยงกับ IdP ในกรณีที่มีความขัดแย้งของบัญชี ให้แน่ใจว่าได้เลือกข้อมูลเกมของ ConflictPlayer หรือออกแบบ UI ที่สามารถยกเลิกการเลือกบัญชีได้
เมื่อผู้ใช้เลือกบัญชีใน UI การเลือกบัญชี ให้ดำเนินการเมธอด selectConflict()
โดยใช้ PlayerID ของบัญชีที่เลือกเป็นพารามิเตอร์ หากผู้ใช้ยกเลิกการเลือกบัญชี ให้แน่ใจว่าต่อเนื่องเกมโดยไม่เรียก API ใดๆ หลังจากที่ผู้เล่นเลือก ConflictPlayer และได้รับการตอบกลับที่สำเร็จ ให้แน่ใจว่าโหลดข้อมูลเกมอีกครั้ง
ต่อไปนี้เป็นตัวอย่างโค้ดในการเลือกบัญชีเนื่องจากความขัดแย้งของบัญชี
API Reference: AuthV4::Conflict
long long selectedPlayerId = 1234567890;
// Select Hive SDK AuthV4 Account Conflict
AuthV4::selectConflict(selectedPlayerId, [=](ResultAPI const & result,PlayerInfo const & playerInfo) {
if (result. isSuccess()) {
//การเลือกบัญชีสำเร็จ
} else if (result. needExit()) {
// TODO: implement app exit functionality
// ผู้ใช้ของเอนจิน Cocos2d-x
// ex) exit(0);
// ผู้ใช้เอนจิน Unreal
// ตัวอย่าง) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
}
});
#include "HiveAuthV4.h"
int64 SelectedPlayerId = 12345678;
FHiveAuthV4::SelectConflict(SelectedPlayerId,
FHiveAuthV4OnSignInDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHivePlayerInfo& PlayerInfo) {
if (Result.IsSuccess()) {
// การเลือกบัญชีสำเร็จ
} else if (Result.NeedExit()) {
// TODO: implement app exit functionality
// ex) exitProcess(0)
}
}));
API Reference: com.hive.AuthV4.selectConflict
val selectedPlayerId: Long = 1234567890
// เลือก Hive SDK AuthV4 ข้อความขัดแย้ง
AuthV4.selectConflict(selectedPlayerId, object : AuthV4.AuthV4SignInListener {
override fun onAuthV4SignIn(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
if (result. isSuccess) {
//การเลือกบัญชีสำเร็จ
} else if (result. needExit()) {
// TODO: implement app exit functionality
// ex) exitProcess(0)
}
}
})
API Reference: com.hive.AuthV4.selectConflict
long selectedPlayerId = 1234567890;
// เลือก Hive SDK AuthV4 ข้อขัดแย้งบัญชี
AuthV4.selectConflict(selectedPlayerId, new AuthV4.AuthV4SignInListener() {
@Override
public void onAuthV4SignIn(ResultAPI result, AuthV4.PlayerInfo playerInfo) {
if(result. isSuccess()) {
//การเลือกบัญชีสำเร็จ
}
else if (result. needExit()) {
// TODO: implement app exit functionality
// ex) System.exit(0);
}
}
});
API Reference: HIVEAuthV4:selectConflict
let selectedPlayerId: Int64 = 1234567890;
// Hive SDK AuthV4 การเลือกความขัดแย้งของบัญชี
AuthV4Interface.selectConflict(selectedPlayerId) { (result, playerInfo) in
if result. isSuccess() {
//การเลือกบัญชีสำเร็จ
}
else if result. needExit() {
// TODO: implement app exit functionality
// ex) exit(0)
}
}
API Reference: HIVEAuthV4:selectConflict
long long selectedPlayerId = 1234567890;
// Hive SDK AuthV4 การเลือกความขัดแย้งของบัญชี
[HIVEAuthV4 selectConflict:selectedPlayerId handler:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
if (result. isSuccess) {
//การเลือกบัญชีสำเร็จ
}
else if (result. needExit) {
// TODO: implement app exit functionality
// ex) exit(0);
}
}];
ตัดการเชื่อมต่อจากบัญชี IdP¶
คุณสามารถอนุญาตให้ผู้ใช้ยกเลิกการเชื่อมโยงบัญชี IdP ที่เชื่อมโยงอยู่ใน UI รายการบัญชี IdP หากผู้ใช้ยกเลิกการเชื่อมโยงบัญชี IdP เฉพาะใน UI รายการบัญชี IdP สตูดิโอเกมจะเรียกใช้เมธอด disconnect()
พร้อมกับอาร์กิวเมนต์ ProviderType
ซึ่งเป็นประเภทเฉพาะของ IdP เพื่อยกเลิกการเชื่อมต่อจากบัญชี IdP หลังจากเรียกใช้เมธอด disconnect()
คุณต้องตรวจสอบสถานะการเชื่อมต่อของผู้ใช้และจากนั้นอัปเดตรายการ IdP ที่ซิงค์ใน UI
Note
สภาพแวดล้อม Windows ไม่รองรับการเข้าสู่ระบบแบบผู้เยี่ยมชม แตกต่างจากมือถือ ดังนั้น หากคุณพยายามเรียกใช้ API Disconnect ขณะที่มี IdP เพียงหนึ่งเดียวที่ซิงค์อยู่ AuthV4LastProviderCantDisconnect จะถูกส่งคืนเป็นรหัส API ผลลัพธ์ และสถานะการซิงค์จะถูกเก็บรักษาไว้。
API Reference: hive .AuthV4.Helper.disconnect
#include "HiveAuthV4.h"
EHiveProviderType ProviderType = EHiveProviderType::HIVE;
FHiveAuthV4::Helper::Disconnect(ProviderType, FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
switch (Result.Code) {
case FHiveResultAPI::ECode::Success:
// การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
break;
default:
// สถานการณ์ข้อยกเว้นอื่นๆ
break;
}
}));
API Reference: AuthV4 ::Helper::disconnect
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
AuthV4::Helper::disconnect(ProviderType::HIVE, [=](ResultAPI const & result, shared_ptr playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
break;
default:
// สถานการณ์ข้อยกเว้นอื่น ๆ
break;
}
});
API Reference: Helper.disconnect
import com.hive.AuthV4
import com.hive.ResultAPI
AuthV4.Helper.disconnect(AuthV4.ProviderType.HIVE, object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
when (result.code) {
ResultAPI.Code.Success -> {
// Provider disconnection successful
}
else -> {
// other exception situations
}
}
}
})
API Reference: com .hive.AuthV4.Helper.disconnect
API Reference: .disconnect
API Reference: HIVEAuthV4Helper ::disconnect:handler:
#import <HIVEService/HIVEService-Swift.h>
[[HIVEAuthV4 helper] disconnect: HIVEProviderTypeHive handler: ^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
switch ([result getCode]) {
case HIVEResultAPICodeSuccess:
// การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
break;
default:
// สถานการณ์ข้อยกเว้นอื่น ๆ
break;
}
}];
สตูดิโอเกมสามารถเลือกจากนโยบายด้านล่างเมื่อดำเนินการตัดการเชื่อมต่อ IdP 1. ยกเลิกการเชื่อมโยงบัญชี IdP ทั้งหมดและอนุญาตให้ใช้บัญชีแขก 2. บังคับให้ต้องมีบัญชี IdP อย่างน้อยหนึ่งบัญชีที่เชื่อมโยงอยู่
ยกเลิกการเชื่อมต่อจากบัญชี IdP: อนุญาตให้ยกเลิกการเชื่อมต่อบัญชี IdP ทั้งหมด¶
สตูดิโอเกมสามารถอนุญาตให้ผู้ใช้ยกเลิกการเชื่อมโยงบัญชี IdP ทั้งหมดและใช้บัญชีแขกได้ หากผู้ใช้ใช้บัญชีแขก บัญชีนี้จะไม่สามารถกู้คืนได้หากบัญชีแขกสูญหายเนื่องจากการเริ่มต้นใหม่หรือการติดตั้งเกมใหม่ ดังนั้นหากผู้ใช้พยายามยกเลิกการเชื่อมโยง IdP ตัวสุดท้าย ให้ใช้วลีด้านล่างเพื่อแสดงคำแนะนำเกี่ยวกับผู้ใช้แขกเพื่อให้ผู้ใช้สามารถพิจารณาการยกเลิกการเชื่อมโยงได้ โปรดทราบว่า PlayerID จะไม่ถูกออกจากระบบแม้ว่าจะมีการยกเลิกการเชื่อมโยง IdP ที่เกี่ยวข้องก็ตาม
- หากคุณต้องการยกเลิกการเชื่อมโยงบัญชี IdP ล่าสุดที่เชื่อมโยง
ภาษา | วลี |
---|---|
เกาหลี | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
อังกฤษ | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
ญี่ปุ่น | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
จีน (ตัวย่อ) | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
จีน (ตัวเต็ม) | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
ฝรั่งเศส | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
เยอรมัน | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
รัสเซีย | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
สเปน | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
โปรตุเกส | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
อินโดนีเซีย | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
เวียดนาม | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
ไทย | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
อิตาลี | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
ตุรกี | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
อาหรับ | หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่? |
หากผู้ใช้เลือกที่จะยกเลิกการเชื่อมโยงบัญชี แม้ว่าประโยคข้างต้นจะถูกเปิดเผย ให้เรียกใช้ disconnect()
เมื่อบัญชีผู้ใช้กลายเป็นบัญชีแขก ประโยคต่อไปนี้อาจถูกเปิดเผย
- หากบัญชีผู้ใช้กลายเป็นบัญชีผู้เยี่ยมชมหลังจากที่ถูกตัดการเชื่อมต่อจาก IdP ล่าสุดที่เชื่อมโยง
Language | Phrase |
---|---|
Korean | 게스트 상태로 전환되었습니다. 계정 연동을 하시면 게임 데이터를 안전하게 지킬 수 있습니다. |
English | You've been transferred to a guest account. By synchronizing your account, you can secure your game data. |
Japanese | ゲストアカウントに切り替わりました。 アカウントを連動することでゲームデータを守ることができます。 |
Chinese (Simplified) | 已转换为游客状态。 关联账号时,有助于保护游戏数据。 |
Chinese (Traditional) | 已切換為訪客帳號。 請綁定帳號,保護您的遊戲數據。 |
French | Vous êtes passé en compte ""invité"". En liant votre compte, vous pourrez garantir la protection de vos données de jeu. |
German | Dein Konto wurde in ein Gastkonto umgewandelt. Du kannst deine Spieldaten sichern, indem du dein Konto synchronisierst. |
Russian | Ваш аккаунт был преобразован в гостевой. Синхронизовав аккаунт, Вы можете защитить свои игровые данные. |
Spanish | Has cambiado a la cuenta de invitado. Al vincular tu cuenta, podrás garantizar la protección de los datos de tu juego. |
Portuguese | Você foi transferido para uma conta de convidado. Ao sincronizar a sua conta, você pode proteger os dados do seu jogo. |
Indonesian | Statusmu telah diubah menjadi guest. Dengan mensinkronisasikan akun, kamu bisa menjaga data permainanmu agar tetap aman. |
Vietnamese | Bạn đã được chuyển sang tài khoản Khách. Bạn có thể bảo vệ dữ liệu chơi game của mình bằng cách đồng bộ tài khoản. |
Thai | บัญชีของคุณถูกเปลี่ยนเป็นบัญชีผู้เยี่ยมชมแล้ว โดยการซิงค์บัญชีของคุณ คุณสามารถรักษาข้อมูลเกมของคุณให้ปลอดภัย |
Italian | Sei stato/a trasferito/a a un account ospite. Sincronizzando il tuo account, puoi proteggere i tuoi dati di gioco. |
Turkish | Hesabınız misafir hesap olarak değiştirildi. Hesabınızı bağlayarak oyun verilerinizi güvende tutabilirsiniz. |
Arabic | لقد تم نقلك إلى حساب ضيف. من خلال مزامنة حسابك ، يمكنك تأمين سجلات لعبتك . |
การตัดการเชื่อมต่อจากบัญชี IdP: รักษาบัญชีอย่างน้อย 1 บัญชีที่เชื่อมโยง¶
สตูดิโอเกมอาจบังคับให้ผู้ใช้ต้องเชื่อมโยงบัญชี IdP อย่างน้อยหนึ่งบัญชี เมื่อผู้ใช้ยกเลิกการเชื่อมโยงบัญชี IdP ทั้งหมด บัญชีผู้ใช้จะถูกแปลงเป็นบัญชีแขก และหากบัญชีแขกสูญหายเนื่องจากการเริ่มต้นใหม่หรือการติดตั้งเกมใหม่ บัญชีจะไม่สามารถกู้คืนได้ ดังนั้น หากผู้ใช้ที่มี IdP ที่เชื่อมโยงเพียงบัญชีเดียวพยายามที่จะยกเลิกการเชื่อมโยง IdP นั้น คุณสามารถดำเนินการแจ้งเตือนที่จำกัดสิ่งนี้โดยใช้วลีด้านล่าง โปรดทราบว่า PlayerID จะไม่ถูกออกจากระบบแม้ว่าจะมีการยกเลิกการเชื่อมโยง IdP ที่เกี่ยวข้องก็ตาม
- หากคุณต้องการยกเลิกการเชื่อมโยงบัญชี IdP ล่าสุดที่เชื่อมโยง
Language | Phrase |
---|---|
Korean | 최소 1개의 계정 연동을 유지해야 합니다. |
English | You must keep at least 1 of your accounts synced. |
Japanese | 少なくとも1つのアカウントを連動しなければなりません。 |
Chinese (Simplified) | 需要绑定至少1个账号。 |
Chinese (Traditional) | 至少要有1個帳號是綁定的! |
French | Tu dois garder au moins l'un de tes comptes synchronisés. |
German | Du musst mindestens 1 deiner Konten synchronisieren. |
Russian | Хотя бы 1 из аккаунтов должен быть синхронизирован. |
Spanish | Debe de mantener al menos 1 de sus cuentas sincronizada. |
Portuguese | É necessário sincronizar pelo menos 1 das suas contas. |
Indonesian | Kamu harus punya paling tidak satu akun yang terhubung. |
Vietnamese | Bạn cần phải duy trì ít nhất 1 liên kết tài khoản. |
Thai | คุณต้องซิงค์บัญชีอย่างน้อย 1 บัญชี |
Italian | Devi mantenere almeno 1 dei tuoi account sincronizzato. |
Turkish | En az 1 hesabınızı senkronize etmeniz gerekmektedir. |
Arabic | يجب أن تحتفظ على الأقل بحساب واحد متزامن من بين حساباتك. |
การซิงค์ IdP แบบกำหนดเอง¶
การซิงค์ IdP ที่กำหนดเองเป็นฟังก์ชันที่ปรับแต่งได้ซึ่งช่วยให้สามารถใช้งาน IdP ที่กำหนดเองซึ่งเกมนำมาใช้ แยกจาก IdP ที่ให้โดย Hive SDK หลังจากเรียกใช้ API การเข้าสู่ระบบที่กำหนดเอง คุณสามารถตรวจสอบข้อมูลผู้ใช้ที่เข้าสู่ระบบของ IdP ที่กำหนดเองได้โดยการเข้าถึงข้อมูล customProviderInfoData ด้วยอินสแตนซ์ของคลาส PlayerInfo ที่ถูกส่งเป็นผลลัพธ์ของการเรียกกลับ ProviderType (enum) ของ customProviderInfoData ถูกตั้งค่าเป็น CUSTOM และสามารถแยกแยะได้โดยใช้ ProviderName (String)
ต่อไปนี้คือตัวอย่างโค้ดที่ใช้ในการซิงค์ IdP แบบกำหนดเอง
// Twitter sync that is implemented by the game itself.
Game.Connect"CUSTOM_TWITTER", (string authKey) =>; {
AuthV4.connectWithAuthKey(authKey, (ResultAPI result, PlayerInfo playerInfo) =>; {
switchresult.code) {
case ResultAPI.Code.Success:
// sync success
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// account conflict
Dictionary<string, ProviderInfo>; customProviderInfoData = playerInfo.customProviderInfoData;
ProviderInfo providerInfo = customProviderInfoData["CUSTOM_TWITTER"];
// Check the following sync information for the user
providerInfo.providerType; // ProviderType.CUSTOM, providerType is fixed to ProviderType.CUSTOM. To distinguish, use providerName.
providerInfo.providerName; // "CUSTOM_TWITTER"
providerInfo.providerUserId; // the user id for the Twitter login, implemented by the game itself.
break;
default:
// Other exceptions
break;
}
});
});
#include "HiveAuthV4.h"
// การซิงค์ Twitter ที่ดำเนินการโดยเกมเอง
void GameConnect(const FString& AuthKey)
{
FHiveAuthV4::ConnectWithAuthKey(AuthKey, FHiveAuthV4OnConnectDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHivePlayerInfo& ConflictPlayerInfo) {
switch(Result.Code) {
case FHiveResultAPI::ECode::Success:
// ซิงค์สำเร็จ
break;
case FHiveResultAPI::ECode::AuthV4ConflictPlayer: {
// ข้อขัดแย้งของบัญชี
TMap<FString, FHiveProviderInfo> CustomProviderInfoData = ConflictPlayerInfo.CustomProviderInfoData;
if (const FHiveProviderInfo* ProviderInfo = CustomProviderInfoData.Find(TEXT("CUSTOM_TWITTER"))) {
// ตรวจสอบข้อมูลการซิงค์ต่อไปนี้สำหรับผู้ใช้
EHiveProviderType ProviderType = ProviderInfo->ProviderType; // ProviderType::CUSTOM, providerType ถูกกำหนดให้เป็น ProviderType::CUSTOM เพื่อแยกแยะ ใช้ providerName
FString ProviderName = ProviderInfo->ProviderName; // "CUSTOM_TWITTER"
FString ProviderUserId = ProviderInfo->ProviderUserId; // รหัสผู้ใช้สำหรับการเข้าสู่ระบบ Twitter ที่ดำเนินการโดยเกมเอง
}
}
break;
default:
// ข้อยกเว้นอื่น ๆ
break;
}
}));
}
// Twitter sync that is implemented by the game itself.
Game::Connect"CUSTOM_TWITTER", [=]string authKey) {
AuthV4::connectWithAuthKeyauthKey, [=]ResultAPI const & result, PlayerInfo const & playerInfo) {
switch (result.code) {
case ResultAPI::Success:
// sync success
break;
case ResultAPI::AuthV4ConflictPlayer:
// account conflict
map<string, ProviderInfo>; customProviderInfoData = playerInfo.customProviderInfoData;
ProviderInfo providerInfo = customProviderInfoData["CUSTOM_TWITTER"];
// Check the following sync information for the user
providerInfo.providerType; // ProviderType::CUSTOM, providerType is fixed to ProviderType::CUSTOM. To distinguish, use providerName.
providerInfo.providerName; // "CUSTOM_TWITTER"
providerInfo.providerUserId; // the user id for the Twitter login, implemented by the game itself.
break;
default:
// Other exceptions
break;
}
});
});
// การซิงค์ Twitter ที่ดำเนินการโดยเกมเอง
Game.Connect"CUSTOM_TWITTER") { authKey: String ->;
AuthV4.connectWithAuthKeyresponse.authKey, object : AuthV4.AuthV4ConnectListener {
override fun onAuthV4Connectresult: ResultAPI, conflictPlayer: AuthV4.PlayerInfo?) {
whenresult.code) {
case ResultAPI.Code.Success ->; {
// sync success
}
case ResultAPI.Code.AuthV4ConflictPlayer ->; {
// account conflict
playerInfo.customProviderInfoData["CUSTOM_TWITTER"]?.let { providerInfo ->;
providerInfo.providerType // ProviderType.CUSTOM, providerType is fixed to ProviderType.CUSTOM. To distinguish, use providerName.
providerInfo.providerName // "CUSTOM_TWITTER"
providerInfo.providerUserId // the user id for the Twitter login, implemented by the game itself.
}
else ->; {
// Other exceptions
}
}
}
}
}
// Twitter sync that is implemented by the game itself.
Game.Connect"CUSTOM_TWITTER", new Callback) {
@Override
public void onResponseString authKey) {
com.hive.AuthV4.INSTANCE.connectWithAuthKeyauthKey, new com.hive.AuthV4.AuthV4ConnectListener) {
@Override
public void onAuthV4ConnectResultAPI result, PlayerInfo conflictPlayer) {
switch (result.getCode)) {
case ResultAPI.Code.Success:
// sync success
break;
case ResultAPI.Code.AuthV4ConflictPlayer:
// account conflict
ProviderInfo providerInfo = conflictPlayer.getCustomProviderInfoData().get("CUSTOM_TWITTER");
providerInfo.getProviderType(); // ProviderType.CUSTOM, providerType is fixed to ProviderType.CUSTOM. To distinguish, use providerName.
providerInfo.getProviderName(); // "CUSTOM_TWITTER"
providerInfo.getProviderUserId(); // the user id for the Twitter login, implemented by the game itself.
break;
default:
// Other exceptions
break;
}
}
});
}
});
// Twitter sync that is implemented by the game itself.
Game.connect"CUSTOM_TWITTER") { (authKey) in
AuthV4Interface.connectWithAuthKeyauthKey) { result, conflictPlayer in
switch(result.getCode()){
case .success:
// sync success
break
case .authV4ConflictPlayer:
// account conflict
guard let customProviderInfoData = playerInfo?.customProviderInfoData,
let providerInfo = customProviderInfoData["CUSTOM_TWITTER"] else {
// No sync information for the user, failure handling
return
}
// ตรวจสอบข้อมูลการซิงค์ต่อไปนี้สำหรับผู้ใช้
providerInfo.providerType // HIVEProviderTypeCustom, providerType ถูกกำหนดเป็น HIVEProviderTypeCustom คงที่ เพื่อให้แตกต่าง ใช้ providerName
providerInfo.providerName // "CUSTOM_TWITTER"
providerInfo.providerUserID // รหัสผู้ใช้สำหรับการเข้าสู่ระบบ Twitter ที่ดำเนินการโดยเกมเอง
break
default:
// ข้อยกเว้นอื่นๆ
break
}
}
}
// Twitter sync that is implemented by the game itself.
[Game connect:@"CUSTOM_TWITTER" handler:^NSString* authKey) {
[HIVEAuthV4 connectWithAuthKey:authKey handler:^HIVEResultAPI* result, HIVEPlayerInfo* playerInfo) {
switch(result.code) {
case kSuccess:
// sync success
break;
case kAuthV4ConflictPlayer:
// account conflict
NSDictionary<NSString*, HIVEProviderInfo*>;* customProviderInfoData = playerInfo.customProviderInfoData;
ProviderInfo* providerInfo = [customProviderInfoData objectForKey:@"CUSTOM_TWITTER"];
// Check the following sync information for the user
providerInfo.providerType;
providerInfo.providerType // HIVEProviderTypeCustom, providerType is fixed to HIVEProviderTypeCustom. To distinguish, use providerName.
providerInfo.providerName; // "CUSTOM_TWITTER"
providerInfo.providerUserId; // the user id for the Twitter login, implemented by the game itself.
break;
default:
// Other exceptions
break;
}
}];
}];
ยกเลิกการเชื่อมต่อ IdP ที่กำหนดเอง¶
คุณสามารถปิดการซิงค์กับ IdP ที่กำหนดเองได้ โดยพื้นฐานแล้ว กระบวนการจะเหมือนกับการตัดการเชื่อมต่อ IdP แต่ต้องการ providerName เพื่อขอการตัดการเชื่อมต่อ
Note
โปรดระวังสถานการณ์ที่การซิงค์ IdP ทั้งหมดถูกตัดการเชื่อมต่อ ดูหมายเหตุในส่วนการตัดการเชื่อมต่อ IdP
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการดำเนินการตัดการเชื่อมต่อ IdP แบบกำหนดเอง
#include "HiveAuthV4.h"
FString CustomProviderName = TEXT("CUSTOM_TWITTER");
FHiveAuthV4::DisconnectWithName(CustomProviderName, FHiveAuthV4OnDisconnectDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
if (Result.IsSuccess()) {
// การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
} else {
// ข้อยกเว้นอื่น ๆ
}
}));
String customProviderName = "CUSTOM_TWITTER";
AuthV4.INSTANCE.disconnectWithName(customProviderName, new AuthV4.AuthV4DisconnectListener() {
@Override
public void onAuthV4Disconnect(ResultAPI result) {
switch(result.code) {
case Success:
// การตัดการเชื่อมต่อของผู้ให้บริการสำเร็จ
break;
default:
// ข้อยกเว้นอื่น ๆ
break;
}
}
});
ลบบัญชี IdP และบัญชีผู้เยี่ยมชม¶
คุณต้องตั้งค่ารูปแบบผู้ใช้เพื่อให้ผู้ใช้สามารถลบบัญชีของตนในเกมได้
Warning
เริ่มตั้งแต่วันที่ 30 มิถุนายน 2022 แอปที่ส่งไปยัง App Store ซึ่งสนับสนุนการสร้างบัญชีจะต้องให้ผู้ใช้สามารถเริ่มการลบบัญชีของตนภายในแอปได้ หากคุณกำลังอัปเดตแอปหรือส่งแอปใหม่ที่มีการสร้างบัญชี จะต้องมีการใช้งาน API การลบบัญชีเพื่อป้องกันความล่าช้าในการตรวจสอบ ดูรายละเอียดเพิ่มเติมเกี่ยวกับการลบแอปจาก App Store ได้ที่ แนวทางนโยบายของ Apple
กำหนดค่าและแสดงหน้าต่างป๊อปอัปในเกมเพื่อยืนยันว่าผู้ใช้ต้องการลบบัญชีหรือไม่ คุณสามารถตรวจสอบ ข้อความสำหรับหน้าต่างป๊อปอัป ด้านล่าง
หากคำขอสำหรับการลบบัญชีได้รับการยืนยัน คุณสามารถลบบัญชี Authentication v4 นี้โดยใช้ Hive SDK API หรือ Hive Server API.
- ขั้นตอนในการลบบัญชี
* **เมื่อทำการลบโดยใช้ Hive Server API**: <br>
เมื่อบัญชีถูกลบในฝั่งเกมไคลเอนต์ เซิร์ฟเวอร์เกมควรเรียก Hive Server API [Deleting Authentication v4 Account](../../api/hive-server-api/auth/authv4-account-deletion.md) เพื่อส่งข้อมูลของบัญชีที่ถูกลบไปยัง Authentication Server. Authentication Server จะรับข้อมูลนี้และลบบัญชี หลังจากการลบเสร็จสิ้น Authentication Server จะส่งผลลัพธ์ของการลบบัญชีไปยังเซิร์ฟเวอร์เกม และเซิร์ฟเวอร์เกมจะส่งต่อไปยังเกมไคลเอนต์ เมื่อเกมไคลเอนต์ได้รับผลลัพธ์ของการลบบัญชี มันควรจะแสดงป๊อปอัพที่แจ้งว่าบัญชีถูกลบแล้ว ในฝั่งเกมไคลเอนต์ (Hive SDK) ให้เรียก `signOut()` โดยไม่คำนึงว่าบัญชีเป็น <u>**บัญชีที่ใช้ IdP หรือบัญชีผู้เยี่ยมชม**</u> หลังจากที่บัญชีถูกลบแล้ว.
* **เมื่อทำการลบโดยใช้ Hive SDK API**: <br>
เมื่อบัญชีของผู้เล่นถูกลบในฝั่งเกมไคลเอนต์ เซิร์ฟเวอร์เกมควรเรียกใช้ `playerDelete()
` เพื่อส่งข้อมูลของบัญชีที่ถูกลบไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ หากคุณได้รับผลลัพธ์การเรียกกลับของการลบบัญชีจากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ คุณควรแสดงป๊อปอัปที่แจ้งว่าบัญชีได้ถูกลบในฝั่งเกม
ต่อไปนี้คือตัวอย่างโค้ด AuthV4 สำหรับการลบบัญชีผ่าน Hive SDK API.
การอ้างอิง API: AuthV4.playerDelete
เอกสารอ้างอิง API:AuthV4::playerDelete
การอ้างอิง API: AuthV4.playerDelete
API Reference: AuthV4.INSTANCE.playerDelete
ต่อไปนี้คือตัวอย่างโค้ด AuthV4.Helper สำหรับการลบบัญชีผ่าน Hive SDK API.
การอ้างอิง API: AuthV4.playerDelete
เอกสารอ้างอิง API:AuthV4::playerDelete
API Reference: AuthV4.playerDelete
// Requesting Hive SDK account deletion
AuthV4.Helper.playerDelete(object : AuthV4.Helper.AuthV4HelperListener {
override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
when(result.code) {
ResultAPI.Code.Success -> {
// ลบสำเร็จ
}
else -> {
// สถานการณ์ข้อยกเว้นอื่น ๆ
}
}
}
})
API Reference: AuthV4.INSTANCE.playerDelete
เอกสารอ้างอิง API: AuthV4Interface.helper().playerDelete
เมื่อผู้ใช้เห็นหน้าจอชื่อเกม ให้แสดงรายการ IdP เพื่อให้ผู้ใช้รายนี้เข้าสู่ระบบ (แสดง UI การเข้าสู่ระบบเฉพาะเกมของคุณในกรณีที่คุณไม่ใช้ UI การเข้าสู่ระบบที่ให้โดยแพลตฟอร์ม Hive )
ข้อความป๊อปอัพ¶
ข้อความป๊อปอัพเพื่อยืนยันการลบบัญชี¶
ข้อความสำหรับหน้าต่างป๊อปอัปยืนยันการลบบัญชีที่ปรากฏเมื่อผู้ใช้ดำเนินการลบบัญชีมีดังนี้
ภาษา | Android | iOS |
---|---|---|
เกาหลี | 계정을 삭제할 경우 연결된 데이터는 삭제됩니다. 일부 게임 데이터 삭제는 최대 90일의 시간이 소요될 수 있습니다. * 결제 관련 문의는 [Company Name] 고객센터로 연락바랍니다. | 계정을 삭제할 경우 연결된 데이터는 삭제됩니다. 일부 게임 데이터 삭제는 최대 90일의 시간이 소요될 수 있습니다. * 결제 관련 문의는 앱스토어 또는 [Company Name] 고객센터로 연락바랍니다. |
อังกฤษ | The linked data will be deleted when you delete the account. Some game data deletion may take up to 90 days. * Please contact [Company Name] Customer Support for payment related inquiries. | The linked data will be deleted when you delete the account. Some game data deletion may take up to 90 days. * Please contact the App Store or [Company Name] Customer Support for payment related inquiries. |
ญี่ปุ่น | アカウントを削除すると連動データも削除されます。 一部ゲームデータの削除には時間がかかる場合があります。(最大90日) *決済に関するお問い合わせは[Company Name]サポートセンターにご連絡ください。 | アカウントを削除すると連動データも削除されます。 一部ゲームデータの削除には時間がかかる場合があります。(最大90日) *決済に関してはApp Storeまたは[Company Name]サポートセンターにお問い合わせください。 |
จีน (แบบย่อ) | 删除账户时,绑定的数据将被删除。 删除部分游戏数据最多需要90天时间。 * 付费相关咨询请联系[Company Name]客服中心。 | 删除账户时,绑定的数据将被删除。 删除部分游戏数据最多需要90天时间。 * 付费相关咨询请联系应用商店或[Company Name]客服中心。 |
จีน (แบบดั้งเดิม) | 刪除帳號時也將刪除綁定的數據。 刪除部分遊戲數據最長需90天的時間。 * 結帳相關諮詢請至[Company Name]客服中心。 | 刪除帳號時也將刪除綁定的數據。 刪除部分遊戲數據最長需90天的時間。 * 結帳相關諮詢請至App Store或[Company Name]客服中心。 |
เยอรมัน | Wenn du dein Konto löschst, werden alle verknüpften Daten gelöscht. Die Löschung einiger Spieldaten kann bis zu 90 Tage dauern. * Bei zahlungsbezogenen Fragen wende dich bitte an den [Company Name] Kundenservice. | Wenn du dein Konto löschst, werden alle verknüpften Daten gelöscht. Die Löschung einiger Spieldaten kann bis zu 90 Tage dauern. * Bei zahlungsbezogenen Fragen wende dich bitte an den App-Store oder den [Company Name] Kundenservice. |
ฝรั่งเศส | Si vous supprimez votre compte, les données associées seront également supprimées. La suppression de certaines données de jeu peut prendre jusqu'à 90 jours. * Pour toute demande relative aux paiements, veuillez contacter le service client [Company Name]. | Si vous supprimez votre compte, les données associées seront également supprimées. La suppression de certaines données de jeu peut prendre jusqu'à 90 jours. * Pour toute demande relative aux paiements, veuillez contacter le service client de l'App Store ou de [Company Name]. |
รัสเซีย | Если Вы удалите свой аккаунт, привязанные к нему данные будут также удалены. Удаление некоторых игровых данных может занять до 90 дней. * По вопросам, связанным с оплатой, пожалуйста, обратитесь в службу поддержки [Company Name]. | Если Вы удалите свой аккаунт, привязанные к нему данные будут также удалены. Удаление некоторых игровых данных может занять до 90 дней. * По вопросам, связанным с оплатой, пожалуйста, обратитесь в App Store или службу поддержки [Company Name]. |
สเปน | Se eliminarán los datos asociados cuando elimine la cuenta. La eliminación de algunos datos del juego puede demorarse hasta 90 días. * Por favor, póngase en contacto con el servicio de atención al cliente de [Company Name] para consultas relacionadas con el pago. | Se eliminarán los datos asociados cuando elimine la cuenta. La eliminación de algunos datos del juego puede demorarse hasta 90 días. * Por favor, póngase en contacto con el App Store o con el servicio de atención al cliente de [Company Name] para consultas relacionadas con el pago. |
โปรตุเกส | Os dados vinculados à conta serão excluídos quando você excluir a conta. A exclusão de alguns dados do jogo pode levar até 90 dias. * Entre em contato com o Suporte ao Cliente do(a) [Company Name] para consultas relacionadas a pagamentos. | Os dados vinculados à conta serão excluídos quando você excluir a conta. A exclusão de alguns dados do jogo pode levar até 90 dias. * Entre em contato com a App Store ou com o Suporte ao Cliente do(a) [Company Name] para consultas relacionadas pagamentos. |
อินโดนีเซีย | Data yang terhubung akan dihapus ketika kamu menghapus akun. Beberapa penghapusan data game akan memakan waktu hingga 90 hari. * Silakan hubungi Customer Support [Company Name] untuk melaporkan permasalahan terkait pembayaran. | Data yang terhubung akan dihapus ketika kamu menghapus akun. Beberapa penghapusan data game akan memakan waktu hingga 90 hari. * Silakan hubungi Customer Support App Store atau [Company Name] untuk melaporkan permasalahan terkait pembayaran. |
ไทย | ถ้าคุณลบบัญชีของคุณ ข้อมูลที่เชื่อมต่อไว้จะถูกลบไปด้วย การลบข้อมูลเกมบางส่วนอาจใช้เวลาสูงสุดถึง 90 วัน * กรุณาติดต่อฝ่ายลูกค้าสัมพันธ์ [Company Name] หากต้องการส่งคำร้องหรือมีข้อสงสัยเกี่ยวกับการชำระเงิน | ถ้าคุณลบบัญชีของคุณ ข้อมูลที่เชื่อมต่อไว้จะถูกลบไปด้วย การลบข้อมูลเกมบางส่วนอาจใช้เวลาสูงสุดถึง 90 วัน * กรุณาติดต่อ App Store หรือฝ่ายลูกค้าสัมพันธ์ [Company Name] หากต้องการส่งคำร้องหรือมีข้อสงสัยเกี่ยวกับการชำระเงิน |
ภาษาเวียดนาม | ข้อมูลที่เชื่อมต่อจะถูกลบออกหากคุณลบบัญชีของคุณ การลบข้อมูลเกมบางกรณีอาจใช้เวลานานสูงสุด 90 วัน. * หากมีข้อสงสัยเกี่ยวกับการชำระเงินโปรดติดต่อศูนย์บริการลูกค้าของ [Company Name]. | ข้อมูลที่เชื่อมต่อจะถูกลบออกหากคุณลบบัญชีของคุณ การลบข้อมูลเกมบางกรณีอาจใช้เวลานานสูงสุด 90 วัน. * หากมีข้อสงสัยเกี่ยวกับการชำระเงินโปรดติดต่อศูนย์บริการลูกค้าของ [Company Name] หรือ App Store. |
ภาษาอิตาลี | เมื่อลบบัญชี ข้อมูลที่เกี่ยวข้องจะถูกลบออกด้วย การลบข้อมูลเกมบางอย่างอาจใช้เวลานานถึง 90 วัน. * กรุณาติดต่อฝ่ายบริการลูกค้า [Company Name] สำหรับคำถามที่เกี่ยวข้องกับการชำระเงิน. | "เมื่อลบบัญชี ข้อมูลที่เกี่ยวข้องจะถูกลบออกด้วย การลบข้อมูลเกมบางอย่างอาจใช้เวลานานถึง 90 วัน. * กรุณาติดต่อ App Store หรือฝ่ายบริการลูกค้า [Company Name] สำหรับคำถามที่เกี่ยวข้องกับการชำระเงิน. |
ภาษาเตอร์กิช | เมื่อคุณลบบัญชี ข้อมูลที่เชื่อมต่อจะถูกลบออก ข้อมูลเกมบางอย่างอาจใช้เวลานานถึง 90 วันในการลบ. * สำหรับคำถามเกี่ยวกับการชำระเงินโปรดติดต่อฝ่ายสนับสนุนลูกค้า [Company Name]. | เมื่อคุณลบบัญชี ข้อมูลที่เชื่อมต่อจะถูกลบออก ข้อมูลเกมบางอย่างอาจใช้เวลานานถึง 90 วันในการลบ. * สำหรับคำถามเกี่ยวกับการชำระเงินโปรดติดต่อ App Store หรือฝ่ายสนับสนุนลูกค้า [Company Name]. |
ภาษาอาหรับ | ข้อมูลที่เชื่อมต่อจะถูกลบเมื่อคุณลบบัญชี การลบข้อมูลเกมบางอย่างอาจใช้เวลานานถึง 90 วัน. * กรุณาติดต่อศูนย์บริการลูกค้า [Company Name] สำหรับคำถามที่เกี่ยวข้องกับการชำระเงิน. | ข้อมูลที่เชื่อมต่อจะถูกลบเมื่อคุณลบบัญชี การลบข้อมูลเกมบางอย่างอาจใช้เวลานานถึง 90 วัน. * กรุณาติดต่อ App Store หรือศูนย์บริการลูกค้า [Company Name] สำหรับคำถามที่เกี่ยวข้องกับการชำระเงิน. |
Note
ป้อนชื่อของศูนย์บริการลูกค้าของบริษัทเกมของคุณใน [Company Name] ในข้อความนี้。
เกมที่ให้บริการการสมัครสมาชิกต้องเพิ่มวลี "การสมัครสมาชิกอัตโนมัติจะถูกเรียกเก็บเงินแม้ว่าคุณจะลบบัญชีของคุณ และคุณต้องยกเลิกการสมัครด้วยตนเอง" (และวลีในตารางถัดไปสำหรับภาษาอื่น) ลงในข้อความป๊อปอัปเพื่อยืนยันการลบบัญชี
Korean | 계정을 삭제하더라도 자동 구독 상품은 요금이 청구되므로 직접 구독을 해지해야 합니다. |
---|---|
English | Automatic subscriptions will still be charged even if you delete your account, and you need to unsubscribe manually. |
Japanese | アカウントを削除しても定期購入商品は解約されず料金が請求されますので、手動で解約してください。 |
Chinese (Simplified) | 即使删除账号,自动订阅商品也会按期收取费用,因此必须手动解除订阅。 |
Chinese (Traditional) | 即使刪除帳號,自動訂閱商品仍會繼續扣款,需親自解除訂閱。 |
German | Automatische Abonnements werden auch dann noch berechnet, wenn du dein Konto gelöscht hast. Du musst dich manuell abmelden. |
French | Les abonnements automatiques seront toujours facturés même si vous supprimez votre compte, vous devrez donc vous désabonner vous-même. |
Russian | Автоматическая подписка будет по-прежнему взимать плату даже при удалении аккаунта, поэтому Вам необходимо отменить подписку отдельно. |
Spanish | Las suscripciones automáticas aún se cobrarán incluso si elimina su cuenta, y debe darlas de baja manualmente. |
Portuguese | As assinaturas automáticas ainda serão cobradas mesmo se você excluir sua conta, sendo necessário que você as cancele manualmente. |
Indonesian | Berlangganan otomatis akan tetap dikenakan biaya meskipun kamu menghapus akun, kamu harus membatalkan berlangganan secara manual. |
Thai | การสมัครแพ็กเกจต่าง ๆ โดยอัตโนมัติจะยังมีผลอยู่แม้ว่าคุณลบบัญชีไปแล้ว และคุณต้องยกเลิกการสมัครแพ็กเกจเหล่านั้นด้วยตัวเอง |
Vietnamese | Bạn vẫn sẽ phải trả phí cho các vật phẩm đã đăng ký thanh toán tự động kể cả khi đã xóa tài khoản, vì thế bạn cần phải trực tiếp hủy bỏ đăng ký. |
Italian | Gli abbonamenti automatici verranno comunque addebitati anche dopo aver eliminato l'account, quindi bisogna annullare le rispettive iscrizioni separatamente. |
Turkish | Hesabınızı silseniz bile otomatik abonelikler ücretlendirilecektir ve manuel olarak abonelikten çıkmanız gerekir. |
Arabic | سيستمر فرض رسوم على الاشتراكات التلقائية حتى إذا قمت بحذف حسابك ، وتحتاج إلى إلغاء الاشتراك يدويًا. |
ข้อความป๊อปอัปเมื่อเสร็จสิ้นการลบบัญชี¶
Language | Phrase |
---|---|
Korean | 계정 삭제가 완료되었습니다. |
English | The account has been deleted. |
Japanese | アカウント削除が完了しました。 |
Chinese (Simplified) | 已删除账号。 |
Chinese (Traditional) | 已成功刪除帳號。 |
German | Das Konto wurde gelöscht. |
French | La suppression du compte a été effectuée |
Russian | Аккаунт удален. |
Spanish | La cuenta se ha suprimido. |
Portuguese | A conta foi excluída. |
Indonesian | Akun telah dihapus. |
Thai | บัญชีถูกลบแล้ว |
Vietnamese | Đã hoàn thành xóa tài khoản. |
Italian | L'account è stato cancellato. |
Turkish | Hesap silme tamamlandı. |
Arabic | تم حذف حسابك بنجاح. |
ข้อความป๊อปอัพเมื่อการลบบัญชีล้มเหลว¶
Language | Phrase |
---|---|
Korean | 계정 삭제가 실패되었습니다. 잠시 후 다시 진행해 주세요. |
English | Failed to delete the account. Please try again later. |
Japanese | アカウント削除に失敗しました。しばらくしてからもう一度お試しください。 |
Chinese (Simplified) | 账号删除失败。请稍后再试。 |
Chinese (Traditional) | 帳號刪除失敗,請稍後再試。 |
German | Das Konto konnte nicht gelöscht werden. Bitte versuche es später erneut. |
French | La suppression du compte a échoué. Veuillez réessayer dans quelques instants. |
Russian | Не удалось удалить аккаунт. Пожалуйста, попробуйте позже. |
Spanish | Hubo un error al eliminar la cuenta. Por favor, inténtelo de nuevo más tarde. |
Portuguese | Falha ao excluir a conta. Por favor, tente novamente mais tarde. |
Indonesian | Gagal menghapus akun. Silakan coba lagi nanti. |
Thai | การลบบัญชีล้มเหลว กรุณาลองใหม่ภายหลัง |
Vietnamese | Xóa tài khoản thất bại. Vui lòng thử lại sau. |
Italian | Eliminazione dell'account fallito. Riprova più tardi. |
Turkish | Hesap silme başarısız. Daha sonra tekrar deneyiniz. |
Arabic | فشل حذف الحساب. يرجى إعادة المحاولة في وقت لاحق. |