跳轉至

链接 Idp

Note
  • 有關 AuthV4.Helper 的更多描述,請參閱 Authentication 頁面。

登入後,顯示用戶當前使用的 PlayerID 的同步狀態,並提供能夠與其他身份提供者 (IdP) 連結的功能。 在遊戲設置菜單中顯示 IdP 的同步狀態,並配置 UI 以便用戶可以連接和斷開與 IdP 的連接。

檢查 IdP 同步狀態的信息

您可以使用AuthV4类的getPlayerInfo()方法查看与当前登录的PlayerID同步的IdP列表。在游戏设置屏幕中,请确保配置UI以查看哪个IdP已同步,并公开建议IdP同步的短语

在遊戲設置畫面中,應顯示每個用戶的 PlayerID 以及 IdP 同步信息。以 CS 代碼 的格式顯示 PlayerID,並顯示當前登錄用戶的值。

  • 一個範例畫面以確認 IdP 與當前登錄的 PlayerID 同步

  • 帳戶連結的範例畫面

以下是当前应用可以通过 providerTypeListsetup() 返回的 IdP 列表。请检查与 PlayerID 关联的 IdP 列表,并使用给定的示例代码显示关联状态。

API 參考: hive.AuthV4.getPlayerInfo

AuthV4.PlayerInfo playerInfo = AuthV4.getPlayerInfo();    

        foreach (AuthV4.ProviderInfo providerInfo in playerInfo.providerInfoData) {    
            // 同步提供者數據    
    }
#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 參考: 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 參考: 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

語言 片語
韓文 계정 연동을 통해 플레이 데이터를 안전하게 지키세요!
英文 Sync your account to protect your game data!
日文 アカウントを連動してプレイデータを守りましょう!
簡體中文 绑定账号,保护游戏数据安全吧!
繁體中文 綁定帳號,保護帳號資料安全!
法文 Synchronise ton compte afin de protéger tes données de jeu !
德文 Synchronisiere dein Konto, um deine Spieldaten zu schützen!
俄文 Синхронизируйте аккаунт, чтобы обезопасить игровые данные.
西班牙文 ¡Sincronicen su cuenta para proteger sus datos del juego!
葡萄牙文 Sincronize sua conta para proteger seus dados de jogo!
印尼文 Hubungkan akunmu untuk mengamankan data game milikmu!
越南文 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!
泰文 ซิงค์บัญชีเพื่อปกป้องข้อมูลเกมของคุณ!
意大利文 Sincronizza il tuo account per proteggere i tuoi dati di gioco.
土耳其文 Oyun verilerini korumak için hesabınızı senkronize ediniz.
阿拉伯文 زامن حسابك لحماية بيانات اللعبة الخاصة بك!

IdP 同步

目前登錄的 PlayerID 可以與新的 IdP 同步。但是當用戶嘗試與連結到不同 PlayerID 的 IdP 同步時,會發生錯誤。如果同步成功,請檢查同步狀態信息並更新同步信息 UI。

Note

要插入 IdP 图标或徽标,请查看我们针对每个 IdP 的指南。

Warning

從2020年3月起,Apple App Store 警告使用 UIWebView (ITMS-90809),並要求在2020年4月之前刪除與 UIWebView 相關的代碼,這適用於2019年9月之後發布的應用程式和遊戲,因為這是應用程式提交的結果。我們確認從 Hive SDK v4.14.0 添加的 Twitter 框架使用了與 UIWebView 相關的類別,並且每當提交遊戲時,它會持續發出 App Center 警告。為了保護拒絕,Twitter 框架暫時刪除,直到沒有 UIWebView 的新框架可用。簡而言之,遊戲工作室需要對用戶使用 Twitter 登錄並調用相關 API 時,ResultAPI 接收到 NotSupportedProviderType 代碼的情況作出回應

從 Hive SDK v4.14.4 開始,針對早於 2019.3 的 Unity 提供了響應 UIWebView 相關警告的新框架。 如果您的遊戲需要 Unity 2019.3 及以後版本,則無法使用 Twitter 進行身份驗證,因此,請確保遵循以下設置以刪除並防止 Hive SDK 參考與 Twitter 相關的框架。

  • 透過外部依賴設定刪除 Twitter 框架
  • 在 Xcode 專案中刪除 ProviderTwitter.framework
Warning
  • 确保以英语书写Google和Apple产品的名称。
  • 新的身份提供者,Apple应以Sign In with Apple的形式用英语表示,并在韩语中表示为Apple로 로그인。图标上的文本布局应为居中对齐。
  • 有关在身份验证中应用的多语言登录按钮名称,请点击这里


當您想要在 IdP 連接中添加的 IdP 與另一個 PlayerID 相關聯時,這稱為帳戶衝突情況。要解決此衝突情況,請參閱 處理與 IdP 相關的帳戶衝突

要進行 IdP 整合,請使用您想要使用的 ProviderType 作為參數來調用 connect () 方法。以下是實現 IdP 同步的示例代碼。

API 參考: 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 參考: AuthV4::Helper::connect

// Hive SDK AuthV4 請求以與 IdP 同步    
        AuthV4::Helper::connect(ProviderInfo::providerTypeFromString(providerType), [=](ResultAPI const &amp; result, std::shared_ptr playerInfo) {    
                switch (result.code) {    
                case ResultAPI::Success:    
                    // 成功同步 IdP    
                    break;    
                case ResultAPI::AuthV4ConflictPlayer:    
                    // 帳戶衝突    
                    break;    
                default:    
                    // 異常情況    
                    break;    
                }    
    });

API 參考: 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 參考: HIVEAuthV4Helper::connect:handler:

