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

เชื่อมโยง 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 ได้ซิงค์กับ PlayerID ที่เข้าสู่ระบบอยู่ในขณะนี้

  • ตัวอย่างหน้าจอสำหรับการเชื่อมโยงบัญชี

ต่อไปนี้คือรายการของ IdP ที่สามารถให้โดยแอปปัจจุบันผ่าน providerTypeList ที่ส่งกลับจาก setup() กรุณาตรวจสอบรายการของ IdP ที่เชื่อมโยงกับ PlayerID และแสดงสถานะการเชื่อมโยงโดยใช้โค้ดตัวอย่างที่ให้ไว้

API Reference: hive.AuthV4.getPlayerInfo

AuthV4.PlayerInfo playerInfo = AuthV4.getPlayerInfo();    

        foreach (AuthV4.ProviderInfo providerInfo in playerInfo.providerInfoData) {    
            // Synced-Provider data    
    }
#include "HiveAuthV4.h"

TOptional<FHivePlayerInfo> PlayerInfo = FHiveAuthV4::GetPlayerInfo();
if (PlayerInfo.IsSet())
{
        const FHivePlayerInfo& PlayerInfoData = PlayerInfo.GetValue();
        for (const auto& ProviderInfo : PlayerInfoData.ProviderInfoData)
        {
                // Synced-Provider data  
        }
}

API Reference: AuthV4::getPlayerInfo

// Request the sync status of Hive SDK AuthV4    
        for( auto providerInfo : AuthV4::getPlayerInfo().providerInfoData ) {    
            cout&lt;&lt;"ProviderType : "&lt;&lt;ProviderInfo::stringProviderType(providerInfo.second.providerType)&lt;&lt;endl;    
            cout&lt;&lt;"ProviderUserId : "&lt;&lt;providerInfo.second.providerUserId&lt;&lt;endl;    
    }

API Reference: com.hive.AuthV4.getPlayerInfo

//ค้นหาข้อมูลผู้ใช้ที่ได้รับการตรวจสอบ    
    AuthV4.PlayerInfo playerInfo = AuthV4.getPlayerInfo();

API Reference: HIVEAuthV4:getPlayerInfo

HIVEPlayerInfo *playerInfo = [HIVEAuthV4 getPlayerInfo];    

        for (NSString *providerTypeStr in [playerInfo.providerInfoData allKeys]) {    
            // Synced Provider data    
            HIVEProviderInfo *providerInfo = playerInfo.providerInfoData[providerTypeStr];    
    }

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 &amp; 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 จะยังคงล็อกอินอยู่
  • เมื่อ CurrentPlayer เป็นบัญชี IdP 1 (ตัวอย่าง: Facebook) และ ConflictPlayer เป็นบัญชี IdP 2 (ตัวอย่าง: Google Play)

    • ยกเลิก: คงสถานะการเข้าสู่ระบบด้วย CurrentPlayer ปัจจุบันของบัญชี Facebook ของคุณ
    • ยืนยัน: เปลี่ยนผู้เล่นเป็น ConflictPlayer ของบัญชี 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\n
  • game_data: จัดระเบียบข้อมูลเกม เช่น ชื่อตัวละคร, จำนวนเงินในเกม, และระดับในรูปแบบ Map<String, Object >;

ต่อไปนี้คือตัวอย่างโค้ดในการจัดทำข้อมูลของ ConflictPlayer

{"player_id":123, "game_data":{"Name":"ConflictPlayer", "Level":52}}

การนำเสนอ 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 &amp; 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 &amp; 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 &amp; result,PlayerInfo const &amp; 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

using hive;    
    AuthV4.Helper.disconnect (AuthV4.ProviderType.HIVE, delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) {    
       switch (result.code) {    
         case ResultAPI.Code.Success:    
           // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ    
           break;    
         default:    
           // สถานการณ์ข้อยกเว้นอื่น ๆ    
           break;    
       }    
});
#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

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    
    AuthV4.Helper.INSTANCE.disconnect(AuthV4.ProviderType.HIVE, (result, playerInfo) -> {    
         switch (result.getCode()) {    
             case Success:    
                 // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ    
                 break;    
             default:    
                 // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 break;    
         }    
});

API Reference: .disconnect

import HIVEService    
    AuthV4Interface.helper().disconnect(.Hive) { result, playerInfo in    
        switch result.getCode() {    
            case.success:    
            // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ    
            default:    
            // สถานการณ์ข้อยกเว้นอื่น ๆ    
            break    
        }    
}

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&lt;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 &amp; result, PlayerInfo const &amp; playerInfo) {
                switch (result.code) {
                    case ResultAPI::Success:
                    // sync success
                    break;
                    case ResultAPI::AuthV4ConflictPlayer:
                    // account conflict
                    map&lt;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&lt;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 แบบกำหนดเอง

string customProviderName = "CUSTOM_TWITTER";

AuthV4.disconnectWithName (customProviderName, delegate (ResultAPI result) {
    switch(result.code) {
    case ResultAPI.Code.Success:
        // Provider disconnection success
        break;
    default:
        // Other exceptions
        break;
    }
});
#include "HiveAuthV4.h"

FString CustomProviderName = TEXT("CUSTOM_TWITTER");
FHiveAuthV4::DisconnectWithName(CustomProviderName, FHiveAuthV4OnDisconnectDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
        } else {
                // ข้อยกเว้นอื่นๆ
        }
}));
std::string customProviderName = "CUSTOM_TWITTER"

AuthV4::disconnectWithName(customProviderName, [=](ResultAPI const & result) {
        switch (result.code) {
        case ResultAPI::Success:
            // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
            break;
        default:
            // ข้อยกเว้นอื่น ๆ
            break;
        }
});
val customProviderName = "CUSTOM_TWITTER"

