| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 |
- import { DataEventId } from "../../game/data/GameData";
- /**
- * Jsb管理类(与安卓Java类或者IOS交互)
- * @description
- * @author 冯聪
- */
- export default class JsbSystem {
- /**代码桥在AS中的路径 */
- private static _JSB_ANDROID_PATH: string = "org/cocos2dx/javascript/thirdSdk/ThirdSdkMgr";
- /**代码桥在IOS中的路径 */
- private static _JSB_IOS_PATH: string = "ThirdSdkMgr";
- /**代码桥在AS中的路径 */
- private static _JSB_ANDROID_PATH_JSDK: string = "org/cocos2dx/javascript/thirdSdk/ysdk/YSDKMgr";
- /**
- * 是否文件存在
- * @param filePath 文件路径
- * @returns 是否文件存在 boolean
- */
- public static isFileExist(fileName: string): boolean {
- if (cc.sys.os == cc.sys.OS_WINDOWS) {
- return true;
- }
- let filePath = this.getWritablePath() + fileName + ".apk";
- return jsb.fileUtils.isFileExist(filePath);
- }
- /**
- * 获取写入的路径
- * @description
- * @returns path 写入路径(string)
- */
- public static getWritablePath(): string {
- return jsb.fileUtils.getWritablePath();
- }
- /**
- * 调用项目工程静态方法
- * @description 调用Android与IOS对应的静态方法
- * @param path 调用路径:"org/cocos2dx/javascript/AppActivity":java中的包名(.换成/)+class文件名,就当是路径好了
- * @param methodName 调用的方法名:必须public static
- * @param methodSignature 方法签名:“(Ljava/lang/String;)Ljava/lang/String;”:()内的是调用的java方法的参数类型,()外面的是返回值类
- * @param parameters 参数:是java方法需要传入的参数(可以多个,与methodSignature中()内的数量和类型一一对应)
- */
- public static callStaticMethod(path: string, methodName: string, methodSignature: string, ...parameters: any): any {
- let value = jsb.reflection.callStaticMethod(path, methodName, methodSignature, ...parameters);
- return value;
- }
- /**
- * Java调用返回测试
- * @description 自定义功能 JavaToCocos
- */
- public static backTest() {
- }
- /**
- * 更新设备信息
- * @description 自定义功能 JavaToCocos
- * @param info info(Java返回)
- */
- public static updateDeviceInfo(info) {
- mk.console.log("===[JsbSystem] updateDeviceInfo", info)
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- gData.appData.updateDeviceInfo(info);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /** 获取手机授权 */
- public static checkPermission() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "checkPermission", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- jsb.reflection.callStaticMethod("GameConfig", "checkPermission:", "");
- }
- }
- /**
- * 获取设备信息
- * @description 自定义功能 CocosToJava
- */
- public static getDeviceInfo() {
- let deviceInfo = "";
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- deviceInfo = this.callStaticMethod(this._JSB_ANDROID_PATH, "getDeviceInfo", "()Ljava/lang/String;");
- console.log("===[JsbSystem] getDeviceInfo ", deviceInfo);
- gData.appData.updateDeviceInfo(deviceInfo);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod(this._JSB_IOS_PATH, "getDeviceInfo", "");
- }
- else {
- gData.appData.getDeviceInfoCompelete = true;
- }
- }
- /**
- * 获取包名
- * @description 自定义功能 CocosToJava
- * @returns packName 包名
- */
- public static getPackageName() {
- let packName = '';
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- packName = this.callStaticMethod(this._JSB_ANDROID_PATH, "getPackageName", "()Ljava/lang/String;");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- packName = this.callStaticMethod("CsjAdReward", "getPackageName", "");
- }
- return packName;
- }
- /**
- * 获取appid 和 配置version
- * @description 自定义功能 CocosToJava
- * @returns appid
- */
- public static getWxAppId() {
- let unicodeStr = "";
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- unicodeStr = this.callStaticMethod(this._JSB_ANDROID_PATH, "getWxAppId", "()Ljava/lang/String;");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- unicodeStr = this.callStaticMethod("CsjAdReward", "getWxAppId", "",);
- }
- let unicodeArr = unicodeStr.split(';');
- if (unicodeArr) {
- gData.appData.appId = unicodeArr[0];
- gData.appData.version = unicodeArr[1];
- }
- if (CC_DEBUG) {
- gData.appData.appId = "wxcf31f0e54f7fefda";
- gData.appData.version = "1.6.1";
- }
- // console.log('gData.appData ', unicodeStr)
- // console.log('gData.appData.appId ', gData.appData.appId)
- // console.log('gData.appData.version ', gData.appData.version)
- }
- /**
- * 获取广告渠道和相关id
- * @description 自定义功能 CocosToJava
- * @returns str
- */
- public static getAdvertisingChannel(): string {
- let str = "";
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- str = this.callStaticMethod(this._JSB_ANDROID_PATH, "getAdvertisingChannel", "()Ljava/lang/String;");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- str = this.callStaticMethod("CsjAdReward", "AdvertisingChannel", "");
- }
- return str;
- }
- /** 显示开屏 */
- static showSplash() {
- // mk.data.sendDataEvent('slashAd', '开屏')
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "showSplash", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- jsb.reflection.callStaticMethod("GameConfig", "showSplash:", "");
- }
- }
- /**
- * 复制到剪切板
- * @description Andorid功能 CocosToJava
- * @param str 剪切板字符串内容
- */
- public static setClipboard(str: string) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "setClipboard", "(Ljava/lang/String;)V", str);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- else if (cc.sys.isBrowser) {
- var input = str;
- const el: any = document.createElement('textarea');
- el.value = input;
- el.setAttribute('readonly', '');
- el.style.contain = 'strict';
- el.style.position = 'absolute';
- el.style.left = '-9999px';
- el.style.fontSize = '12pt';
- const selection = getSelection();
- var originalRange: any = false;
- if (selection.rangeCount > 0) {
- originalRange = selection.getRangeAt(0);
- }
- document.body.appendChild(el);
- el.select();
- el.selectionStart = 0;
- el.selectionEnd = input.length;
- var success = false;
- try {
- success = document.execCommand('copy');
- } catch (err) { }
- document.body.removeChild(el);
- if (originalRange) {
- selection.removeAllRanges();
- selection.addRange(originalRange);
- }
- return success;
- }
- }
- /**
- * 请求用户授权
- * @description Andorid功能 CocosToJava
- */
- public static requestPermission() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "requestPermission", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "requestPermission", "");
- }
- }
- /**
- * 获取安卓的版本号
- * @description Andorid功能 CocosToJava
- */
- public static getAppVersion() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "getAppVersion", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "getAppVersion", "");
- }
- }
- /**
- * 设置安卓得版本号
- * @description Andorid功能 JavaToCocos
- * @param appVersion app版本号
- */
- public static setAppVersion(appVersion: string) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- // GameConst.appVersion = appVersion;
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /**
- * 安装apk
- * @description Andorid功能 CocosToJava
- * @param apkName apkName
- */
- public static installApk(apkName: string) {
- let fullPath = this.getWritablePath() + apkName + ".apk";
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "installApk", "(Ljava/lang/String;)V", fullPath);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("GameConfig", "installApk:", "");
- }
- }
- /**
- * 是否可以启动游戏
- * @param packageName 包名
- * @param start 如存在是否启动
- * @returns ifCan
- */
- public static ifCanStartGame(packageName: string, start: boolean): boolean {
- let isCan = false;
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- isCan = this.callStaticMethod(this._JSB_ANDROID_PATH, "isStartGame", "(Ljava/lang/String;Z)Z", packageName, start);
- return isCan;
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- isCan = this.callStaticMethod("GameConfig", "installApk:", "");
- }
- return isCan;
- }
- /**
- * 数数事件注册
- * @description 数数SDK功能
- * @returns
- */
- static setTAEventRegister() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "setTAEventRegister", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /**
- * 发送自定义事件 自定义功能 CocosToJava
- * @description 发送统计事件
- * @param key 事件的key值
- * @param value 事件的value值
- */
- public static sendEvent(key: string, value: string) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "sendEvent", "(Ljava/lang/String;Ljava/lang/String;)V", key, value);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /**
- * 发送自定义事件 自定义功能 CocosToJava
- * @description 发送统计事件
- * @param key 事件的key值
- * @param value 事件的value值
- */
- public static sendEventValue(key: string, value: string, value1: number) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "sendEventValue", "(Ljava/lang/String;Ljava/lang/String;F)V", key, value, value1);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /**
- * 设置人物属性
- * @param type 0 set 1 add
- * @param property 属性名
- * @param value 数值
- */
- public static setTAEventUser(type: number, property: string, value: number) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "setTAEventUser", "(ILjava/lang/String;F)V", type, property, value);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /**
- * 设置人物属性
- * @param type 0 set 1 add
- * @param property 属性名
- * @param value 数值
- */
- public static setTAEventUserStr(type: number, property: string, value: string) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "setTAEventUserStr", "(ILjava/lang/String;Ljava/lang/String;)V", type, property, value);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /** 设置人物uin到数数
- * id uin
- */
- public static setTAUserID(id: string) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "setTAUserID", "(Ljava/lang/String;)V", id);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- /**
- * 微信授权
- * @description 微信SDK功能 CocosToJava
- */
- public static WxAuth() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "WxAuth", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "WxAuth", "");
- }
- }
- /**
- * 获取授权code
- * @description 微信SDK功能 JavaToCocos
- * @param code 微信code(Java返回)
- */
- public static onGetWxAccessCode(code) {
- // 暂时注释,需要网络通信
- gData.wechatData.code = code;
- console.log("=== gData.wechatData.code", gData.wechatData.code);
- gData.loginData.wxLogin();
- }
- public static WXLaunchMiniProgram(ghId, path) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "WXLaunchMiniProgram", "(Ljava/lang/String;Ljava/lang/String;)V", ghId, path);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "WXLaunchMiniProgram", "");
- }
- }
- /**
- * 微信打开小游戏
- * @description 微信SDK功能 CocosToJava
- */
- public static OpenMiniGame() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "OpenMiniGame", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "WxAuth", "");
- }
- }
- /**
- * 分享成微信小游戏
- * @description 微信SDK功能 CocosToJava
- */
- public static ShareToMiniGame() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "ShareToMiniGame", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "WxAuth", "");
- }
- }
- /**
- * 分享图片
- * @description 微信SDK功能 CocosToJava
- */
- public static sharePic() {
- if (cc.sys.platform == cc.sys.WECHAT_GAME) {
- return
- }
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- jsb.reflection.callStaticMethod(this._JSB_ANDROID_PATH, "sharePic", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- jsb.reflection.callStaticMethod("GameConfig", "sharePic:", "");
- }
- }
- /** 打开微信 */
- public static openWx() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH, "openWx", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "openWx", "");
- }
- }
- /** 下载文件
- * @param url 下载地址
- * @param fileName 存储文件名称
- * @param successCb 成功回调
- * @param failCb 失败回调
- * @param progressCb 下载进度回调
- */
- public static downFile2Local(url, fileName, successCb, failCb, progressCb): any {
- var fullPath = jsb.fileUtils.getWritablePath() + fileName
- if (jsb) {
- var downloader = new jsb.Downloader();
- downloader.setOnFileTaskSuccess(function () {
- console.log("DownLoadM setOnFileTaskSuccess", "")
- if (successCb) {
- console.log("DownLoadM result... ", jsb.fileUtils.isFileExist(fullPath))
- console.log("DownLoadM setOnFileTaskSuccess fullPath...", fullPath)
- successCb(fullPath);
- }
- });
- downloader.setOnTaskError(function (task: any, errorCode: number, errorCodeInternal: number, errorStr: string) {
- console.log("DownLoadM setOnTaskError", errorCode + " ; " + errorCodeInternal + " ; " + errorStr)
- if (failCb) {
- failCb(fullPath);
- }
- });
- downloader.setOnTaskProgress(function (task: any, bytesReceived: number, totalBytesReceived: number, totalBytesExpected: number) {
- console.log("DownLoadM", bytesReceived + " ; " + totalBytesReceived + " ; " + totalBytesExpected)
- if (progressCb) {
- progressCb(bytesReceived, totalBytesReceived, totalBytesExpected)
- }
- });
- downloader.createDownloadFileTask(url, fullPath);//创建下载任务
- return downloader
- }
- }
- private static singleClick = true;
- /** 上传开屏广告星云埋点 */
- public static updateSplashAdLog(info) {
- let arr = info.split('#')
- // console.log('updateSplashAdLog placementId ', arr[0])
- // console.log('updateSplashAdLog callbackInfo ', arr[1])
- let type = 6;
- if (arr[2]) {
- type = parseInt(arr[2]);
- }
- let data = JSON.parse(arr[1])
- gData.adData.updateADLog(type, arr[0], data);
- if (type == 6) {
- let times = mk.storage.getStorage('ad_openEcpm');
- if (!times) {
- times = 1;
- }
- else {
- times++;
- }
- mk.storage.setStorage('ad_openEcpm', times);
- if (times <= 300) {
- if (times <= 50) {
- mk.data.sendDataEventValue(DataEventId.ad_openEcpm, `ad_video_ecpm${times}`, data.adsource_price);
- }
- else if (times % 10 == 0) {
- mk.data.sendDataEventValue(DataEventId.ad_openEcpm, `ad_video_ecpm${times}`, data.adsource_price);
- }
- }
- }
- else if (type == 54) {
- mk.data.sendDataEvent(DataEventId.ad_click, '开屏点击');
- if (this.singleClick) {
- this.singleClick = false;
- gData.adData.updateADLog(74, arr[0], data);
- }
- }
- }
- /** 获取阿里风控设备token */
- public static getAliRiskDeviceToken() {
- let token = '';
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- token = this.callStaticMethod(this._JSB_ANDROID_PATH, "getAliDeviceToken", "()Ljava/lang/String;");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- token = this.callStaticMethod("AppController", "openWx", "");
- }
- return token;
- }
- /** 初始化ysdk */
- public static ysdkInit() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH_JSDK, "init", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "init", "");
- }
- }
- /** ysdk登录 */
- public static autologin() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.callStaticMethod(this._JSB_ANDROID_PATH_JSDK, "autologin", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- this.callStaticMethod("AppController", "autologin", "");
- }
- }
- public static ysdkAuthSuccess() {
- gData.loginData.passAnti = true;
- }
- /** 统计时长 */
- public static updateActivateLog(sessionDuration) {
- console.log('test>>> updateActivateLog ', sessionDuration)
- let data = {
- 'appId': gData.appData.appId,
- 'uin': gData.loginData.uin,
- 'sessionDuration': sessionDuration
- }
- mk.http.sendData('activateLog', data);
- }
- //风控-------------------------------------------------------------------------------
- /** 数盟获取Id */
- public static getQueryID() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- jsb.reflection.callStaticMethod(this._JSB_ANDROID_PATH, "getQueryID", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- jsb.reflection.callStaticMethod("GameConfig", "getQueryID:", "");
- }
- }
- /** 数盟设置Id */
- public static setShuzilmEquipID(szlm_did: string) {
- mk.shuzilmM.setShuzilmEquipID(szlm_did);
- }
- /** 同盾初始化 */
- public static tongdunInit() {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- jsb.reflection.callStaticMethod(this._JSB_ANDROID_PATH, "tongdunInit", "()V");
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- jsb.reflection.callStaticMethod("GameConfig", "tongdunInit:", "");
- }
- }
- /** 同盾设置id */
- public static setTDEquipID(equipID: string) {
- mk.tongdunM.setTDEquipID(equipID);
- }
- }
- window['JsbMgr'] = JsbSystem
|