伺服器維護
在提供應用服務時,可能會因為定期或緊急的伺服器維護而需要顯示伺服器維護彈出窗口,並終止應用或將用戶重定向到其他網站。這樣,Hive SDK 提供了一個可以應對伺服器維護情況的通知彈出窗口。
彈出窗口 | 描述 |
---|---|
伺服器維護 | 您可以為每個遊戲伺服器設置維護狀態,並建議在維護期間提供與遊戲相關的鏈接 |
曝露方法¶
- 在Hive 控制台中注册所需的服务器维护通知弹出窗口。
- 在Hive控制台应用中心中注册要维护的服务器ID。
- 调用Configuration.setServerId来输入要维护的服务器信息。
- 在服务器维护时调用
AuthV4.checkMaintenance
,访问相应服务器时将显示注册的弹出窗口。
進行伺服器維護的時間點意味著阻止用戶應用伺服器的訪問,並登出已經連接到伺服器的用戶。 您可以在 Hive 控制台中註冊彈出窗口時設置所需的伺服器維護時區。
Note
成功初始化Hive SDK後,您必須調用AuthV4.checkMaintenance
。
Info
建議始終在應用程式中運行 AuthV4.checkMaintenance
。這樣可以輕鬆顯示定期的伺服器維護彈出窗口,例如定期的伺服器檢查。
調用AuthV4.checkMaintenance
的示例如下。
API 參考: Unity®
using hive;
// 是否使用 Hive SDK UI
Boolean isShow = true;
AuthV4.checkMaintenance(isShow, (ResultAPI result, List maintenanceInfoList) => {
if (isShow) {
if (result.isSuccess()) {
// 沒有需要檢查的內容
} else if (result.needExit()) {
// TODO: 實現應用程式終止功能
// 例) Application.Quit();
} else {
// 網路錯誤或其他。請再試一次。
}
} else { // isShow 為 false
if (result.isSuccess()) {
if (maintenanceInfoList.Any()) {
// TODO: 顯示自訂的維護對話框。
} else {
// 沒有需要檢查的內容
}
} else {
// 網路錯誤或其他。請再試一次。
}
}
});
API 參考: C++
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// 是否使用 Hive SDK UI
bool isShow = true;
AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result, vector const & maintenanceInfolist){
if (isShow) {
if (result.isSuccess()) {
// 沒有需要檢查的項目
} else if (reuslt.needExit()) {
// TODO: 實現應用程序終止功能
// Cocos2d-x 引擎用戶
// 例) exit(0);
// Unreal Engine 用戶
// 例) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// 網絡錯誤或其他。請再試一次。
}
} else { // isShow 為假
if (result.isSuccess()) {
if (maintenanceInfolist.size() > 0) {
// TODO: 顯示自定義維護對話框。
} else {
// 沒有需要檢查的項目
}
} else {
// 網絡錯誤或其他。請再試一次。
}
}
});
API 參考: Kotlin
import com.hive.AuthV4;
import com.hive.AuthV4;
import com.hive.ResultAPI;
// Hive SDK UI 使用與否
val isShow = true
AuthV4.checkMaintenance(isShow, object : AuthV4.AuthV4MaintenanceListener {
override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList<AuthV4.AuthV4MaintenanceInfo>?) {
if (isShow) {
if (result.isSuccess) {
// There's nothing to check
} else if (result.needExit()) {
// TODO: Implement app termination functionality
// Example) exitProcess(0)
} else {
// Network error or other. try again.
}
} else { // isShow false
if (result.isSuccess) {
if (maintenanceInfo != null && maintenanceInfo.size > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}
}
})
API 參考: Java
import com.hive.AuthV4;
import com.hive.ResultAPI;
// 是否使用 Hive SDK UI
boolean isShow = true;
AuthV4.checkMaintenance(isShow, (result, maintenanceInfo) -> {
if (isShow) {
if (result.isSuccess()) {
// There's nothing to check
} else if (result.needExit()) {
// TODO: Implement app termination functionality
// Example) System.exit(0);
} else {
// Network error or other. try again.
}
} else { // isShow false
if (result.isSuccess()) {
if (maintenanceInfo != null && maintenanceInfo.size() > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}
});
API 參考: Swift
import HIVEService
// 是否使用 Hive SDK UI
let isShow = true
AuthV4Interface.checkMaintenance(isShow) { result, maintenances in
if isShow {
if result.isSuccess() {
// 沒有需要檢查的內容
} else if result.needExit() {
// TODO: 實現應用程式終止功能
// 例) exit(0)
} else {
// 網路錯誤或其他。請再試一次。
}
} else { // isShow false
if result.isSuccess() {
if (maintenances.count > 0) {
// TODO: 顯示自訂的維護對話框。
} else {
// 沒有需要檢查的內容
}
} else {
// 網路錯誤或其他。請再試一次。
}
}
}
API 參考: Objective-C
#import <HIVEService/HIVEService-Swift.h>
// 是否使用 Hive SDK UI
BOOL isShow = YES;
[HIVEAuthV4 checkMaintenance:isShow handler: ^(HIVEResultAPI *result, NSArray<HIVEAuthV4MaintenanceInfo *> *maintenanceInfolist) {
if (isShow) {
if (result.isSuccess) {
// There's nothing to check
} else if (result.needExit) {
// TODO: Implement app termination functionality
// Example) exit(0);
} else {
// Network error or other. try again.
}
} else { // isShow false
if (result.isSuccess) {
if (maintenanceInfolist.count > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}
}];
#include "HiveAuthV4.h"
// Hive SDK UI 使用
bool bIsShow = true;
FHiveAuthV4::CheckMaintenance(bIsShow, FHiveAuthV4OnMaintenanceInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveAuthV4MaintenanceInfo>& AuthV4MaintenanceInfoArray) {
if (bIsShow) {
if (Result.IsSuccess()) {
// There's nothing to check
} else if (Result.NeedExit()) {
// TODO: Implement app termination functionality
// Example) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// Network error or other. try again.
}
} else { // isShow false
if (Result.IsSuccess()) {
if (AuthV4MaintenanceInfoArray.Num() > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}
}));
伺服器維護彈出式 UI 可以使用 Hive SDK 的預設 UI 或自訂 UI,如果 isShow
為 true
,則使用預設 UI。如果使用自訂 UI,isShow
必須為 false
。
Configuration.setserverid¶
在顯示伺服器維護彈出窗口之前,開發人員必須選擇要檢查的伺服器。 Hive 控制台允許您為每個應用伺服器以不同的方式註冊伺服器維護彈出窗口,並且您可以為每個伺服器顯示不同的伺服器維護彈出窗口。
如果您在控制台中为每个服务器注册了不同的维护弹出窗口,SDK 将通过调用 Configuration.setServerId
并传入要检查的服务器 ID 值来选择要检查的服务器。您只需在调用 AuthV4.checkMaintenance
之前调用此方法。
如果應用程式用戶在訪問應用程式後選擇了一個伺服器,則使用用戶選擇的伺服器 ID 值調用 Configuration.setServerId
。
根據彈出按鈕設置實現動作¶
在 Hive 控制台中,您可以选择在服务器维护弹出窗口中显示的按钮,例如关闭弹出窗口、退出游戏或导航到 URL。当用户按下按钮时需要实现的操作取决于您是使用 Hive SDK 的默认 UI 还是自定义 UI。有关更多详细信息,请参阅 服务器维护弹出窗口 UI。
彈出式 UI:基本 UI¶
伺服器維護彈出窗口可以使用Hive SDK提供的默認UI或自定義UI。使用自定義UI時,Hive SDK提供創建自定義UI所需的信息給應用客戶端。應用客戶端必須實現代碼以使用這些信息繪製和顯示UI。
基本的 UI 是 Hive SDK 默认提供的服务器维护弹出 UI。要显示基本的 UI,请调用 AuthV4.checkMaintenance
,并将 isShow
设置为 true
,如下所示。
Info
建議在 Hive 控制台中分別註冊常規伺服器維護或緊急伺服器維護的彈出窗口並使用它們。
- 定期維護
- 在 Hive 控制台中設置維護時區
- 從應用客戶端調用
AuthV4.checkMaintenance
- 根據調用結果僅在指定時區內顯示彈出窗口
- 緊急維護
- 在 Hive 控制台中將時間設置為「當前時間」
- 阻止所有用戶訪問應用伺服器
- 從應用客戶端調用
AuthV4.checkMaintenance
- 根據調用結果在用戶重新連接應用時顯示當前時間的彈出窗口
API 參考: Unity®
API 參考: C++
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// 是否使用 Hive SDK UI
bool isShow = true;
AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result, vector const & maintenanceInfolist){
if (result.isSuccess()) {
// 沒有需要檢查的內容
} else if (reuslt.needExit()) {
// TODO: 實現應用程序終止功能
// Cocos2d-x 引擎用戶
// 例) exit(0);
// Unreal Engine 用戶
// 例) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// 網絡錯誤或其他。請重試。
}
});
API 參考: Kotlin
import com.hive.AuthV4;
import com.hive.AuthV4;
import com.hive.ResultAPI;
// 是否使用 Hive SDK UI
val isShow = true
AuthV4.checkMaintenance(isShow, object : AuthV4.AuthV4MaintenanceListener {
override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList<AuthV4.AuthV4MaintenanceInfo>?) {
if (result.isSuccess) {
// 沒有需要檢查的內容
} else if (result.needExit()) {
// TODO: 實現應用程序終止功能
// 例) exitProcess(0)
} else {
// 網絡錯誤或其他。再試一次。
}
}
})
API 參考: Java
import com.hive.AuthV4;
import com.hive.ResultAPI;
// 是否使用 Hive SDK UI
boolean isShow = true;
AuthV4.checkMaintenance(isShow, (result, maintenanceInfo) -> {
if (result.isSuccess()) {
// 沒有任何需要檢查的
} else if (result.needExit()) {
// TODO: 實現應用程序終止功能
// 例) System.exit(0);
} else {
// 網絡錯誤或其他。請再試一次。
}
});
API 參考: Swift
import HIVEService
// 是否使用 Hive SDK UI
let isShow = true
AuthV4Interface.checkMaintenance(isShow) { result, maintenances in
if result.isSuccess() {
// There's nothing to check
} else if result.needExit() {
// TODO: Implement app termination functionality
// Example) exit(0)
} else {
// Network error or other. try again.
}
}
API 參考: Objective-C
#import <HIVEService/HIVEService-Swift.h>
// 是否使用 Hive SDK UI
BOOL isShow = YES;
[HIVEAuthV4 checkMaintenance:isShow handler: ^(HIVEResultAPI *result, NSArray<HIVEAuthV4MaintenanceInfo *> *maintenanceInfolist) {
if (result.isSuccess) {
// 沒有需要檢查的內容
} else if (result.needExit) {
// TODO: 實現應用程式終止功能
// 例如) exit(0);
} else {
// 網路錯誤或其他。再試一次。
}
}];
#include "HiveAuthV4.h"
// 是否使用 Hive SDK UI
bool bIsShow = true;
FHiveAuthV4::CheckMaintenance(bIsShow, FHiveAuthV4OnMaintenanceInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveAuthV4MaintenanceInfo>& AuthV4MaintenanceInfoArray) {
if (Result.IsSuccess()) {
// 沒有任何需要檢查的內容
} else if (Result.NeedExit()) {
// TODO: 實現應用程序終止功能
// 例如) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// 網絡錯誤或其他。請再試一次。
}
}));
實現使用遊戲退出按鈕時的應用退出¶
如果您在 Hive 控制台中使用 游戏退出 按钮,Hive SDK 将向 ResultAPI result
发送一个事件(NeedExit
),指示应用程序应该退出。
應用程式客戶端必須實現並執行代碼,以在接收到此事件後終止應用程式,這部分對於 Hive SDK 的默認 UI 和自定義 UI 都是相同的。
實現使用詳細視圖時的 URL 導航(轉到 URL)按鈕¶
如果您在 Hive 控制台中设置了 基本 URL 并启用了 导航到 URL,按下 查看详细信息 按钮将自动打开外部浏览器,并通过 Hive SDK 将应用用户重定向到基本 URL 中设置的地址。
使用關閉按鈕時實現彈出窗口關閉¶
在 Hive 控制台中使用 關閉彈出窗口按鈕 時,按下關閉按鈕將會由 Hive SDK 自動關閉彈出窗口。
用戶行為返回¶
在基本的 UI 中,您可以通过 ResultAPI
对象知道用户在弹出窗口中按下了哪个按钮。当用户按下一个按钮时,您会获得 ResultAPI
对象,这是 AuthV4.checkMaintenance
的回调结果,您可以从这个对象中知道用户采取的行动。
彈出式 UI: 自訂 UI¶
自訂 UI 是由應用程式開發者直接實現的伺服器維護彈出式 UI。當使用 AuthV4.checkMaintenance
調用 isShow=false
時,應用程式客戶端會收到必要的信息,以 AuthV4MaintenanceInfo
物件的形式實現彈出式 UI。開發者必須使用此物件直接實現和顯示自訂 UI。如果此值返回為 null
,則表示沒有內容可以在彈出式窗口中顯示。
以下是isShow
為false
的示例。
API 參考: Unity®
API 參考: C++
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
// 是否使用 Hive SDK UI
bool isShow = flase;
AuthV4::checkMaintenance(isShow, [=](ResultAPI const & result, vector const & maintenanceInfolist){
if (result.isSuccess()) {
if (maintenanceInfolist.size() > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} else {
// 网络错误或其他。请再试一次。
}
});
API 參考: Kotlin
import com.hive.AuthV4;
import com.hive.AuthV4;
import com.hive.ResultAPI;
// 是否使用 Hive SDK UI
val isShow = false
AuthV4.checkMaintenance(isShow, object : AuthV4.AuthV4MaintenanceListener {
override fun onAuthV4Maintenance(result: ResultAPI, maintenanceInfo: ArrayList<AuthV4.AuthV4MaintenanceInfo>?) {
if (result.isSuccess) {
if (maintenanceInfo != null && maintenanceInfo.size > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}
})
API 參考: Java
import com.hive.AuthV4;
import com.hive.ResultAPI;
// Whether to use Hive SDK UI
boolean isShow = false;
AuthV4.checkMaintenance(isShow, (result, maintenanceInfo) -> {
if (result.isSuccess()) {
if (maintenanceInfo != null && maintenanceInfo.size() > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
});
API 參考: Swift
API 參考: Objective-C
#import <HIVEService/HIVEService-Swift.h>
// 是否使用 Hive SDK UI
BOOL isShow = YES;
[HIVEAuthV4 checkMaintenance:isShow handler: ^(HIVEResultAPI *result, NSArray<HIVEAuthV4MaintenanceInfo *> *maintenanceInfolist) {
if (result.isSuccess) {
if (maintenanceInfolist.count > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}];
#include "HiveAuthV4.h"
// Hive SDK UI 使用狀態
bool bIsShow = true;
FHiveAuthV4::CheckMaintenance(bIsShow, FHiveAuthV4OnMaintenanceInfoDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveAuthV4MaintenanceInfo>& AuthV4MaintenanceInfoArray) {
if (Result.IsSuccess()) {
if (AuthV4MaintenanceInfoArray.Num() > 0) {
// TODO: Show custom maintenance dialog.
} else {
// There's nothing to check
}
} else {
// Network error or other. try again.
}
}));
Authv4maintenanceinfo 物件¶
欄位名稱 | 描述 | 類型 |
---|---|---|
title | 彈出視窗標題 | 字串 |
message | 彈出視窗內容 | 字串 |
button | 彈出視窗按鈕的標籤文字 | 字串 |
action | 指示當按下彈出視窗按鈕時將採取的行動 OPEN_URL: 執行傳遞給外部瀏覽器的 URL EXIT: 退出應用程式 DONE: 關閉檢查彈出視窗而不進行任何處理 | AuthV4MaintenanceActionType 列舉 |
url | 要在外部瀏覽器中打開的 URL。 當 action 欄位值為 OPEN_URL 時有效 | 字串 |
remainingTime | 檢查完成前的剩餘時間(以秒為單位)。時間會實時更新,當達到 0 秒時應用程式將退出 | 整數 |
startDate | 檢查開始日期 | 字串 |
endDate | 檢查結束日期 | 字串 |
customerButton | 客服按鈕文字(在檢查彈出視窗中傳遞空字串) | 字串 |
customerLink | 客服按鈕連結(在檢查彈出視窗中傳遞空字串) | 字串 |
exButtons | 彈出視窗按鈕資訊(最多可以傳遞 3 個) | JSONArray |
exButtons.action | 指示當按下彈出視窗按鈕時將採取的行動 OPEN_URL: 執行傳遞給外部瀏覽器的 URL EXIT: 退出應用程式 DONE: 關閉檢查彈出視窗而不進行任何處理 | AuthV4MaintenanceActionType 列舉 |
exButtons.button | 彈出視窗按鈕的標籤文字 | 字串 |
exButtons.url | 要在外部瀏覽器中打開的 URL。 當 action 欄位值為 OPEN_URL 時有效 | 字串 |
開發人員在應用程式客戶端中實現代碼,以使用此對象創建和顯示自定義伺服器維護彈出窗口。通過使用此對象,每次檢查伺服器時,都可以自動顯示自定義伺服器維護彈出窗口。
Note
如果在 Hive 控制台中设置的服务器维护时间不正确,它将返回 null
和 AuthV4MaintenanceInfo
对象。
Info
建議在 Hive 控制台中單獨註冊常規伺服器維護或緊急伺服器維護的彈出窗口並使用它們。
- 定期維護
- 在 Hive 控制台中設置維護時區
- 從應用客戶端調用
AuthV4.checkMaintenance
- 根據調用結果僅在指定時區內顯示彈出窗口
- 緊急維護
- 在 Hive 控制台中將時間設置為「當前時間」
- 阻止所有用戶訪問應用伺服器
- 從應用客戶端調用
AuthV4.checkMaintenance
- 根據調用結果在用戶重新連接到應用時顯示彈出窗口
使用遊戲退出按鈕時應用程序退出的實現¶
如果您在 Hive 控制台中使用 结束游戏 按钮,Hive SDK 将向 ResultAPI result
发送一个事件(Exit
),指示应用程序应该终止。应用程序客户端必须在接收到此事件后实现并执行终止应用程序的代码,这部分对于 Hive SDK 的默认 UI 和自定义 UI 是相同的。
實現使用詳細視圖時的 URL 導航(前往 URL)按鈕¶
如果在 Hive 控制台中设置了 默认 URL 并且激活了 导航到 URL,开发者必须实现一个动作,当按下 查看详情 按钮时,将用户重定向到设置为默认 URL 的地址。实现这一点所需的信息在 AuthV4MaintenanceInfo
对象中。
例如,如果您设置了基本 URL,您将在AuthV4MaintenanceInfo
对象的action
字段中收到一个值(OPEN_URL
),该值指示需要导航到特定 URL。如果应用客户端接收到此值,则必须实现代码以将应用用户重定向到url
中的 URL。
使用關閉按鈕時實現彈出窗口關閉¶
如果在 Hive 控制台中使用 关闭按钮,开发者必须实现代码,当关闭按钮被按下时,自动根据 AuthV4MaintenanceInfo
对象中的信息关闭弹出窗口。
曝露順序¶
通知彈出窗口不會同時出現。如果您已在控制台中註冊了所有通知彈出窗口(國家限制、更新、一般通知、伺服器維護),則通知彈出窗口顯示的順序如下。
- 國家限制彈出視窗
- 角色:通知用戶如果他們從特定國家連接,則訪問被阻止
- 下一步:鼓勵用戶關閉應用程式
- 更新彈出視窗
- 角色:通知用戶如果他們使用的是舊版本的應用程式(如果不受國家限制),則需要更新
- 下一步:關閉應用程式並引導用戶前往應用市場以更新到最新版本
- 一般通知彈出視窗
- 角色:顯示有關應用程式更新和任何通知的信息,如果應用程式不受國家限制並且是最新版本
- 伺服器維護彈出視窗
- 角色:通知用戶伺服器維護(如果不受國家限制,應用程式是最新版本,並且已提供一般通知)
- 下一步:鼓勵用戶關閉應用程式
示例 1:當用戶從受限國家訪問時¶
如果用户从受限国家连接,则只会显示国家限制弹出窗口,游戏将退出。如果在控制台中未注册国家限制弹出窗口,则不会显示国家限制弹出窗口,并将继续进行更新弹出窗口显示步骤,如下面的示例2所示。
示例 2:當用戶從允許的國家訪問時¶
如果用戶來自允許的國家,則不會顯示國家限制彈出窗口。隨後顯示的彈出窗口將根據應用程序是否為最新版本而有所不同,如下所示。
如果應用程式是舊版本(如果應用程式尚未更新)¶
顯示更新彈出窗口。更新彈出窗口鼓勵用戶在退出遊戲後從市場更新遊戲到最新版本。
如果應用程式是最新版本(如果應用程式已更新)¶
顯示一般通知彈出窗口,而不顯示更新彈出窗口。如果伺服器正在維護,將顯示伺服器維護彈出窗口。