AuthV4.disconnectWithName(customProviderName, object : AuthV4.AuthV4DisconnectListener {
    override fun onAuthV4Disconnect(result: ResultAPI) {

            เมื่อ(result.code) {
            สำเร็จ -> {
                // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
            }
            อื่น ๆ -> {
                // ข้อยกเว้นอื่น ๆ
            }
        }
    }
})
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;
        }
    }
});
let customProviderName = "CUSTOM_TWITTER"

AuthV4Interface.disconnectWithName(customProviderName) { result  in
        switch(result.getCode()){
        case .success:
            // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
        break
        default:
            // ข้อยกเว้นอื่นๆ
        break
        }
    }
NSString* customProviderName = @"CUSTOM_TWITTER";

[HIVEAuthV4 disconnectWithName:customProviderName handler:^(HIVEResultAPI *result) {
    switch(result.code) {
    case kSuccess:
        // การตัดการเชื่อมต่อผู้ให้บริการสำเร็จ
        break;
    default:
        // ข้อยกเว้นอื่น ๆ
        break;
    }
}];

ลบบัญชี IdP และบัญชีผู้เยี่ยมชม

คุณต้องกำหนดค่าผู้ใช้ให้สามารถลบบัญชีของตนในเกมได้

  • ตัวอย่างของ UI
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

// การขอให้ลบบัญชี SDK ของ Hive
        AuthV4.playerDeletedelegate (ResultAPI result) {
            switchresult.code) {
                case ResultAPI.Code.Success:
                    // การลบเสร็จสิ้น
                    break;
                default:
                    // ข้อยกเว้นอื่น ๆ
                    break;
            }
        });
#include "HiveAuthV4.h"

FHiveAuthV4::PlayerDelete(FHiveAuthV4OnSignOutDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        switch(Result.Code) {
                case FHiveResultAPI::ECode::Success:
                        // การลบเสร็จสมบูรณ์
                        break;
                default:
                        // ข้อยกเว้นอื่น ๆ
                        break;
        }
}));

เอกสารอ้างอิง API:AuthV4::playerDelete

// Requesting Hive SDK account deletion
        AuthV4::playerDelete[=]ResultAPI const &amp; result) {
                switch (result.code) {
                    case ResultAPI::Success:
                        // Deletion completed
                        break;
                    default:
                        // Other exceptions
                        break;
                }
        });

API Reference: AuthV4.playerDelete

// ขอการลบบัญชี Hive SDK
    AuthV4.playerDeleteobject : AuthV4.AuthV4SignOutListener {
        override fun onAuthV4SignOutresult: ResultAPI) {
            whenresult.code) {
                ResultAPI.Code.Success ->; {
                    // การลบเสร็จสิ้น
                }
                else ->; {
                    // ข้อยกเว้นอื่นๆ
                }
            }
        }
    })

API Reference: AuthV4.INSTANCE.playerDelete

// การขอให้ลบบัญชี SDK ของ Hive
    AuthV4.INSTANCE.playerDeletenew AuthV4.AuthV4SignOutListener) {
        @Override
        public void onAuthV4SignOutResultAPI result) {
            switchresult.code) {
                case Success:
                    // การลบเสร็จสิ้น
                    break;
                default:
                    // ข้อยกเว้นอื่น ๆ
                    break;
            }
        }
    });
// การขอให้ลบบัญชี SDK ของ Hive
    AuthV4Interface.playerDelete { result in
        switchresult.code) {
        case Success:
            // การลบเสร็จสิ้น
            break;
        default:
            // ข้อยกเว้นอื่น ๆ
            break;
        }
    }

เอกสารอ้างอิง API: HIVEAuthV4Helper::playerDelete:

// Requesting Hive SDK account deletion
    [[HIVEAuthV4] playerDelete:^HIVEResultAPI *result) {
        switchresult.code) {
        case Success:
            // Deletion completed
            break;
        default:
            // Other exceptions
            break;
        }
    }];

ต่อไปนี้คือตัวอย่างโค้ด AuthV4.Helper สำหรับการลบบัญชีผ่าน Hive SDK API.

การอ้างอิง API: AuthV4.playerDelete

// Requesting Hive SDK account deletion
        AuthV4.Helper.playerDelete(delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) {
    switch(result.code) {
        case ResultAPI.Code.Success:
            // ลบสำเร็จ
            break;
        default:
            // สถานการณ์ข้อยกเว้นอื่น ๆ
            break;
    }
});

เอกสารอ้างอิง API:AuthV4::playerDelete

// Requesting Hive SDK account deletion
AuthV4::Helper::playerDelete([=](ResultAPI const & result, std::shared_ptr playerInfo) {
        switch (result.code) {
            case ResultAPI::Success:
                // 삭제 성공
                break;
            default:
                // 기타 예외 상황
                break;
        }
});

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

// 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

// Requesting Hive SDK account deletion
// Hive SDK 계정 삭제 요청
AuthV4Interface.helper().playerDelete { result, playerInfo in
    switch(result.code) {
    case Success
            case Success:
            // Deletion completed
            break;
    default:
        // Other exceptions
        break;
        }
    }

เอกสารอ้างอิง API: HIVEAuthV4Helper::playerDelete:

// Requesting Hive SDK account deletion
    [[HIVEAuthV4 helper] playerDelete:^HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
        switchresult.code) {
        case Success:
            // Deletion completed
            break;
        default:
            // Other exceptions
            break;
        }
    }];

เมื่อผู้ใช้เห็นหน้าจอชื่อเกม ให้แสดงรายการ 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 فشل حذف الحساب. يرجى إعادة المحاولة في وقت لاحق.