服务器维护
在提供应用服务时,可能会出现由于定期或紧急服务器维护而需要显示服务器维护弹出窗口的情况,并终止应用或将用户重定向到另一个网站。通过这种方式,Hive SDK 提供了一个可以响应服务器维护情况的通知弹出窗口。
弹出窗口 | 描述 |
---|---|
服务器维护 | 您可以为每个游戏服务器设置维护状态,建议在维护期间提供与游戏相关的链接 |
曝露方法¶
-
在 Hive 控制台中注册所需的 服务器维护通知弹出窗口。
-
在 Hive 控制台应用中心 中注册要维护的服务器 ID。
-
在服务器维护时调用
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) {
// 没有什么需要检查的
} else if (result.needExit()) {
// TODO: 实现应用程序终止功能
// 例如) exitProcess(0)
} else {
// 网络错误或其他。请再试一次。
}
} else { // isShow 为 false
if (result.isSuccess) {
if (maintenanceInfo != null && maintenanceInfo.size > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} else {
// 网络错误或其他。请再试一次。
}
}
}
})
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()) {
// 没有什么需要检查的
} else if (result.needExit()) {
// TODO: 实现应用程序终止功能
// 示例) System.exit(0);
} else {
// 网络错误或其他。请再试一次。
}
} else { // isShow false
if (result.isSuccess()) {
if (maintenanceInfo != null && maintenanceInfo.size() > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} else {
// 网络错误或其他。请再试一次。
}
}
});
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 为假
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) {
// 没有什么需要检查
} else if (result.needExit) {
// TODO: 实现应用程序终止功能
// 示例) exit(0);
} else {
// 网络错误或其他。请再试一次。
}
} else { // isShow 为 false
if (result.isSuccess) {
if (maintenanceInfolist.count > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查
}
} else {
// 网络错误或其他。请再试一次。
}
}
}];
#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()) {
// 没有什么需要检查的
} else if (Result.NeedExit()) {
// TODO: 实现应用程序终止功能
// 示例) UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
} else {
// 网络错误或其他。请再试一次。
}
} else { // isShow false
if (Result.IsSuccess()) {
if (AuthV4MaintenanceInfoArray.Num() > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} else {
// 网络错误或其他。请再试一次。
}
}
}));
服务器维护弹出窗口 UI 可以使用 Hive SDK 的默认 UI 或自定义 UI,如果 isShow
为 true
,则使用默认 UI。 如果使用自定义 UI,isShow
必须为 false
。
Configuration.setserverid¶
在显示服务器维护弹窗之前,开发者必须选择要检查的服务器。 Hive 控制台允许您为每个应用服务器以不同的方式注册服务器维护弹窗,并且您可以为每个服务器显示不同的服务器维护弹窗。
如果您在控制台中为每个服务器注册了不同的维护弹出窗口,SDK 将通过调用 Configuration.setServerId
并传入要检查的服务器 ID 值来选择要检查的服务器。您只需在调用 AuthV4.checkMaintenance
之前调用此方法。
如果应用程序用户在访问应用后选择了一个服务器,请调用 Configuration.setServerId
并传入用户选择的服务器 ID 值。
基于弹出按钮设置的操作实现¶
在 Hive 控制台中,您可以选择在服务器维护弹出窗口中显示的按钮,例如关闭弹出窗口、退出游戏或导航到 URL。当用户按下按钮时需要实现的操作取决于您是使用 Hive SDK 的默认 UI 还是自定义 UI。有关更多详细信息,请参阅 服务器维护弹出窗口 UI。
弹出式用户界面:基本用户界面¶
服务器维护弹出窗口可以使用Hive SDK提供的默认UI或自定义UI。当使用自定义UI时,Hive SDK提供创建自定义UI所需的信息给应用客户端。应用客户端必须实现代码以使用这些信息绘制和展示UI。
基本用户界面是由Hive SDK默认提供的服务器维护弹出用户界面。要显示基本用户界面,请调用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);
// 虚幻引擎用户
// 示例) 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 自动关闭弹出窗口。
用户行为返回¶
在基本用户界面中,您可以通过ResultAPI
对象了解用户在弹出窗口中按下了哪个按钮。当用户按下一个按钮时,您会获得ResultAPI
对象,这是AuthV4.checkMaintenance
的回调结果,您可以从该对象中了解用户采取的行动。
弹出界面:自定义界面¶
自定义 UI 是由应用程序开发者直接实现的服务器维护弹出 UI。当调用 isShow=false
与 AuthV4.checkMaintenance
时,应用客户端以 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){
如果 (result.isSuccess()) {
如果 (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;
// 是否使用 Hive SDK UI
boolean isShow = false;
AuthV4.checkMaintenance(isShow, (result, maintenanceInfo) -> {
if (result.isSuccess()) {
if (maintenanceInfo != null && maintenanceInfo.size() > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} else {
// 网络错误或其他。再试一次。
}
});
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: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} 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()) {
if (AuthV4MaintenanceInfoArray.Num() > 0) {
// TODO: 显示自定义维护对话框。
} else {
// 没有什么需要检查的
}
} else {
// 网络错误或其他。再试一次。
}
}));
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:当用户从允许的国家访问时¶
如果用户来自允许的国家,则不会显示国家限制弹出窗口。之后显示的弹出窗口将根据应用程序是否为最新版本而有所不同,如下所示。
如果应用程序是旧版本(如果应用程序没有更新)¶
显示更新弹窗。更新弹窗鼓励用户在退出游戏后从市场更新游戏到最新版本。
如果应用是最新版本(如果应用已更新)¶
显示一般通知弹窗而不显示更新弹窗。如果服务器正在维护,它将显示服务器维护弹窗。