// Hive SDK AuthV4 Request to sync with IdP    
        [[HIVEAuthV4 helper] connect:providerType handler:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {    
            switch(result.code) {    
            case kSuccess:    
                // 成功同步 IdP    
                break;    
            case kAuthV4ConflictPlayer:    
                // 帳戶衝突    
                break;    
            default:    
                // 異常情況    
                break;    
            }    
    }];

處理與 IdP 同步的帳戶衝突

當呼叫 connect() 進行 IdP 整合時,如果用戶嘗試連接的 IdP 帳戶已經與另一個 PlayerID 相關聯,則會發生帳戶衝突。為了進一步解釋,我們假設以下情況。

  • 當前玩家:用戶當前登錄的帳戶的玩家(訪客帳戶或 IdP 帳戶)
  • 衝突玩家:用戶想要鏈接的 IdP 帳戶中已經存在的玩家

當ConflictPlayer的遊戲紀錄存在於遊戲伺服器中

在這種情況下,當發生帳戶衝突時,ConflictPlayer的遊戲資訊會通知用戶,並顯示選擇ConflictPlayer的UI。要使用Hive SDK提供的UI,請配置ConflictPlayer資訊以適應遊戲,並使用ConflictPlayer資訊作為參數調用showConflict()方法。當調用時,您可以切換到ConflictPlayer或選擇取消以繼續與CurrentPlayer進行遊戲。在下面的UI圖像示例中,單擊檢查按鈕會切換到ConflictPlayer,而單擊X按鈕則會繼續與CurrentPlayer進行遊戲。

Note

帳戶選擇 UI 可以是由 Hive SDK 提供的 UI,或可以由遊戲方自定義。要自定義帳戶選擇 UI,請參考 在 IdP 衝突中自定義

當 ConflictPlayer 的遊戲紀錄在遊戲伺服器中不存在時

有時,ConflictPlayer 的玩家識別碼 (PlayerId) 存在,但遊戲伺服器上沒有實際的遊玩記錄。在這種情況下,呼叫 resolveConflict(CB) 以選擇 CurrentPlayer 的 PlayerID 並繼續遊戲。當發生帳戶衝突時,顯示以下 UI。

  • 當 CurrentPlayer 是來賓帳戶而 ConflictPlayer 是 IdP 帳戶時

    • "確認" 按鈕會顯示,當用戶點擊它時,CurrentPlayer 仍然保持登錄!
  • 當 CurrentPlayer 是 IdP 帳戶 1(例如:Facebook)而 ConflictPlayer 是 IdP 帳戶 2(例如:Google Play)

    • 取消:保持登錄當前的 Facebook 帳戶的 CurrentPlayer
    • 確認:切換玩家到 Google Play 帳戶的 ConflictPlayer

當 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)处于暂停状态,而用户尝试使用访客账户(CurrentPlayer)链接到 Facebook IdP,则会出现暂停弹出窗口。关闭弹出窗口将注销 Facebook IdP。

有關帳戶選擇的注意事項

如果用戶選擇了 ConflictPlayer,而 CurrentPlayer 處於訪客狀態,則將不再找到 CurrentPlayer。如果 CurrentPlayer 在訪客狀態下有來自其他遊戲伺服器的數據,那些遊戲數據也將不再被找到。因此,您應該防止用戶在訪客身份下對遊戲伺服器進行更改,以避免此問題。如果用戶在 SDK 提供的帳戶選擇頁面上點擊 X 按鈕,則帳戶同步將被取消。

遊戲數據的組成

ConflictPlayer 數據由兩個基本鍵組成,player_idgame_data

  • player_id: ConflictPlayer 的 PlayerID
  • game_data: 以 Map<String, Object >; 格式整理遊戲數據,例如角色名稱、遊戲金額和等級

以下是組合ConflictPlayer數據的示例代碼。

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

從 Hive SDK 實現帳戶選擇 UI(帶有遊戲數據)

一旦您完成了对 ConflictPlayer 数据的配置,将调用 showConflict() 方法以暴露 SDK 提供的用户界面,并将用户的选择作为结果返回。如果结果成功并且用户选择了 ConflictPlayer,那么您需要重新加载游戏数据。当用户跳过或未能选择帐户时,结果返回失败,在这种情况下,请确保继续进行游戏。然而,如果在切换帐户时未能对设备进行身份验证(AuthV4NotRegisteredDevice),游戏必须返回到初始页面以便重新登录。这会导致对 SDK 的登录被取消,并且 isAutoSignIn 返回 true

以下是實現 Hive SDK 提供的 UI 的示例代碼,通過配置衝突的 PlayerID 的遊戲數據。

API 參考: 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: 實現應用程序的終止。    
            // 例) 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 玩家ID = 12345678;
FHiveConflictSingleViewData 视图数据 = FHiveConflictSingleViewData(玩家ID);
视图数据.SetData(TEXT("金币"), TEXT("2048"));
视图数据.SetData(TEXT("宝石"), TEXT("220"));

FHiveAuthV4::Helper::ShowConflict(ViewData, FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        if (Result.NeedExit()) {
                // TODO: implement the termination of the app.    
      // Example) Application.Quit();
        } else {
                switch (Result.Code) {
                        case FHiveResultAPI::ECode::AuthV4PlayerChange:
                                // 账户切换:需要重新启动游戏
                                break;
                        case FHiveResultAPI::ECode::AuthV4PlayerResolved:
                                // 保持当前用户
                                break;
                        case FHiveResultAPI::ECode::AuthV4NotRegisteredDevice:
                                // 这是由于设备认证失败而取消登录的情况。尝试使用AUTO重新登录,或注销。
                                break;
                        default:
                                // 处理其他异常 
                                break;
                }
        }
}));

