该指南旨在详细阐述如何在游戏中融入并利用我们的 SDK。我们的 SDK 搭载了一系列功能,包含初始化、登录、角色信息报告(包括注册、登录和注销)、公告、客服接入、日志上报、礼包码兑换、问卷调查、协议查阅以及支付等。
在开始接入过程之前,必须首先确认游戏的访问地址,并将其提供给我们的技术支持同学。我们会将访问地址先在AF后台进行配置。请注意,一旦地址配置完成,将无法进行更改。
我们将提供’platform-sdk-config’目录 (请联系技术支持以获取)。目录包含所有平台产品的配置文件。需要将目录放置在与index.html文件相同的目录层级中。
以游戏访问地址为 https://xxx.com/game1 为例:
目录的结构应如下所示:
- Build # 游戏打包文件- TemplateData # 游戏打包文件- index.html # 游戏打包文件- platform-sdk-config # 平台提供目录,包含SDK的配置文件- config.json- midbase_statlog.json- static # 游戏可配置此目录图片资源- default_user_img.png # 用户头像图片- loading.png # 加载图- logo.png # 游戏logo图- top_arrow.png # 菜单键下拉箭头- style.css # 游戏样式
根据游戏实现的具体需求,可以选择对应的接入语言。目前我们支持 Unity 和 Typescript 。
在游戏的index.html head中引入JS脚本
<script type="text/javascript" src="https://cdn-global-sdk.aceux.net/platform-sdk/global-web/2.3.js"></script>
引入平台提供的 PlatformSDK.Bridge.2.3.unitypackage 包 (可以在SDK官方网站下载)
更新SDK版本: 导入平台提供新版本的untiypackage (PlatformSDK.Bridge.2.4.unitypackage)、调整script中的版本号()
npm config set @platform-sdk:registry http://nexus.acegames.cn/repository/npm-hosted/
npm install @platform-sdk/web -S
npm update @platform-sdk/web
我们的SDK接口被细致地设计为同步接口(如:login, getServiceId)和异步接口(如:initialize, pay)。
同步接口的目标是确保稳定性,避免出现异常情况。所有请求的结果将被直接返回,确保流程的顺畅性。
异步接口则是为了处理异步操作和可能出现的异常情况。请求的结果通过Task(在Unity环境中)或Promise(在Typescript环境中)返回,以实现异步处理。我们采用了统一的异常处理类,SDKException(在Unity环境中)和SdkError(在Typescript环境中),以保证异常的统一性和处理的效率。
错误码表
initialize中注册SDK的生命周期事件。这些事件包括登录成功、账号切换和账号注销等重要操作。00000000。此时,游戏方需要根据提示进行相应的调整。请注意,为了保证游戏的正常运行,这种情况需要在游戏上线前解决。另外,我们在接口的功能说明中也提供了其他可能出现的异常情况。在激活SDK的各项功能之前,首先需要进行初始化。可以在应用程序启动时调用 initialize 方法:
此方法会使用platform-sdk目录下的配置文件来启动SDK。
初始化过程中,SDK的Header页面将在游戏页面的基础上进行渲染。Header提供 显示当前登录账号、账号切换、客服
为了保证SDK的正常运行,您需要在初始化时注册SDK的生命周期事件,包括登录成功、账号切换和账号注销操作。
/*** 初始化SDK*/public static Task Initialize(InitializeOptions options)
/*** 初始化SDK*/function initialize(options: InitializeOptions): Promise<void>
InitializeOptions
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| version | 游戏版本 | 是 | string |
| resVersion | 游戏资源版本 | 否 | string |
| language | 语言 | 是 | Language |
| onLogin | 登录回调 | 是 | Action<CallbackData<User>> / (data: CallbackData<User>) => void |
| onSwitchAccount | 切换账号回调 | 是 | Action<CallbackData<User>> / (data: CallbackData<User>) => void |
| onLogout | 注销 | 是 | Action / () => void |
| onFullScreenChange | 全屏状态变化, 返回当前全屏状态 | 否 | Action<bool> / (fullScreen: boolean) => void |
Language
枚举类型
Language.en_US
Language.zh_CN
Language.zh_TW
Language.ko_KR
CallbackData<D>
回调数据类型
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| data | 回调数据 | 否 | R |
| success | 回调成功状态 | 是 | bool/boolean |
| errorCode | 错误码 | 否 | string |
User
用户信息
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| userId | 用户ID | 是 | string |
| returnJson | 渠道授权数据返回JSON对象 | 是 | string |
| userName | 平台用户名 | 是 | string |
| token | Token | 是 | string |
| userServiceCode | 服务端上报透传, 在角色登录前使用 | 是 | string |
| loginType | 当前登录方式; speedy:快登用户 common:用户名密码用户 phone:手机号用户 email: 邮箱用户 thirdHidden:三方授权用户 accessToken:token登录 | 是 | string |
Task / Promise<void>
初始化成功/失败回调
| 错误码 | 描述 |
|---|---|
| 00000000 | 请在index同级目录下未找到/platform-sdk-config/config.json文件 |
onLogin和onSwitchAccount的 errorCode 返回说明
| 错误码 | 描述 |
|---|---|
| 00020000 | 登录/切换账号 失败 |
| 00020001 | 登录/切换账号 取消登录 |
using PlatformSDK.Bridge;try{await SDK.Initialize(new InitializeOptions(){version = "2.3.0",resVersion = "1.0.0",language = Language.en_US,onLogin = (data) =>{Debug.Log("Login " + data);},onLogout = () =>{Debug.Log("Logout Success");},onSwitchAccount = (data) =>{Debug.Log("SwitchAccount " + data);},onFullScreenChange = (fullScreen) =>{Debug.Log("onFullScreenChange " + fullScreen);}});Debug.Log("Initialized Success");}catch (SDKException e){Debug.Log("Initialized Error: code: " + e.code + ", message: " + e.message);}
import sdk, {Language, SdkError} from "@platform-sdk/global-web";try {await sdk.initialize({version: '2.3.0',resVersion: '1.0.0',language: Language.en_US,onLogin: u => {console.log('Login Success', u);},onSwitchAccount: () => {console.log('SwitchAccount Success');},onLogout: () => {console.log('Logout Success');},// 监听全屏改变onFullScreenChange: (fullScreen) => {console.log('onFullScreenChange Success ' + fullScreen);}});console.log('Initialized Success');} catch (e) {if (e instanceof SdkError) {console.log('Initialized Error: code: ' + e.code + ', message: ' + e.message);}}
使用 login 方法可以启动登录流程:
一旦登录成功,SDK会执行在初始化过程中注册的登录成功回调。
/*** 登录*/public static void Login()
/*** 登录*/function login(): void
无
无
无
using PlatformSDK.Bridge;SDK.Login();
import sdk from "@platform-sdk/global-web";sdk.login();
使用 reportRoleInfo 方法上报角色信息, 上报类型为logout时其它参数才可为空, 其它上报类型所有参数都不为空
/*** 角色信息上报*/public static void ReportRoleInfo(ReportRoleInfoOptions options)
/*** 角色信息上报*/function reportRoleInfo(options: ReportRoleInfoOptions): void
ReportRoleInfoOptions
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| sendType | 上报类型: 角色注册、角色登录、角色信息修改、角色注销 | 是 | ReportRoleInfoSendType |
| serverId | 游戏服ID | 是 | string |
| serverName | 游戏服名称 | 是 | string |
| roleId | 角色ID | 是 | string |
| roleName | 角色名称 | 是 | string |
| roleLevel | 角色等级 | 是 | string |
| vipLevel | VIP等级 | 是 | string |
| roleCreateTime | 角色创建时间 | 是 | double / number |
无
无
using PlatformSDK.Bridge;SDK.ReportRoleInfo(new ReportRoleInfoOptions(){sendType = ReportRoleInfoSendType.login,serverId = "1",serverName = "1",roleId = "1",roleName = "1",roleLevel = "1",vipLevel = "1",roleCreateTime = 1701403244126});
import sdk, {ReportRoleInfoSendType} from "@platform-sdk/global-web";sdk.reportRoleInfo({sendType: ReportRoleInfoSendType.login,serverId: "1",serverName: "1",roleId: "1",roleName: "1",roleLevel: "1",vipLevel: "1",roleCreateTime: 1701403244126});
使用 pay 方法拉起SDK支付
/*** 支付*/public static Task<Order> Pay(PayOptions options)
/*** 支付*/function pay(options: PayOptions): Promise<Order>
PayOptions
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| productId | 商品ID | 是 | string |
| productName | 商品名称 | 是 | string |
| productDesc | 商品描述 | 是 | string |
| price | 价格 | 是 | string |
| quantity | 数量 | 是 | int / number |
| vipLevel | VIP等级 | 是 | string |
| roleLevel | 角色等级 | 是 | string |
| currencyType | 货币类型 | 否 | string |
| virtualCoinUnit | 虚拟货币名称,比如 钻石,金币,宝石 等 | 否 | string |
| extension | 游戏自定义数据,支付成功后,计费中心会将此字段数据回传给游戏服务器 | 否 | string |
| gamedDeliverUrl | 游戏发放道具服务器地址,用户支付成功后计费中心会回调此地址告知游戏进行道具发放。 可以配置到SDK后台。 | 否 | string |
currencyType取值
| 货币类型值 | 货币名称 | 货币单位 |
|---|---|---|
| 1 | 人民币 | 分 |
| 2 | 美元 | 美分 |
| 3 | 日元 | 円 |
| 4 | 港币 | 分 |
| 5 | 英镑 | 便士 |
| 6 | 新加坡币 | 分 |
| 7 | 越南盾 | 盾 |
| 8 | 台币 | 元 |
| 9 | 韩元 | 元 |
| 10 | 泰铢 | 萨当 |
回调成功: 支付成功
Order
| 参数名 | 说明 | 类型 |
|---|---|---|
| orderId | 订单ID | string |
| productId | 商品ID | string |
回调失败: 支付失败/用户取消
| 错误码 | 描述 |
|---|---|
| 00030001 | 取消支付 |
| 00030000 | 支付失败 |
using PlatformSDK.Bridge;try{var order = await SDK.Pay(new PayOptions(){productId = "1",productName = "1",productDesc = "1",price = "1",quantity = 1,roleLevel = "1",vipLevel = "1"});Debug.Log("Pay Success" + order.orderId);}catch (SDKException e){Debug.Log("Pay Error: ", e.code);}
import sdk, {SdkError} from "@platform-sdk/global-web";try {await sdk.pay({productId: '1',productName: '1',productDesc: '1',price: '1',quantity: 1,roleLevel: '1',vipLevel: '1'});console.log("Pay Success");} catch (e) {if (e instanceof SdkError) {console.log("Pay Error: ", e.code);}}
使用 getServiceId 方法获取serviceId, 调用前需要上报角色登录
/*** 获取ServiceId*/public static string GetServiceId()
/*** 获取ServiceId*/function getServiceId(): string
无
返回 serviceId 产品平台ID
无
using PlatformSDK.Bridge;var serviceId = SDK.GetServiceId();Debug.Log("GetServiceId Success: " + serviceId);
import sdk from "@platform-sdk/global-web";const serviceId = sdk.getServiceId();console.log("GetServiceId Success: " + serviceId);
使用 analyticsLog 方法来进行三方广告平台打点, 目前支持AppsFlyer
/*** 第三方广告平台打点*/public static void AnalyticsLog(AnalyticsLogOptions options)
/*** 第三方广告平台打点*/function analyticsLog(options: AnalyticsLogOptions): void
AnalyticsLogOptions
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| eventKey | 事件Key | 是 | string |
| eventParams | 事件参数 | 否 | Dictionary<string, string> / Record<string, string> |
无
无
using PlatformSDK.Bridge;SDK.AnalyticsLog(new AnalyticsLogOptions(){eventKey = "open"});
import sdk from "@platform-sdk/global-web";sdk.analyticsLog({eventKey: "open"});
使用 reportLog 方法进行日志上报
/*** 日志上报*/public static void ReportLog(ReportLogOptions options)
/*** 日志上报*/function reportLog(options: ReportLogOptions): Promise<void>
ReportLogOptions
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| logId | 事件ID | 是 | string |
| logKey | 事件Key | 是 | string |
| map | 事件参数 | 是 | Dictionary<string, string>/Record<string, string> |
成功回调表示日志上报成功
无
using PlatformSDK.Bridge;Dictionary<string, string> map = new Dictionary<string, string>();map.Add("actId", "10000");map.Add("actName", "开始新手引导");map.Add("detail", "回合开始");map.Add("classifiedId", "00000000");map.Add("classifiedName", "分类1");map.Add("roleLevel", "1");map.Add("roleVipLevel", "1");map.Add("taskId", "1");map.Add("taskName", "1");SDK.ReportLog(new ReportLogOptions(){logId = "1001",logKey = "role-task",map = map});
import sdk from "@platform-sdk/global-web";sdk.reportLog({logId: '1001',logKey: 'role-task',map: {actId: '123',actName: '123name',classifiedId: '1',classifiedName: '1',detail: 'message'}});
使用 share 方法来进行分享, 目前支持Facebook分享
/*** 分享*/public static void Share(ShareOptions options)
/*** 分享*/function share(options: ShareOptions): void
ShareOptions
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| type | 分享类型 | 是 | ShareType |
| url | 分享链接 不传默认为当前页面地址 | 否 | string |
ShareType
枚举类型
ShareType.Facebook无
无
using PlatformSDK.Bridge;SDK.Share(new ShareOptions(){type = ShareType.Facebook});
import sdk, {ShareType} from "@platform-sdk/global-web";sdk.share({type: ShareType.Facebook});
使用 openNotice 方法打开公告
/*** 打开公告*/public static Task OpenNotice(OpenNoticeOptions options)
/*** 打开公告*/function openNotice(options: OpenNoticeOptions): Promise<void>
OpenNoticeOptions
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| onClose | 上报类型: 角色注册、角色登录、角色信息修改、角色注销 | 否 | Action / () => void |
异步回调表示成功打开公告
| 错误码 | 说明 |
|---|---|
| 00090000 | 未配置公告 |
using PlatformSDK.Bridge;try{await SDK.OpenNotice(new OpenNoticeOptions(){onClose = () =>{Debug.Log("Close Notice");}});Debug.Log("Open Notice Success");}catch (SDKException e){Debug.Log("Open Notice Error: " + e.code);}
import sdk, {SdkError} from "@platform-sdk/global-web";try {await sdk.openNotice({onClose: () => {console.log("Close Notice");}})console.log("Open Notice Success");} catch(e) {if (e instanceof SdkError) {console.log("Open Notice Error: " + e.code);}}
使用 openProtocol 方法来打开协议页面
/*** 打开公告*/public static void OpenProtocol(OpenProtocolOptions options)
/*** 打开公告*/function openProtocol(options: OpenProtocolOptions): void
OpenProtocolOptions
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| onAgree | 点击了同意(可做为协议关闭回调) | 否 | Action / () => void |
| onReject | 点击了拒绝 | 否 | Action / () => void |
无
无
using PlatformSDK.Bridge;SDK.OpenProtocol(new OpenProtocolOptions(){onAgree = () =>{Debug.Log("点击了同意");},onReject = () =>{Debug.Log("点击了拒绝");}});
import sdk from "@platform-sdk/global-web";sdk.openProtocol({onAgree: () => {console.log("点击了同意");},onReject: () => {console.log("点击了拒绝");}});
使用 openQuestionnaire 方法来打开问卷, 会在新的窗口用打开问卷页面
/*** 打开问卷*/public static Task OpenQuestionnaire(OpenQuestionnaireOptions options)
/*** 打开问卷*/function openQuestionnaire(options: OpenQuestionnaireOptions): Promise<void>
OpenQuestionnaireOptions
| 参数名 | 说明 | 必填 | 类型(Unity/Typescript) |
|---|---|---|---|
| questionId | 平台问卷ID | 是 | string |
| customParams | 自定义参数 | 是 | Dictionary<string, string> / Record<string, string> |
回调成功: 成功打开问卷
回调失败: 问卷打开失败
using PlatformSDK.Bridge;var customParams = new Dictionary<string, string>{{ "roleId", "1" }};try{await SDK.OpenQuestionnaire(new OpenQuestionnaireOptions(){questionId = "1",customParams = customParams});Debug.Log("Open Questionnaire Success");}catch (SDKException e){Debug.Log("Open Questionnaire Error: " + e.code);}
import sdk, {SdkError} from "@platform-sdk/global-web";try {await sdk.openQuestionnaire({questionId: "1",customParams: {roleId: "1"}});console.log("Open Questionnaire Success");} catch (e) {if (e instanceof SdkError) {console.log("Open Questionnaire Fail: " + e.code);}}
使用 giftCodeExchange 方法进行礼包码兑换
/*** 礼包码兑换*/public static Task GiftCodeExchange(GiftCodeExchangeOptions options)
/*** 礼包码兑换*/function giftCodeExchange(options: GiftCodeExchangeOptions): Promise<void>
GiftCodeExchangeOptions
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| code | 礼包码 | 是 | string |
回调表示兑换成功
using PlatformSDK.Bridge;try{await SDK.GiftCodeExchange(new GiftCodeExchangeOptions(){code = 'xxxx'});Debug.Log("GiftCodeExchange Success");}catch (SDKException e){Debug.Log("GiftCodeExchange Error", e.code);}
import sdk, {SdkError} from "@platform-sdk/global-web";try {await sdk.giftCodeExchange({code: 'xxxx'});console.log("GiftCodeExchange Success");} catch (e) {if (e instanceof SdkError) {console.log("GiftCodeExchange Error", e.code);}}
使用 switchLanguage 方法切换SDK语言
/*** 切换语言*/public static Task SwitchLanguage(Language language)
/*** 切换语言*/function switchLanguage(language: Language): Promise<void>
Language
枚举类型
Language.en_USLanguage.zh_CNLanguage.zh_TWLanguage.ko_KR设置成功, 如不需要可以不等待回调
无
using PlatformSDK.Bridge;SDK.SwitchLanguage(Language.en_US);
import sdk, {Language} from "@platform-sdk/global-web";sdk.switchLanguage(Language.en_US);
使用 openCustomerService 方法拉起SDK客服界面
/*** 打开客服*/public static void OpenCustomerService()
/*** 打开客服*/public openCustomerService(): void
无
无
无
using PlatformSDK.Bridge;SDK.OpenCustomerService();
import sdk from "@platform-sdk/global-web";sdk.openCustomerService();
使用 localStorageSave 方法来保存数据到本地.
使用localStorageGet方法来获取保存在本地的数据
/*** 保存数据*/public static void LocalStorageSet(LocalStorageSetOptions options);/*** 获取数据*/public static T? LocalStorageGet<T>(LocalStorageGetOptions options);
/*** 保存数据*/public localStorageSet(options: LocalStorageSetOptions): void;public localStorageGet(options: LocalStorageGetOptions): string | null;
LocalStorageSetOptions
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| key | 存储的键名 | 是 | string |
| value | 存储的数据 | 是 | object / any |
LocalStorageGetOptions
| 参数名 | 说明 | 必填 | 类型 |
|---|---|---|---|
| key | 存储的键名 | 是 | string |
LocalStorageGet 方法返回范性值, 需要注意类型要和set时的类型匹配, 也可能是null值
无
using PlatformSDK.Bridge;SDK.LocalStorageSet(new LocalStorageSetOptions(){key = "language",value = Language.en_US});Language language = SDK.LocalStorageGet<Language>(new LocalStorageGetOptions(){key = "language"});
import sdk, {Language} from "@platform-sdk/global-web";sdk.localStorageSet({key: "language",value: Language.en_US});const language = sdk.localStorageGet({key: "language"}); // string "0"
使用 setGameResVersion 方法更新游戏资源版本号.
public static void SetGameResVersion(string version);
public setGameResVersion(version: string): void;
version 游戏资源版本号
无
无
using PlatformSDK.Bridge;SDK.SetGameResVersion("9.9.9");
import sdk from "@platform-sdk/global-web";sdk.setGameResVersion("9.9.9");
使用 bookmarkPage 方法来将当前页面保存到浏览器书签.
public static Task BookmarkPage();
public bookmarkPage(): Promise<void>;
无
Task / Promise<void>
保存书签成功/保存书签失败回调
| 错误码 | 描述 |
|---|---|
| 00040000 | 请在浏览器菜单中添加此页面到书签或主屏幕。 |
| 00040001 | 请按 Cmd + D 添加此页到书签。 |
| 00040002 | 请按 Ctrl + D 添加此页到书签。 |
using PlatformSDK.Bridge;try{await SDK.BookmarkPage();}catch (SDKException e){Debug.Log("BookmarkPage Error", e.code);}
import sdk from "@platform-sdk/global-web";try {await sdk.bookmarkPage();} catch (e) {if (e instanceof SdkError) {console.log("BookmarkPage Error", e.code);}}
使用 copyToClipboard 方法来将输入内容复制到剪切板.
public static Task CopyToClipboard(string text);
public copyToClipboard(text: string): Promise<void>;
string
需要复制的文本内容
Task / Promise<void>
复制文本成功回调, 复制文本失败回调
| 错误码 | 描述 |
|---|---|
| 00050000 | 复制失败, 详情: (具体原因) |
using PlatformSDK.Bridge;try{await SDK.CopyToClipboard("要复制的文本");}catch (SDKException e){Debug.Log("CopyToClipboard Error", e.code);}
import sdk, {SdkError} from "@platform-sdk/global-web";try {await sdk.copyToClipboard("要复制的文本");} catch (e) {if (e instanceof SdkError) {console.log("CopyToClipboard Error", e.code);}}
需要先使用 fullScreenEnabled 方法来判断当前设备是否支持全屏, 再使用 enterFullScreen(进入全屏)、exitFullScreen(退出全屏)、toggleFullScreen(切换全屏)、fullScreen(判断当前是否全屏)等方法.
需要注意的是有些设备即使fullScreenEnabled返回的是可全屏, 在调用enterFullScreen、exitFullScreen、toggleFullScreen方法时也可能返回不支持全屏的异常, 主要是在一些IOS设备会有一些安全限制导致全屏失败.
/*** 进入全屏*/public static Task EnterFullScreen();/*** 退出全屏*/public static Task ExitFullScreen();/*** 切换全屏, 非全屏状态时进入全屏, 全屏状态时退出全屏*/public static Task ToggleFullScreen();/*** 当前全屏判断*/public static bool FullScreen();/*** 设备是否支持全屏*/public static bool FullScreenEnabled();
public enterFullScreen(): Promise<void>;public exitFullScreen(): Promise<void>;public toggleFullScreen(): Promise<void>;public fullScreen(): boolean;public fullScreenEnabled(): boolean;
无
Task / Promise<void>
返回全屏/退出全屏 成功/失败
| 错误码 | 描述 |
|---|---|
| 00060000 | 不支持全屏/退出全屏 |
using PlatformSDK.Bridge;try{await SDK.EnterFullScreen();Debug.Log("EnterFullScreen Success");}catch (SDKException e){Debug.Log("EnterFullScreen Error", e.code);}try{await SDK.ExitFullScreen();Debug.Log("ExitFullScreen Success");}catch (SDKException e){Debug.Log("ExitFullScreen Error", e.code);}try{await SDK.ToggleFullScreen();Debug.Log("ToggleFullScreen Success");}catch (SDKException e){Debug.Log("ToggleFullScreen Error", e.code);}var fullScreen = SDK.FullScreen();Debug.Log("当前是否全屏:", fullScreen);var fullScreenEnabled = SDK.FullScreenEnabled();Debug.Log("是否支持全屏:", fullScreenEnabled);
import sdk, {SdkError} from "@platform-sdk/global-web";try {await sdk.enterFullScreen();} catch (e) {if (e instanceof SdkError) {console.log("enterFullScreen Error", e.code);}}try {await sdk.exitFullScreen();} catch (e) {if (e instanceof SdkError) {console.log("exitFullScreen Error", e.code);}}try {await sdk.toggleFullScreen();} catch (e) {if (e instanceof SdkError) {console.log("toggleFullScreen Error", e.code);}}var fullScreen = sdk.fullScreen();console.log("当前是否全屏:" + fullScreen);var fullScreenEnabled = sdk.fullScreenEnabled();console.log("是否支持全屏:", fullScreenEnabled);
