// JSBridgeUtils.ts /** * 封装与 Android 原生交互的桥接逻辑。 * * 示例 * import JSBridgeUtils from "../utils/JSBridgeUtils"; * JSBridgeUtils.instance.testAd1(); * 本方法目前仅供laya 台球项目使用 * * */ import GlobalManager from "./GlobalManager"; export default class JSBridgeUtils { private static _instance: JSBridgeUtils; private bridge: any; //****不可变********* */ public static get instance(): JSBridgeUtils { if (!this._instance) { this._instance = new JSBridgeUtils(); } return this._instance; } private constructor() { } public initBridge(): boolean { if (!Laya.Browser.onAndroid) { console.log('zh:非android dev') return; } //console.log("zh:initBridge"); let cfg = window['conchConfig']; if (cfg) { var os = cfg.getOS(); if (os == "Conch-android") // 多android平台需要手动配置 { this.bridge = window['PlatformClass'].createClass("demo.JSBridge"); // 创建脚本代理 if (this.bridge) { // console.log("zh:initBridge ok"); return true; } else { return false; } } else { return false; } } else { return false; } } public testAd1(): void { if (!Laya.Browser.onAndroid) { console.log('zh:非android dev') return; } if (!this.initBridge()) { return; } let rs = this.bridge.call("testString", "hello"); console.log('zh:testString rs=' + rs); } public testAdCallBack(): void { if (!this.initBridge()) { return; } console.log("zh:testAdCallBack start"); const defaultObj = { code: 200, msg: "req update Ui" }; const reqObj = { code: 300, msg: "hello java ui" }; this.bridge.callWithBack((rsStr: string) => { const rsObj = JSON.parse(rsStr); console.log(`zh:testAsyncCallback js收到java返回值=${rsStr}`); }, "testAsyncCallback", JSON.stringify(reqObj)); } //************* */ public showInternAd(mark): boolean { console.log('zh:showInternAd start'); if (!Laya.Browser.onAndroid) { console.log('zh:showInternAd 非android dev') return false; } if (!this.initBridge()) { return false; } let rs = this.bridge.call("showInternAd", mark); // console.log('zh:showInternAd rs= ' + rs + ' ,mark=' + mark); try { const result = JSON.parse(rs); if (result.code === 200) { console.log("zh:showInternAd OK"); // 执行广告展示后的逻辑,例如记录日志、更新UI等 return true; } else { console.warn("zh:showInternAd FAILL:", result.msg); // 可以弹出提示、上报错误、尝试重试等 return false; } } catch (e) { console.error("zh:解析桥接返回值失败:", e); return false; } } public showRewardAd(mark): boolean { if (!Laya.Browser.onAndroid) { console.log('zh:非android dev') return false; } if (!this.initBridge()) { return false; } let rs = this.bridge.call("showRewardAd", mark); console.log('zh:showRewardAd rs= ' + rs + ' ,mark=' + mark); try { const result = JSON.parse(rs); if (result.code === 200) { console.log("zh:广告显示成功"); // 执行广告展示后的逻辑,例如记录日志、更新UI等 return true; } else { console.warn("zh:广告显示失败:", result.msg); // 可以弹出提示、上报错误、尝试重试等 return false; } } catch (e) { console.error("zh:解析桥接返回值失败:", e); return false; } } ///----------------- 事件埋点 start /** * 只记录事件名称,无其他参数 * @param eventName 事件名称 * @returns */ public logEventForAdNoParams(eventName) { console.log("zh:logEventForAdNoParams eventName1=" + eventName); if (!Laya.Browser.onAndroid) { console.log('zh:非android dev') return; } if (!this.initBridge()) { return; } console.log("zh:call logEventForAdNoParams eventName2=" + eventName); this.bridge.call("logEventForAdNoParams", eventName); } /** * 记录事件名称和参数 * @param eventName 事件名称 * @param ev 参数map * @returns */ public logEventForAdHaveParams(eventName, jsonStr) { console.log("zh:ts logEventForAdHaveParams eventName1=" + eventName); if (!Laya.Browser.onAndroid) { console.log('zh:非android dev') return; } if (!this.initBridge()) { return; } console.log("zh:call logEventForAdHaveParams eventName2=" + eventName); console.log("zh:logEventForAdHaveParams req = json=" + jsonStr); this.bridge.call("logEventForAdHaveParams", eventName, jsonStr); } /** * firebase 事件埋点 * @param eventName * @param jsonStr */ public logEventForFirebase(eventName, jsonStr) { console.log("zh:ts logEventForFirebase eventName1=" + eventName); if (!Laya.Browser.onAndroid) { console.log('zh:非android dev') return; } if (!this.initBridge()) { return; } console.log("zh:call logEventForFirebase eventName2=" + eventName); console.log("zh:logEventForFirebase req = json=" + jsonStr); this.bridge.call("logEventForFirebase", eventName, jsonStr); } ///----------------事件埋点 end nativeCallJs(msg: string) { console.log("zh:nativeCallJs received data: 1111", msg); if (msg === 'Ad1') { GlobalManager.instance.callMethod('Ad1') console.log("zh: Ad1 奖励发送成功"); } else if (msg === 'Ad2') { GlobalManager.instance.callMethod('Ad2') console.log("zh: Ad2 奖励发送成功"); } else if (msg === 'Ad3') { GlobalManager.instance.callMethod('Ad3') console.log("zh: Ad3 奖励发送成功"); } else if (msg === 'Ad4') { GlobalManager.instance.callMethod('Ad4') console.log("zh: Ad4 奖励发送成功"); } else if (msg === 'Ad5') { console.log("zh: Ad5 奖励发送成功"); GlobalManager.instance.callMethod('Ad5') } } } // //尝试使用Android/Java执行JS脚本 // // 定义 nativeCallJs 函数并挂载到全局 window 对象 // // nativeCallJs(data: string) { // // console.log("zh:nativeCallJs received data:", data); // // alert("zh:nativeCallJs: " +data); // // };