API 參考: 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: 實現應用程序的終止。    
                // 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 參考: 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: 实现应用程序的终止。    
                    // 例如) exitProcess(0)    
                } else {    
                    when (result.code) {    
                        ResultAPI.Code.AuthV4PlayerChange ->; {    
                            // 账户切换:需要重新启动游戏    
                        }    
                        ResultAPI.Code.AuthV4CancelDialog ->; {    
                            // 保持当前用户    
                        }    
                        ResultAPI.Code.AuthV4NotRegisteredDevice ->; {    
                            // 这是由于设备认证失败而取消登录的情况。尝试使用 AUTO 重新登录,或注销。    
                        }    
                        else ->; {    
                            // 处理其他异常    
                        }    
                    }    
                }    
            }    
})

API 參考: 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 參考: 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 請求    
    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 參考: HIVEAuthV4Helper ::showConflict:handler:

// 創建衝突帳戶的遊戲信息對象    
    HIVEConflictSingleViewInfo *conflictInfo = [[HIVEConflictSingleViewInfo alloc] initWithPlayerId:12345678];    
    [conflictInfo setValue:@"Gold" intValue:2048];    
    [conflictInfo setValue:@"Gem" intValue:220];    


    // Hive SDK AuthV4:Helper 帳戶選擇 UI 請求    
    [[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;    
                }    
            }    
}];

從 Hive SDK 實現帳戶選擇 UI(無遊戲數據或數據未知)

如果您无法在显示账户选择用户界面时验证游戏数据,或者仅仅通知登录的变更,简化的用户界面适用于这种情况。当用户跳过或未能选择账户时,结果返回失败,在这种情况下,请确保继续游戏。但是,如果在切换账户时未能验证设备(AuthV4NotRegisteredDevice),游戏必须返回到初始页面以便重新登录。这会导致对SDK的登录被取消,并且isAutoSignIn返回true

以下是實現 UI 的示例代碼,該 UI 由 Hive SDK 提供,通過隱藏衝突的 PlayerID 的遊戲數據。

API 參考: hive .AuthV4.Helper.showConflict

// 請求 Hive SDK AuthV4.Helper 帳戶選擇 UI    
    AuthV4.Helper.showConflict ((ResultAPI result, AuthV4.PlayerInfo playerInfo) =>; {    
        if (result. needExit()) {    
            // TODO: 實現應用退出功能    
            // 例如) 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 參考: AuthV4 ::Helper::showConflict

// Hive SDK AuthV4::Helper 帳戶選擇 UI 請求    
    AuthV4::Helper::showConflict([=](ResultAPI const &amp; result, std::shared_ptr playerInfo) {    
        if (result. needExit()) {    
            // TODO: 實現應用退出功能    
            // 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 參考: 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: 實現應用退出功能    
                // ex) exitProcess(0)    
            } else {    
                when (result.code) {    
                    ResultAPI.Code.AuthV4PlayerChange ->; {    
                        // 帳戶切換:需要重新啟動遊戲    
                    }    
                    ResultAPI.Code.AuthV4CancelDialog ->; {    
                        // 保持當前用戶    
                    }    
                    ResultAPI.Code.AuthV4NotRegisteredDevice ->; {    
                        // 這是因為設備身份驗證失敗而取消登錄的情況。請嘗試使用 AUTO 重新登錄或登出。    
                    }    
                    else ->; {    
                        // 處理其他異常    
                    }    
                }    
            }    
        }    
})

API 參考: com .hive.AuthV4.Helper.showConflict

// 請求 Hive SDK AuthV4.Helper 帳戶選擇 UI    
    AuthV4.Helper.showConflict(new AuthV4.Helper.AuthV4HelperListener() {    
        @Override    
        public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) {    
            if (result. needExit()) {    
                // TODO: 實現應用退出功能    
                // ex) System.exit(0);    
            } else {    
                switch(result.code) {    
                    case AuthV4PlayerChange:    
                        // 帳戶切換:需要重新啟動遊戲    
                        break;    
                    case AuthV4CancelDialog:    
                        // 保持當前用戶    
                        break;    
                    case AuthV4NotRegisteredDevice:    
                        // 這是因為設備身份驗證失敗而取消登錄的情況。請嘗試使用 AUTO 重新登錄或登出。    
                        break;    
                    default:    
                        // 處理其他異常    
                        break;    
                }    
            }    
        }    
});

API 參考: HIVEAuthV4Helper::showConflict:

// Hive SDK AuthV4:Helper account selection UI request    
    AuthV4Interface.helper().showConflict() { (result, playerInfo) in    

        如果 result.needExit() {    
            // TODO: 实现应用程序退出功能    
            // 例如) exit(0)    
        } else {    
            switch result.getCode() {    
            case .authV4PlayerChange:    
                // 账户切换:需要重新启动游戏    
            case .authV4CancelDialog:    
                // 保持当前用户    
            case .authV4NotRegisteredDevice:    
                // 这是由于设备认证失败而取消登录的情况。尝试使用 AUTO 重新登录或注销。    
            default:    
                // 处理其他异常    
                break    
            }    
        }    
}

API 參考: HIVEAuthV4Helper ::showConflict:

// Hive SDK AuthV4:Helper account selection UI request    
    [[HIVEAuthV4 helper] showConflict:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {    

        if (result. needExit) {    
            // TODO: 實現應用程式退出功能    
            // ex) exit(0);    
        } else {    
            switch(result.code) {    
                case kAuthV4PlayerChange:    
                    // 帳號切換:需要重新啟動遊戲    
                    break;    
                case kAuthV4CancelDialog:    
                    // 保持當前用戶    
                    break;    
                case kAuthV4NotRegisteredDevice:    
                    // 這是因為設備驗證失敗而取消登錄的情況。請嘗試使用自動登錄或登出後重新登錄。    
                    break;    
                default:    
                    // 處理其他異常    
                    break;    
            }    
        }    
}];

在 IdP 衝突的情況下的自定義

如果在 IdP 同步過程中發生 IdP 衝突,您可以使用返回的衝突 PlayerID 配置遊戲數據,並直接在遊戲中實現帳戶選擇 UI。如果用戶在選擇 UI 上選擇了一個帳戶,請使用所選帳戶的 PlayerID 作為參數實現 selectConflict() 方法。

在以下描述中,当前登录的帐户称为 CurrentPlayer,而发生冲突的帐户称为 ConflictPlayer。在自定义帐户选择 UI 时,有必要检查用户选择的操作差异,并在 UI 配置中通知适当的预防措施。 当 IdP 冲突时,可能会根据用户选择发生以下问题。

  • 選擇 ConfilctPlayer: selectConflict(ConfilctPlayer, CB) 被調用。
    • 如果 CurrentPlayer 是來賓,則 CurrentPlayer 無法搜尋。
  • 選擇 CurrentPlayer: selectConflict(CurrentPlayer, CB) 被調用。
    • CurrentPlayer 與 IdP 同步,因此 ConfilctPlayer 失去同步。
    • 如果 ConflictPlayer 與其他 IdP 失去同步,所謂的來賓狀態,可能會導致 ConflictPlayer 無法搜尋。
  • 如果取消(用戶只是關閉選擇頁面): resolveConflict(CB) 被調用。
    • 繼續與 CurrentPlayer 玩遊戲,而不改變 IdP 同步。

在配置帳戶選擇 UI 時,您需要配置適當的警告聲明,因為在某些情況下,未選擇的數據可能無法在訪客狀態中找到。此外,如果您希望在帳戶衝突的情況下配置不更改 IdP 相關信息,請務必選擇 ConflictPlayer 的遊戲數據或設計可用於取消帳戶選擇的 UI。

一旦用户在账户选择 UI 上选择了一个账户,请实现 selectConflict() 方法,并将所选账户的 PlayerID 作为参数。如果用户取消账户选择,请确保继续游戏而不调用任何 API。在玩家选择 ConflictPlayer 并收到成功回调后,请确保再次加载游戏数据。

以下是由於帳戶衝突而選擇帳戶的示例代碼。

API 參考: 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: 實現應用退出功能    
                // 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: 實現應用退出功能    
                    // ex) exitProcess(0)
        }
}));

