import { _decorator, Component, sys, utils } from "cc"; import Utils from "../Common/Utils"; import { WXSDK } from "./wxSDK"; import { ByteDanceSDK } from "./bdSDK"; import { WebSDK } from "./webSDK"; import { KSSDK } from "./ksSDK"; import AudioManager from "../Manager/AudioManager"; import GlobalValue, { VideoRoleType } from "../Common/GlobalValue"; import { luffaSDK } from "./luffaSDK"; import { logger } from "db://assets/Scripts/Main/Common/Logger"; const { ccclass, property } = _decorator; /**运行渠道 */ export enum E_SDK_Channel { /**微信 */ WX, /**字节跳动 (抖音、头条) */ BD, /**网页 */ WEB, /**快手 */ KS, } /**玩家SDK信息 */ export interface I_SDK_UserInfo { /**昵称 */ nickName: string; /**头像url */ avatarUrl: string; } /**玩家SDK信息回调 */ export interface I_SDK_UserInfo_Callback { (info: I_SDK_UserInfo): void; } //渠道管理器 @ccclass('SDKManager') export class SDKManager { //extends Component private static _I: SDKManager = null; public static get I(): SDKManager { if (!SDKManager._I) { SDKManager._I = new SDKManager(); SDKManager._I.init(); } return SDKManager._I; } private init(){ } initEmpty(){ } //玩家头像 private static _avatarUrl: string = ""; public static get avatarUrl(): string { return SDKManager._avatarUrl; } public static set avatarUrl(value: string) { if (value == null) { value = ""; } SDKManager._avatarUrl = value; } //玩家昵称 private static _nickName: string = ""; public static get nickName(): string { return SDKManager._nickName; } public static set nickName(value: string) { if (value == null) { value = "游客"; } SDKManager._nickName = value; } private static sdk_channel:E_SDK_Channel = E_SDK_Channel.WEB //当前SDK渠道 private static video_reward_map:any private static share_reward_map:any private static sdk:any //初始化SDK static init(cb: Function = null) { this.video_reward_map = {} this.share_reward_map = {} logger.log("平台值 wx:",window["wx"], typeof window["wx"]) logger.log("平台值 ks:",window["ks"], typeof window["ks"]) logger.log("平台值 tt:",window["tt"], typeof window["tt"]) if (typeof window["ks"] !== 'undefined') { this.sdk_channel = E_SDK_Channel.KS this.sdk = new KSSDK() //快手 }else if (sys.platform === sys.Platform.WECHAT_GAME && typeof window["wx"] !== 'undefined') { this.sdk_channel = E_SDK_Channel.WX this.sdk = new luffaSDK() //微信 } else if (sys.platform === sys.Platform.BYTEDANCE_MINI_GAME && typeof window["tt"] !== 'undefined') { this.sdk_channel = E_SDK_Channel.BD this.sdk = new ByteDanceSDK() //抖音(头条) } else { this.sdk_channel = E_SDK_Channel.WEB this.sdk = new WebSDK() } logger.log("当前平台:",sys.platform, this.sdk_channel) if (GlobalValue.NpcVideoMod) { GlobalValue.NpcVideoMod = this.sdk_channel === E_SDK_Channel.WX || this.sdk_channel === E_SDK_Channel.WEB } this.sdk.init(cb) SDKManager.umaInit(); } /**是否是微信平台 */ static isWenxin() { return this.sdk_channel === E_SDK_Channel.WX } /**是否是抖音平台 */ static isByteDance() { return this.sdk_channel === E_SDK_Channel.BD } /**是否是快手平台 */ static isKuaishou() { return this.sdk_channel === E_SDK_Channel.KS } /**是否是web平台 */ static isWeb() { return this.sdk_channel === E_SDK_Channel.WEB } //SDK登录,并返回code static login(cb: Function = null) { this.sdk.login(cb) } //检查玩家权限 //autoKey 授权类型 : userInfo=用户信息 static checkAutoSetting(autoKey:string, cb:Function = null) { this.sdk.checkAutoSetting(autoKey, cb) } //获取用户信息 static getUserInfo(cb:Function = null) { this.sdk.getUserInfo(cb) } //注册视频广告回调 static register_video_reward(uuid:string, func:Function) { let video_reward_map = this.video_reward_map || {}; video_reward_map[uuid] = func this.video_reward_map = video_reward_map; } //注册分享回调 static register_share_reward(uuid:string, func:Function) { let share_reward_map = this.share_reward_map || {}; share_reward_map[uuid] = func this.share_reward_map = share_reward_map; } //执行视频广告回调 private static dispatch_video_reward(uuid:string, tag:number) { let video_reward_map = this.video_reward_map || {}; let register_func:Function = video_reward_map[uuid]; if (register_func) { register_func(tag) } } //执行分享回调 private static dispatch_share_reward(uuid:string, tag:number) { let share_reward_map = this.share_reward_map || {}; let register_func:Function = share_reward_map[uuid]; if (register_func) { register_func(tag) } } //视频广告 static show_reward_video_ad(uuid:string, tag: number) { SDKManager.video_ad_pre(); this.sdk.show_video(()=>{ this.dispatch_video_reward(uuid,tag) }); } //看视频广告前 static video_ad_pre() { logger.log("SDKManager 视频广告前") AudioManager.I.PauseMusic(); } //看视频广告后返回游戏 static video_ad_back() { logger.log("SDKManager 视频广告后") AudioManager.I.ResumeMusic(); } //插屏广告 static show_interstitial_ad() { this.sdk.show_splash(); } //展示BANNER static show_banner_ad() { this.sdk.show_banner(); } //隐藏BANNBER static hide_banner_ad() { this.sdk.hide_banner(); } //主动拉起分享 static show_share() { this.sdk.show_share(); } //分享得奖励 static show_reward_share(uuid:string, tag: number) { this.sdk.show_share(()=>{ this.dispatch_share_reward(uuid,tag) }); } //获取设备分辨率 static getWindowSize() { return this.sdk.getWindowSize(); } /**显示游戏圈 * @param leftRatio 左边距占屏幕宽度的比例 * @param topRatio 顶部边距占屏幕高度的比例 * @param widthRatio 游戏圈宽度占屏幕宽度的比例 * @param heightRatio 游戏圈高度占屏幕高度的比例 */ static show_gameClub(leftRatio, topRatio, widthRatio, heightRatio) { this.sdk.show_gameClub(leftRatio, topRatio, widthRatio, heightRatio); } //隐藏游戏圈 static hide_gameClub() { this.sdk.hide_gameClub(); } /**检查是否支持base64音频播放*/ static checkSupportBase64Audio() { return this.sdk.checkSupportBase64Audio(); } /**播放base64音频 */ static playBase64Audio(base64: string, loop: boolean = false) { this.sdk.playBase64Audio(base64, loop); } //记录GM日志 private static _gmLogString: string = ""; private static _gmLogCount: number = 0; //记录日志条数 static get GMLogString(): string { return SDKManager._gmLogString; } static ShowGMLog(log: string){ Utils.Log(log); if (SDKManager._gmLogCount > 100){ SDKManager.ClearGMLog(); } SDKManager._gmLogString += log + "\n"; SDKManager._gmLogCount++; } static ClearGMLog(){ SDKManager._gmLogString = ""; SDKManager._gmLogCount = 0; } /**是否支持客服功能 */ static KefuSupport() { return this.sdk.kefuSupport(); } /**打开客服 */ static OpenKefu() { this.sdk.openKefu(); } //region 播放背景视频 cbMap = {cbReady, cbEnded} static PlayBgAudio(remoteUrl:string, loop:boolean = false, extra:any = {}) { this.sdk.playBgAudio(remoteUrl, loop, extra); } //添加要播放的表情视频 static AddEmoAudio(remoteUrl:string, vtype:VideoRoleType, loop:boolean = false, extra:any = {}) { this.sdk.addEmoAudio(remoteUrl, vtype, loop, extra); } //region 语音转文字 static startRecordRecognition() { if (this.sdk.startRecordRecognition) { this.sdk.startRecordRecognition(); } else { Utils.Log("sdk not support startRecordRecognition"); } } static stopRecordRecognition() { if (this.sdk.stopRecordRecognition) { this.sdk.stopRecordRecognition(); } else { Utils.Log("sdk not support stopRecordRecognition"); } } //region 复制到剪贴板 /**复制文本到剪贴板 */ static copyToClipboard(text: string, cb?: Function) { if (this.sdk.copyToClipboard) { this.sdk.copyToClipboard(text, cb); } else { Utils.Log("当前平台不支持复制功能"); cb && cb(false); } } //region 友盟+ static Uma_Event_TalkRound = "_um.talk.round"; //聊天轮次 static Uma_Event_LvUnlock = "_um.lv.unlock"; //解锁新关卡 /**初始化友盟 */ static umaInit() { this.sdk.umaInit(); } /**友盟功能是否生效 */ static umaSwt() { return this.sdk.umaSwt(); } /**友盟事件上报 */ static umaEvent(eventName: string, value: any = {}) { this.sdk.umaEvent(eventName, value); } }