เชื่อมโยง Idp
Note
- สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ AuthV4.Helper โปรดดูที่หน้า Authentication
หลังจากลงชื่อเข้าใช้ แสดงสถานะการซิงค์ของ PlayerID ที่ผู้ใช้กำลังใช้งานอยู่และให้ฟังก์ชันในการเชื่อมโยงกับผู้ให้บริการ ID อื่น (IdP)。 แสดงสถานะการซิงค์ของ IdP ในเมนูการตั้งค่าเกม และกำหนดค่า UI เพื่อให้ผู้ใช้สามารถเชื่อมต่อและตัดการเชื่อมต่อกับ IdP ได้。
ตรวจสอบข้อมูลสถานะการซิงค์ IdP¶
คุณสามารถใช้วิธี getPlayerInfo()
ของคลาส AuthV4 เพื่อตรวจสอบรายการ IdP ที่ซิงค์กับ PlayerID ที่เข้าสู่ระบบอยู่ในขณะนี้ ในหน้าจอการตั้งค่าเกม ให้แน่ใจว่าคุณได้กำหนดค่า UI เพื่อดูว่า IdP ใดซิงค์อยู่ และเปิดเผย วลีเพื่อแนะนำการซิงค์ IdP
ในหน้าจอการตั้งค่าเกม ควรแสดง PlayerID ของผู้ใช้แต่ละคนพร้อมกับข้อมูลการซิงค์ IdP แสดง PlayerID ด้วยรูปแบบ CS Code และค่าของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน
ต่อไปนี้คือรายการของ 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
Phrases to suggest IdP sync¶
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 framework ผ่านการตั้งค่า External Dependency
- ลบ 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:
// สำเร็จในการซิงค์ IdP
break;
case AuthV4ConflictPlayer:
// ข้อขัดแย้งของบัญชี
break;
default:
// กรณีพิเศษ
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:
// Success to sync IdP
break;
case kAuthV4ConflictPlayer:
// Account conflict
break;
default:
// Exceptional case
break;
}
}];
การจัดการความขัดแย้งของบัญชีกับ 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 ของ ConflictPlayer\ngame_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:
// account switching: game restart required
break;
case FHiveResultAPI::ECode::AuthV4PlayerResolved:
// keep current user
break;
case FHiveResultAPI::ECode::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: 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 คำขอ
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
// สร้างวัตถุข้อมูลเกมของบัญชีที่มีข้อขัดแย้ง
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;
}
}
}];
Implementing account selection UI from Hive SDK (without game data or with unknown data)¶
หากคุณไม่สามารถตรวจสอบข้อมูลเกมได้ในขณะที่แสดง UI การเลือกบัญชี หรือเพียงแค่แจ้งการเปลี่ยนแปลงในการลงชื่อเข้าใช้ UI ที่เรียบง่ายจะเหมาะสำหรับกรณีเหล่านี้ ผลลัพธ์จะส่งคืนความล้มเหลวเมื่อผู้ใช้ข้ามหรือไม่สามารถเลือกบัญชีได้ และในกรณีนี้ให้แน่ใจว่าต้องดำเนินการเล่นเกมต่อไปตามที่เป็นอยู่ อย่างไรก็ตาม หากไม่สามารถตรวจสอบสิทธิ์อุปกรณ์ในบัญชีที่เปลี่ยน (AuthV4NotRegisteredDevice
) เกมจะต้องกลับไปที่หน้าต้นฉบับเพื่อเข้าสู่ระบบอีกครั้ง ซึ่งทำให้การเข้าสู่ระบบกับ SDK ถูกยกเลิกและ isAutoSignIn ส่งคืน true
ต่อไปนี้เป็นตัวอย่างโค้ดในการสร้าง 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 account selection UI request
AuthV4::Helper::showConflict([=](ResultAPI const & result, std::shared_ptr 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 ResultAPI::AuthV4PlayerChange:
// account switching: game restart required
break;
case ResultAPI::AuthV4PlayerResolved:
// keep current user
break;
case ResultAPI::Code::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: com.hive.AuthV4.Helper.showConflict
// ขอ Hive SDK AuthV4.Helper UI การเลือกบัญชี
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 Reference: HIVEAuthV4Helper::showConflict:
// Hive SDK AuthV4:Helper account selection UI request
AuthV4Interface.helper().showConflict() { (result, playerInfo) in
หากผลลัพธ์.needExit() {
// TODO: implement app exit functionality
// ex) exit(0)
} else {
switch ผลลัพธ์.getCode() {
case .authV4PlayerChange:
// การสลับบัญชี: ต้องเริ่มเกมใหม่
case .authV4CancelDialog:
// รักษาผู้ใช้ปัจจุบัน
case .authV4NotRegisteredDevice:
// นี่คือกรณีที่การเข้าสู่ระบบถูกยกเลิกเนื่องจากความล้มเหลวในการตรวจสอบอุปกรณ์ ลองเข้าสู่ระบบใหม่ด้วย AUTO หรือออกจากระบบ
default:
// จัดการข้อยกเว้นอื่น ๆ
break
}
}
}
API Reference: HIVEAuthV4Helper ::showConflict:
// Hive SDK AuthV4:Helper account selection UI request
[[HIVEAuthV4 helper] showConflict:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
if (result. needExit) {
// TODO: implement app exit functionality
// 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 when login is canceled due to device authentication failure. Try logging back in with AUTO or log out.
break;
default:
// handle other exceptions
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.
คุณต้องกำหนดข้อความเตือนที่เหมาะสมเมื่อกำหนดค่าหน้าต่างการเลือกบัญชี เนื่องจากในบางกรณี ข้อมูลที่ไม่ได้เลือกอาจไม่พบในสถานะของผู้เข้าชม นอกจากนี้ หากคุณต้องการกำหนดไม่ให้เปลี่ยนข้อมูลที่เชื่อมโยงกับ 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 การตัดการเชื่อมต่อในขณะที่มี 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 -> {
// การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
}
else -> {
// สถานการณ์ข้อยกเว้นอื่น ๆ
}
}
}
})
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 ล่าสุดที่เชื่อมโยง
ภาษา | วลี |
---|---|
เกาหลี | 게스트 상태로 전환되었습니다. 계정 연동을 하시면 게임 데이터를 안전하게 지킬 수 있습니다. |
อังกฤษ | You've been transferred to a guest account. By synchronizing your account, you can secure your game data. |
ญี่ปุ่น | ゲストアカウントに切り替わりました。 アカウントを連動することでゲームデータを守ることができます。 |
จีน (แบบย่อ) | 已转换为游客状态。 关联账号时,有助于保护游戏数据。 |
จีน (แบบดั้งเดิม) | 已切換為訪客帳號。 請綁定帳號,保護您的遊戲數據。 |
ฝรั่งเศส | Vous êtes passé en compte ""invité"". En liant votre compte, vous pourrez garantir la protection de vos données de jeu. |
เยอรมัน | Dein Konto wurde in ein Gastkonto umgewandelt. Du kannst deine Spieldaten sichern, indem du dein Konto synchronisierst. |
รัสเซีย | Ваш аккаунт был преобразован в гостевой. Синхронизовав аккаунт, Вы можете защитить свои игровые данные. |
สเปน | Has cambiado a la cuenta de invitado. Al vincular tu cuenta, podrás garantizar la protección de los datos de tu juego. |
โปรตุเกส | Você foi transferido para uma conta de convidado. Ao sincronizar a sua conta, você pode proteger os dados do seu jogo. |
อินโดนีเซีย | Statusmu telah diubah menjadi guest. Dengan mensinkronisasikan akun, kamu bisa menjaga data permainanmu agar tetap aman. |
เวียดนาม | 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. |
ไทย | บัญชีคุณย้อนกลับไปเป็นบัญชี Guest แล้ว คุณสามารถรักษาข้อมูลเกมของคุณให้ปลอดภัยด้วยการซิงค์บัญชีของคุณ |
อิตาลี | Sei stato/a trasferito/a a un account ospite. Sincronizzando il tuo account, puoi proteggere i tuoi dati di gioco. |
ตุรกี | Hesabınız misafir hesap olarak değiştirildi. Hesabınızı bağlayarak oyun verilerinizi güvende tutabilirsiniz. |
อาหรับ | لقد تم نقلك إلى حساب ضيف. من خلال مزامنة حسابك ، يمكنك تأمين سجلات لعبتك . |
ตัดการเชื่อมต่อจากบัญชี 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 ที่ถูกส่งเป็นผลลัพธ์ของการเรียกกลับ ประเภทผู้ให้บริการ (enum) ของ customProviderInfoData จะถูกตั้งค่าเป็น CUSTOM และสามารถแยกแยะได้โดยชื่อผู้ให้บริการ (String)
ต่อไปนี้คือตัวอย่างโค้ดที่ใช้ในการซิงค์ IdP แบบกำหนดเอง
// Twitter sync that is implemented by the game itself.
Game.Connect"CUSTOM_TWITTER", (string authKey) =>; {
AuthV4.connectWithAuthKeyauthKey, (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 การลบบัญชีเพื่อป้องกันความล่าช้าในการตรวจสอบ ดู แนวทางนโยบายของ Apple เพื่อข้อมูลเพิ่มเติมเกี่ยวกับการลบแอปจาก App Store.
กำหนดค่าและแสดงหน้าต่างป๊อปอัปในเกมเพื่อยืนยันว่าผู้ใช้จะดำเนินการลบบัญชีหรือไม่ คุณสามารถตรวจสอบ วลีสำหรับหน้าต่างป๊อปอัป ด้านล่าง
หากคำขอสำหรับการลบบัญชีได้รับการยืนยัน คุณสามารถลบบัญชี 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) เพื่อส่งข้อมูลของบัญชีที่ถูกลบไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ เซิร์ฟเวอร์การตรวจสอบสิทธิ์จะได้รับข้อมูลนี้และลบบัญชี หลังจากการลบ เซิร์ฟเวอร์การตรวจสอบสิทธิ์จะส่งผลลัพธ์ของการลบบัญชีไปยังเซิร์ฟเวอร์เกม และเซิร์ฟเวอร์เกมจะส่งต่อไปยังเกมไคลเอนต์ เมื่อเกมไคลเอนต์ได้รับผลลัพธ์ของการลบบัญชี มันควรจะแสดงป๊อปอัพที่แจ้งว่าบัญชีถูกลบแล้ว ในฝั่งเกมไคลเอนต์ (Hive SDK) ให้เรียกใช้ `signOut()` โดยไม่คำนึงว่าบัญชีเป็น <u>**บัญชีที่ใช้ IdP หรือบัญชีผู้เยี่ยมชม**</u> หลังจากที่บัญชีถูกลบแล้ว.
* **เมื่อทำการลบโดยใช้ Hive SDK API**: <br>
เมื่อบัญชีของผู้เล่นถูกลบในฝั่งเกมไคลเอนต์ เซิร์ฟเวอร์เกมควรเรียกใช้ `playerDelete()
` เพื่อส่งข้อมูลของบัญชีที่ถูกลบไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ หากคุณได้รับผลลัพธ์การเรียกกลับของการลบบัญชีจากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ คุณควรแสดงป๊อปอัพที่แจ้งว่าบัญชีได้ถูกลบในฝั่งเกม
ต่อไปนี้คือตัวอย่างโค้ด AuthV4 สำหรับการลบบัญชีผ่าน Hive SDK API.
API Reference: AuthV4.playerDelete
เอกสารอ้างอิง API:AuthV4::playerDelete
API Reference: AuthV4.playerDelete
API Reference: AuthV4.INSTANCE.playerDelete
ต่อไปนี้คือตัวอย่างโค้ด AuthV4.Helper สำหรับการลบบัญชีผ่าน Hive SDK API.
การอ้างอิง API: AuthV4.playerDelete
เอกสารอ้างอิง API:AuthV4::playerDelete
API Reference: AuthV4.playerDelete
API Reference: AuthV4.INSTANCE.playerDelete
// Requesting Hive SDK account deletion
AuthV4.Helper.INSTANCE.playerDelete(new AuthV4.Helper.AuthV4HelperListener() {
@Override
public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) {
switch(result.code) {
case Success:
// ลบสำเร็จ
break;
default:
// สถานการณ์ข้อยกเว้นอื่นๆ
break;
}
}
});
API Reference: AuthV4Interface.helper().playerDelete
เมื่อผู้ใช้เห็นหน้าจอชื่อเกม ให้แสดงรายการ IdP เพื่อให้ผู้ใช้คนนี้เข้าสู่ระบบ (แสดง UI การเข้าสู่ระบบเฉพาะเกมของคุณในกรณีที่คุณไม่ใช้ UI การเข้าสู่ระบบที่มีให้โดยแพลตฟอร์ม Hive )
ข้อความป๊อปอัพ¶
ข้อความป๊อปอัปเพื่อยืนยันการลบบัญชี¶
ข้อความสำหรับหน้าต่างป๊อปอัปยืนยันการลบบัญชีที่ปรากฏเมื่อผู้ใช้ดำเนินการลบบัญชีมีดังนี้
ภาษา | Android | iOS |
---|---|---|
เกาหลี | 계정을 삭제할 경우 연결된 데이터는 삭제됩니다. 일부 게임 데이터 삭제는 최대 90일의 시간이 소요될 수 있습니다. * 결제 관련 문의는 [Company Name] 고객센터로 연락바랍니다. | 계정을 삭제할 경우 연결된 데이터는 삭제됩니다. 일부 게임 데이터 삭제는 최대 90일의 시간이 소요될 수 있습니다. * 결제 관련 문의는 앱스토어 또는 [Company Name] 고객센터로 연락바랍니다. |
อังกฤษ | ข้อมูลที่เชื่อมต่อจะถูกลบเมื่อคุณลบบัญชี บางการลบข้อมูลเกมอาจใช้เวลานานถึง 90 วัน * กรุณาติดต่อฝ่ายบริการลูกค้า [Company Name] สำหรับข้อสงสัยที่เกี่ยวกับการชำระเงิน | ข้อมูลที่เชื่อมต่อจะถูกลบเมื่อคุณลบบัญชี บางการลบข้อมูลเกมอาจใช้เวลานานถึง 90 วัน * กรุณาติดต่อ App Store หรือฝ่ายบริการลูกค้า [Company Name] สำหรับข้อสงสัยที่เกี่ยวกับการชำระเงิน |
ญี่ปุ่น | アカウントを削除すると連動データも削除されます。 一部ゲームデータの削除には時間がかかる場合があります。(最大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 | فشل حذف الحساب. يرجى إعادة المحاولة في وقت لاحق. |