API 參考: 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: 實現應用退出功能    
                    // ex) exitProcess(0)    
                }    
            }    
})

API 參考: 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: 實現應用退出功能    
                    // ex) System.exit(0);    
                }    
            }    
});

API 參考: HIVEAuthV4:selectConflict

let selectedPlayerId: Int64 = 1234567890;    

    // Hive SDK AuthV4 帳戶衝突選擇請求    
    AuthV4Interface.selectConflict(selectedPlayerId) { (result, playerInfo) in    
            if result. isSuccess() {    
                // 帳戶選擇成功    
            }    
            else if result. needExit() {    
                // TODO: 實現應用退出功能    
                // ex) exit(0)    
            }    
}

API 參考: 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: 實現應用退出功能    
                // ex) exit(0);    
            }    
}];

斷開與 IdP 帳戶的連接

您可以允許用戶在 IdP 帳戶列表 UI 上解除已連結的 IdP 帳戶。如果用戶在 IdP 帳戶列表 UI 上解除特定的 IdP 帳戶,遊戲工作室將調用 disconnect() 方法,並傳遞 ProviderType 參數,這是特定類型的 IdP,以斷開與 IdP 帳戶的連接。在調用 disconnect() 方法後,您需要檢查用戶的連接狀態,然後在 UI 上更新同步的 IdP 列表。

Note

Windows 環境不支持訪客登錄,與移動設備不同。因此,如果您嘗試在僅同步一個 IdP 時調用 Disconnect API,AuthV4LastProviderCantDisconnect 將作為結果 API 代碼返回,並且同步狀態將保持不變。

API 參考: 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 參考: 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:    
        // Provider disconnection successful    
        break;    
        default:    
        // other exception situations    
        break;    
    }    
});

API 參考: 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 參考: 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:    
                 // Provider disconnection successful    
                 break;    
             default:    
                 // other exception situations    
                 break;    
         }    
});

API 參考: .disconnect

import HIVEService    
    AuthV4Interface.helper().disconnect(.Hive) { result, playerInfo in    
        switch result.getCode() {    
            case.success:    
            // 提供者斷開連接成功    
            default:    
            // 其他異常情況    
            break    
        }    
}

API 參考: 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,請使用以下短語彈出有關訪客用戶的指導,以便該用戶可以重新考慮解除連結。請注意,即使其相應的 IdP 被解除連結,PlayerID 也不會登出。

  • 如果您想解除最後一個 IdP 帳戶的連結
語言 短語
韓文 最後一個帳號的關聯解除後,將轉換為訪客狀態。轉為訪客狀態後,重置設備或重新安裝遊戲時,遊戲數據將被刪除。您確定要繼續解除帳號關聯嗎?
英文 如果您解除最後一個帳號的同步,您將轉換為訪客帳號。一旦您成為訪客,當您重置設備或重新安裝遊戲時,您的遊戲數據將被刪除。您確定要繼續解除帳號同步嗎?
日文 最後のアカウントの連動を解除すると、ゲストアカウントに切り替わります。ゲストアカウントに切り替わると、端末初期化またはゲームの再インストール時にゲームデータが削除されます。 アカウントの連動を解除しますか?
簡體中文 解除最后一个账号关联时,将转换为游客状态。转换为游客状态后,重置设备或重装游戏时,游戏数据将被删除。确定要继续解除关联吗?
繁體中文 解除最後一個綁定的帳號時,將會切換為訪客帳號。使用訪客帳號時,若重置裝置或重新安裝遊戲,將會刪除遊戲數據。 確定要繼續解除帳號綁定?
法文 Si vous dissociez le dernier compte, votre compte sera converti en ""invité"". Si vous devenez ""invité"", votre historique de jeu sera supprimé lors de toute réinitialisation de votre appareil ou suppression du jeu. Êtes-vous sûr de vouloir procéder à la dissociation du compte ?
德文 Wenn du die Synchronisation des letzten Kontos aufhebst, wird dein Konto in ein Gastkonto umgewandelt. Sobald du ein Gast bist, werden deine Spieldaten gelöscht, wenn du dein Gerät zurücksetzt oder das Spiel neu installierst. Bist du sicher, dass du die Synchronisation des Kontos aufheben möchtest?
俄文 Если Вы отключите синхронизацию с последним аккаунтом, Ваша игровая учетная запись будет преобразована в гостевую. Если Вы используете гостевой аккаунт, Ваши игровые данные будут удалены при сбросе настроек устройства или переустановке игры. Вы действительно хотите отключить синхронизацию?
西班牙文 Si desvinculas la última cuenta, tu cuenta se convertirá en invitado. Si te conviertes en invitado, los datos del juego se eliminará cada vez que reinicies tu dispositivo o elimines el juego. ¿Estás seguro de que deseas desvincular la cuenta?
葡萄牙文 Se você dessincronizar a sua última conta, você será transferido para uma conta de convidado. Ao se tornar um convidado, os dados do seu jogo serão excluídos quando você resetar o aparelho ou reinstalar o jogo. Tem certeza de que deseja cancelar a sincronização da conta?
印尼文 Jika kamu batal sinkronisasi akun terakhir, akunn kamu akan diganti menjadi akun guest. Ketika kamu menjadi guest, data permainanmu akan dihapus ketika kamu mereset perangkat atau menginstall ulang game. Apakah kamu yakin mau membatalkan sinkronisasi akun?
越南文 Nếu bạn hủy đồng bộ tài khoản cuối cùng, bạn sẽ được chuyển sang tài khoản Khách. Khi bạn trở thành Khách, dữ liệu chơi game của bạn sẽ bị xóa khi bạn reset thiết bị hoặc cài đặt lại game. Bạn có chắc chắn muốn tiếp tục hủy đồng bộ tài khoản?
泰文 หากคุณยกเลิกการซิงค์บัญชีล่าสุด บัญชีของคุณจะย้อนกลับไปเป็นบัญชี Guest หากบัญชีคุณกลายเป็นบัญชี Guest ข้อมูลเกมของคุณจะถูกลบเมื่อคุณรีเซ็ตอุปกรณ์เล่นเกมหรือติดตั้งเกมใหม่อีกครั้ง ดำเนินการต่อโดยไม่ซิงค์บัญชีหรือไม่?
意大利文 Annullando la sincronizzazione dell'ultimo account, verrai trasferito/a a un account ospite. Una volta trasferito/a a un account ospite, i tuoi dati di gioco verranno eliminati in caso di ripristino di dispositivo o di reinstallazione del gioco. Sei sicuro/a di voler procedere con l'annullamento della sincronizzazione dell'account?
土耳其文 Son hesap senkronizasyonunu kaldırırsanız, misafir hesabına geçersiniz. Hesabınız misafire dönüştürüldüğünde, cihazı sıfırladığınızda veya oyunu yeniden yüklediğinizde oyun verileriniz silinir. Hesap senkronizasyonunu kaldırma işlemine devam etmek istediğinizden emin misiniz?
阿拉伯文 إذا ألغيت مزامنة الحساب الأخير ، فسيتم نقلك إلى حساب ضيف. وبمجرد أن تصبح ضيفًا ، سيتم حذف بيانات اللعبة عند إعادة ضبط الجهاز أو إعادة تثبيت اللعبة. هل أنت متأكد أنك تريد متابعة حساب غير متزامن؟

如果用户选择取消链接账户,即使上面的短语被公开,调用 disconnect()。当用户账户变为访客账户时,以下短语可以被公开。

  • 如果用戶帳戶在與最後一個連結的身份提供者斷開連接後變為訪客帳戶
語言 短語
韓文 게스트 상태로 전환되었습니다. 계정 연동을 하시면 게임 데이터를 안전하게 지킬 수 있습니다.
英文 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 的連結,您可以使用以下短語實施通知來限制此操作。請注意,即使其對應的 IdP 被解除連結,PlayerID 也不會登出。

  • 如果您想解除最後一個 IdP 帳戶的連結
語言 短語
韓文 最少需要保持1個帳號連結。
英文 你必須保持至少1個帳號同步。
日文 少なくとも1つのアカウントを連動しなければなりません。
簡體中文 需要綁定至少1個帳號。
繁體中文 至少要有1個帳號是綁定的!
法文 Tu dois garder au moins l'un de tes comptes synchronisés.
德文 Du musst mindestens 1 deiner Konten synchronisieren.
俄文 Хотя бы 1 из аккаунтов должен быть синхронизирован.
西班牙文 Debe de mantener al menos 1 de sus cuentas sincronizada.
葡萄牙文 É necessário sincronizar pelo menos 1 das suas contas.
印尼文 Kamu harus punya paling tidak satu akun yang terhubung.
越南文 Bạn cần phải duy trì ít nhất 1 liên kết tài khoản.
泰文 ต้องซิงค์บัญชีอย่างหน่อย 1 บัญชี
意大利文 Devi mantenere almeno 1 dei tuoi account sincronizzato.
土耳其文 En az 1 hesabınızı senkronize etmeniz gerekmektedir.
阿拉伯文 يجب أن تحتفظ على الأقل بحساب واحد متزامن من بين حساباتك.

自訂 IdP 同步

自訂 IdP 同步是一個自訂功能,允許遊戲實現自訂的 IdP,遠離 Hive SDK 提供的 IdP。 在調用自訂登錄 API 後,您可以通過訪問作為回調結果傳遞的 PlayerInfo 類實例中的 customProviderInfoData 數據來檢查自訂 IdP 的登錄用戶信息。customProviderInfoData 的 ProviderType(枚舉)設置為 CUSTOM,並可以通過 ProviderName(字符串)進行區分。

以下是實現自定義 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:
                    // 同步成功
                    break;
                case ResultAPI.Code.AuthV4ConflictPlayer:
                    // 帳戶衝突
                    Dictionary&lt;string, ProviderInfo>; customProviderInfoData = playerInfo.customProviderInfoData;
                    ProviderInfo providerInfo = customProviderInfoData["CUSTOM_TWITTER"];
                    // 檢查以下用戶的同步信息
                    providerInfo.providerType;     // ProviderType.CUSTOM,providerType 固定為 ProviderType.CUSTOM。要區分,使用 providerName。
                    providerInfo.providerName;   // "CUSTOM_TWITTER"
                    providerInfo.providerUserId;  // Twitter 登錄的用戶 ID,由遊戲本身實現。
                    break;
                default:
                    // 其他異常
                    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 登錄的用戶 ID,由遊戲本身實現。
                                }
                        }
                                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:
                    // 同步成功
                    break;
                    case ResultAPI::AuthV4ConflictPlayer:
                    // 帐户冲突
                    map&lt;string, ProviderInfo>; customProviderInfoData = playerInfo.customProviderInfoData;
                    ProviderInfo providerInfo = customProviderInfoData["CUSTOM_TWITTER"];
                    // 检查以下用户的同步信息
                    providerInfo.providerType;     // ProviderType::CUSTOM,providerType 固定为 ProviderType::CUSTOM。要区分,请使用 providerName。
                    providerInfo.providerName;   // "CUSTOM_TWITTER"
                    providerInfo.providerUserId;  // Twitter 登录的用户 ID,由游戏本身实现。
                    break;
                    default:
                    // 其他异常
                    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 ->; {
                            // 同步成功
                        }
                        case ResultAPI.Code.AuthV4ConflictPlayer ->; {
                            // 帳戶衝突
                            playerInfo.customProviderInfoData["CUSTOM_TWITTER"]?.let { providerInfo ->;
                            providerInfo.providerType     // ProviderType.CUSTOM,providerType 固定為 ProviderType.CUSTOM。要區分,使用 providerName。
                            providerInfo.providerName   // "CUSTOM_TWITTER"
                            providerInfo.providerUserId  // Twitter 登錄的用戶 ID,由遊戲本身實現。
                        }
                        else ->; {
                            // 其他異常
                        }
                    }
                }
            }
        }
// 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:
                                // 同步成功
                                break;
                            case ResultAPI.Code.AuthV4ConflictPlayer:
                                // 帳戶衝突
                                ProviderInfo providerInfo = conflictPlayer.getCustomProviderInfoData().get("CUSTOM_TWITTER");
                                providerInfo.getProviderType();     // ProviderType.CUSTOM,providerType 固定為 ProviderType.CUSTOM。要區分,使用 providerName。
                                providerInfo.getProviderName();   // "CUSTOM_TWITTER"
                                providerInfo.getProviderUserId();  // Twitter 登入的用戶 ID,由遊戲本身實現。
                                break;
                            default:
                                // 其他異常
                                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:
                        // 同步成功
                        break
                    case .authV4ConflictPlayer:
                        // 帳號衝突
                    guard let customProviderInfoData = playerInfo?.customProviderInfoData,
                            let providerInfo = customProviderInfoData["CUSTOM_TWITTER"] else {
                        // 用戶沒有同步信息,失敗處理
                        return
                    }

                    // 檢查以下用戶的同步信息
                    providerInfo.providerType     // HIVEProviderTypeCustom,providerType 固定為 HIVEProviderTypeCustom。要區分,使用 providerName。
                    providerInfo.providerName   // "CUSTOM_TWITTER"
                    providerInfo.providerUserID  // Twitter 登錄的用戶 ID,由遊戲本身實現。
                        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:
                        // 同步成功
                        break;
                    case kAuthV4ConflictPlayer:
                        // 帐户冲突
                        NSDictionary&lt;NSString*, HIVEProviderInfo*>;* customProviderInfoData = playerInfo.customProviderInfoData;
                        ProviderInfo* providerInfo = [customProviderInfoData objectForKey:@"CUSTOM_TWITTER"];
                        // 检查以下用户的同步信息
                        providerInfo.providerType;  
    providerInfo.providerType     // HIVEProviderTypeCustom,providerType 固定为 HIVEProviderTypeCustom。要区分,请使用 providerName。
                        providerInfo.providerName;   // "CUSTOM_TWITTER"
                        providerInfo.providerUserId;  // Twitter 登录的用户 ID,由游戏本身实现。
                        break;
                    default:
                        // 其他异常
                        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) {

            when(result.code) {
            Success -> {
                // 提供者斷開連接成功
            }
            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;
        }
    }
});
let customProviderName = "CUSTOM_TWITTER"

AuthV4Interface.disconnectWithName(customProviderName) { result  in
        switch(result.getCode()){
        case .success:
            // Provider disconnection success
        break
        default:
            // Other exceptions
        break
        }
    }
NSString* customProviderName = @"CUSTOM_TWITTER";

[HIVEAuthV4 disconnectWithName:customProviderName handler:^(HIVEResultAPI *result) {
    switch(result.code) {
    case kSuccess:
        // Provider disconnection success
        break;
    default:
        // Other exceptions
        break;
    }
}];

刪除 IdP 和訪客帳戶

您需要配置用户界面,以便用户可以在游戏中删除他们的帐户。

  • UI範例
Warning

從2022年6月30日起,提交到App Store的應用程式如果支持帳戶創建,必須讓用戶在應用程式內啟動刪除其帳戶。如果您正在更新應用程式或提交一個新的支持帳戶創建的應用程式,則必須實施帳戶刪除API,以防止審核延遲。請參閱Apple政策指導以獲取有關從App Store刪除應用程式的更多信息。

在遊戲中配置並顯示彈出窗口,以確認用戶是否繼續刪除帳戶。您可以查看下面的彈出窗口的短語

如果確認了帳戶刪除的請求,您可以使用 Hive SDK API Hive 伺服器 API 刪除此身份驗證 v4 帳戶。

  • 刪除帳戶的步驟

* **使用 Hive 伺服器 API 刪除時**: <br>
一旦帳戶在遊戲客戶端被刪除,遊戲伺服器應該調用 Hive 伺服器 API [刪除身份驗證 v4 帳戶](../../api/hive-server-api/auth/authv4-account-deletion.md) 將刪除的帳戶信息發送到身份驗證伺服器。身份驗證伺服器接收此信息並刪除該帳戶。刪除後,身份驗證伺服器將帳戶刪除的結果發送到遊戲伺服器,然後遊戲伺服器將此結果傳遞給遊戲客戶端。一旦遊戲客戶端收到帳戶刪除的結果,應提供彈出窗口以通知帳戶已被刪除。在遊戲客戶端(Hive SDK)中,無論帳戶是<u>**基於 IdP 還是訪客帳戶**</u>,在帳戶被刪除後都應調用 `signOut()`。

* **使用 Hive SDK API 刪除時**: <br>
一旦遊戲客戶端上刪除了玩家的帳戶,遊戲伺服器應該調用 `playerDelete()
` 將刪除的帳戶信息發送到身份驗證伺服器。如果您收到了來自身份驗證伺服器的帳戶刪除回調結果,您應該提供彈出窗口,通知遊戲端帳戶已被刪除。

以下是使用Hive SDK API刪除帳戶的AuthV4範例代碼。

API 參考: AuthV4.playerDelete

// Requesting Hive SDK account deletion
        AuthV4.playerDeletedelegate (ResultAPI result) {
            switchresult.code) {
                case ResultAPI.Code.Success:
                    // Deletion completed
                    break;
                default:
                    // Other exceptions
                    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 參考: AuthV4.playerDelete

// 請求 Hive SDK 帳戶刪除
    AuthV4.playerDeleteobject : AuthV4.AuthV4SignOutListener {
        override fun onAuthV4SignOutresult: ResultAPI) {
            whenresult.code) {
                ResultAPI.Code.Success ->; {
                    // 刪除完成
                }
                else ->; {
                    // 其他異常
                }
            }
        }
    })

API 參考: AuthV4.INSTANCE.playerDelete

// Requesting Hive SDK account deletion
    AuthV4.INSTANCE.playerDeletenew AuthV4.AuthV4SignOutListener) {
        @Override
        public void onAuthV4SignOutResultAPI result) {
            switchresult.code) {
                case Success:
                    // Deletion completed
                    break;
                default:
                    // Other exceptions
                    break;
            }
        }
    });
// 請求 Hive SDK 帳戶刪除
    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;
        }
    }];

以下是使用 Hive SDK API 刪除帳戶的 AuthV4.Helper 示例代碼。

API 參考: AuthV4.playerDelete

// 请求 Hive SDK 账户删除
        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 参考: 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 參考: 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 參考: AuthV4Interface.helper().playerDelete

// 請求 Hive SDK 帳戶刪除
// Hive SDK 账户删除请求
AuthV4Interface.helper().playerDelete { result, playerInfo in
    switch(result.code) {
    case Success
            case Success:
            // 刪除完成
            break;
    default:
        // 其他例外
        break;
        }
    }

API 參考: HIVEAuthV4Helper::playerDelete:

// 請求 Hive SDK 帳戶刪除
    [[HIVEAuthV4 helper] playerDelete:^HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {
        switchresult.code) {
        case Success:
            // 刪除完成
            break;
        default:
            // 其他異常
            break;
        }
    }];

當用戶看到遊戲標題畫面時,顯示 IdP 列表以讓該用戶登錄(如果您不使用 Hive 平台提供的登錄 UI,請顯示您遊戲特定的登錄 UI)。

確認帳戶刪除的彈出消息

當用戶進行刪除帳戶時出現的帳戶刪除確認彈出窗口的文本如下。

語言 Android iOS
韓文 刪除帳號時,綁定的數據將被刪除。 刪除部分遊戲數據最多需要90天的時間。 * 付費相關諮詢請聯繫[Company Name]客服中心。 刪除帳號時,綁定的數據將被刪除。 刪除部分遊戲數據最多需要90天的時間。 * 付費相關諮詢請聯繫應用商店或[Company Name]客服中心。
英文 刪除帳號時,綁定的數據將被刪除。 刪除部分遊戲數據最多需要90天的時間。 * 請聯繫[Company Name]客服支持以獲取有關付款的查詢。 刪除帳號時,綁定的數據將被刪除。 刪除部分遊戲數據最多需要90天的時間。 * 請聯繫應用商店或[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天的時間。 * 如有任何與付款相關的疑問,請聯繫[公司名稱]的客戶支持中心。 如果您刪除帳戶,連接的數據將被刪除。某些遊戲數據的刪除可能需要最多90天的時間。 * 如有任何與付款相關的疑問,請聯繫[公司名稱]或App Store的客戶支持中心。
意大利文 Eliminando l'account, verranno eliminati anche i dati associati. L'eliminazione di alcuni dati di gioco può richiedere fino a 90 giorni. * Si prega di contattare l'assistenza clienti [Company Name] per richieste relative al pagamento. "Eliminando l'account, verranno eliminati anche i dati associati. L'eliminazione di alcuni dati di gioco può richiedere fino a 90 giorni. * Si prega di contattare l'App Store o l'assistenza clienti [Company Name] per richieste relative al pagamento.
土耳其文 Hesabı sildiğinizde bağlantılı veriler silinecektir. Bazı oyun verilerinin silinmesi 90 gün kadar sürebilir. * Ödemeyle ilgili sorularınız için lütfen [Company Name] Müşteri Desteği ile iletişime geçin. Hesabı sildiğinizde bağlantılı veriler silinecektir. Bazı oyun verilerinin silinmesi 90 gün kadar sürebilir. * Ödemeyle ilgili sorularınız için lütfen App Store ya da [Company Name] Müşteri Desteği ile iletişime geçin.
阿拉伯文 سيتم حذف البيانات المرتبطة عند حذف الحساب. قد يستغرق حذف بعض بيانات اللعبة ما يصل إلى٩٠ يومًا. * يرجى الاتصال بمركز دعم عملاء [Company Name] لأي استفسارات متعلقة بالدفع. سيتم حذف البيانات المرتبطة عند حذف الحساب. قد يستغرق حذف بعض بيانات اللعبة ما يصل إلى ٩٠ يومًا. * يرجى الاتصال بمتجر التطبيقات أو مركز دعم عملاء [Company Name] لأي استفسارات متعلقة بالدفع.
Note

在文本中输入您游戏公司客户服务中心的名称,[公司名称]

提供訂閱的遊戲需要在確認帳戶刪除的彈出消息中添加以下短語:“即使您刪除帳戶,自動訂閱仍會被收費,您需要手動取消訂閱。”(以及以下表格中其他語言的短語)

韓文 即使刪除帳號,自動訂閱商品仍會繼續扣款,需親自解除訂閱。
英文 Automatic subscriptions will still be charged even if you delete your account, and you need to unsubscribe manually.
日文 アカウントを削除しても定期購入商品は解約されず料金が請求されますので、手動で解約してください。
簡體中文 即使删除账号,自动订阅商品也会按期收取费用,因此必须手动解除订阅。
繁體中文 即使刪除帳號,自動訂閱商品仍會繼續扣款,需親自解除訂閱。
德文 Automatische Abonnements werden auch dann noch berechnet, wenn du dein Konto gelöscht hast. Du musst dich manuell abmelden.
法文 Les abonnements automatiques seront toujours facturés même si vous supprimez votre compte, vous devrez donc vous désabonner vous-même.
俄文 Автоматическая подписка будет по-прежнему взимать плату даже при удалении аккаунта, поэтому Вам необходимо отменить подписку отдельно.
西班牙文 Las suscripciones automáticas aún se cobrarán incluso si elimina su cuenta, y debe darlas de baja manualmente.
葡萄牙文 As assinaturas automáticas ainda serão cobradas mesmo se você excluir sua conta, sendo necessário que você as cancele manualmente.
印尼文 Berlangganan otomatis akan tetap dikenakan biaya meskipun kamu menghapus akun, kamu harus membatalkan berlangganan secara manual.
泰文 การสมัครแพ็กเกจต่าง ๆ โดยอัตโนมัติจะยังมีผลอยู่แม้ว่าคุณลบบัญชีไปแล้ว และคุณต้องยกเลิกการสมัครแพ็กเกจเหล่านั้นด้วยตัวเอง
越南文 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ý.
意大利文 Gli abbonamenti automatici verranno comunque addebitati anche dopo aver eliminato l'account, quindi bisogna annullare le rispettive iscrizioni separatamente.
土耳其文 Hesabınızı silseniz bile otomatik abonelikler ücretlendirilecektir ve manuel olarak abonelikten çıkmanız gerekir.
阿拉伯文 سيستمر فرض رسوم على الاشتراكات التلقائية حتى إذا قمت بحذف حسابك ، وتحتاج إلى إلغاء الاشتراك يدويًا.

完成帳戶刪除時的彈出消息

語言 短語
韓文 계정 삭제가 완료되었습니다.
英文 The account has been deleted.
日文 アカウント削除が完了しました。
簡體中文 已删除账号。
繁體中文 已成功刪除帳號。
德文 Das Konto wurde gelöscht.
法文 La suppression du compte a été effectuée
俄文 Аккаунт удален.
西班牙文 La cuenta se ha suprimido.
葡萄牙文 A conta foi excluída.
印尼文 Akun telah dihapus.
泰文 บัญชีถูกลบแล้ว
越南文 Đã hoàn thành xóa tài khoản.
意大利文 L'account è stato cancellato.
土耳其文 Hesap silme tamamlandı.
阿拉伯文 تم حذف حسابك بنجاح.

帳戶刪除失敗時的彈出消息

語言 短語
韓文 계정 삭제가 실패되었습니다. 잠시 후 다시 진행해 주세요.
英文 Failed to delete the account. Please try again later.
日文 アカウント削除に失敗しました。しばらくしてからもう一度お試しください。
簡體中文 账号删除失败。请稍后再试。
繁體中文 帳號刪除失敗,請稍後再試。
德文 Das Konto konnte nicht gelöscht werden. Bitte versuche es später erneut.
法文 La suppression du compte a échoué. Veuillez réessayer dans quelques instants.
俄文 Не удалось удалить аккаунт. Пожалуйста, попробуйте позже.
西班牙文 Hubo un error al eliminar la cuenta. Por favor, inténtelo de nuevo más tarde.
葡萄牙文 Falha ao excluir a conta. Por favor, tente novamente mais tarde.
印尼文 Gagal menghapus akun. Silakan coba lagi nanti.
泰文 การลบบัญชีล้มเหลว กรุณาลองใหม่ภายหลัง
越南文 Xóa tài khoản thất bại. Vui lòng thử lại sau.
意大利文 Eliminazione dell'account fallito. Riprova più tardi.
土耳其文 Hesap silme başarısız. Daha sonra tekrar deneyiniz.
阿拉伯文 فشل حذف الحساب. يرجى إعادة المحاولة في وقت لاحق.