CocosHandler.ts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. /*
  2. * @Author: mojunshou 1637302775@qq.com
  3. * @Date: 2025-03-31 10:45:44
  4. * @LastEditors: mojunshou 1637302775@qq.com
  5. * @LastEditTime: 2025-04-09 18:53:56
  6. * @Description: CocosHandler 处理类负责与安卓交互
  7. */
  8. import { native } from 'cc';
  9. import { _decorator } from 'cc';
  10. import { DeviceUtil } from 'db://oops-framework/core/utils/DeviceUtil';
  11. import { smc } from '../SingletonModuleComp';
  12. import { Account } from '../../account/Account';
  13. import { oops } from 'db://oops-framework/core/Oops';
  14. import { GameEvent } from '../config/GameEvent';
  15. import { ProtocolEvent } from './ProtocolEvent';
  16. import { AndroidEvent } from '../config/AndroidEvent';
  17. import { UIID } from '../config/GameUIConfig';
  18. import { get } from 'http';
  19. const { ccclass, property } = _decorator;
  20. type CocosHandlerType = {
  21. method: string;
  22. param?: string;
  23. }
  24. export class CocosHandler {
  25. // 单例模式
  26. private static _inst: CocosHandler;
  27. public static get inst(): CocosHandler {
  28. if (!this._inst) {
  29. this._inst = new CocosHandler();
  30. }
  31. return this._inst;
  32. }
  33. // 发送消息到 Android
  34. public async sendMessageToAndroid(data: CocosHandlerType) {
  35. if (DeviceUtil.isAndroid && DeviceUtil.isNative) {
  36. let result = await native.reflection.callStaticMethod("com/cocos/game/AtmobCocosCaller", "call", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", data.method, data.param);
  37. return result;
  38. }
  39. }
  40. //获取隐私授权状态
  41. async getPrivacyStatus() {
  42. const data: CocosHandlerType = {
  43. method: "privacy.grant.get",
  44. }
  45. let result = await this.sendMessageToAndroid(data);
  46. console.log("安卓返回隐私授权状态", result);
  47. return JSON.parse(result);
  48. }
  49. //保存隐私授权状态
  50. async savePrivacyStatus(status: boolean) {
  51. const param = {
  52. "granted": status,
  53. }
  54. const data: CocosHandlerType = {
  55. method: "privacy.grant.set",
  56. param: JSON.stringify(param)
  57. }
  58. let result = await this.sendMessageToAndroid(data);
  59. console.log("安卓返回隐私授权状态", result);
  60. return JSON.parse(result);
  61. }
  62. //打开隐私协议或者用户协议
  63. openAgreement() {
  64. const type = smc.account.AccountModel.protocolType;
  65. const param = {
  66. "url": type == 1 ? oops.config.game.gamePrivacyUrl : oops.config.game.gameProtocolUrl
  67. }
  68. const data: CocosHandlerType = {
  69. method: "system.browser.open",
  70. param: JSON.stringify(param)
  71. }
  72. this.sendMessageToAndroid(data);
  73. }
  74. //微信登录
  75. async wechat_login() {
  76. const param = {
  77. "callback":
  78. {
  79. "onSuccess": "CocosHandler.inst.wechat_login_success",
  80. "onFaile": "CocosHandler.inst.wechat_login_fail"
  81. }
  82. }
  83. const data: CocosHandlerType = {
  84. method: "auth.wechat",
  85. param: JSON.stringify(param)
  86. }
  87. this.sendMessageToAndroid(data);
  88. }
  89. //微信登录成功回调
  90. wechat_login_success(str: string) {
  91. console.log("微信登录成功回调", str);
  92. //保存数据
  93. // oops.message.dispatchEvent(GameEvent.WechatLoginSuss);
  94. // 获取用户信息
  95. //然后就是和服务器通信
  96. this.wx_login(str);
  97. }
  98. //微信登录失败回调
  99. wechat_login_fail(str: string) {
  100. console.log("微信登录失败回调", str);
  101. oops.gui.toast("微信登录失败");
  102. }
  103. //==================跟服务器交互======================
  104. //微信登录
  105. async wx_login(code: string) {
  106. const param = {
  107. "code": code,
  108. "url": ProtocolEvent.WechatLogin
  109. }
  110. const data: CocosHandlerType = {
  111. method: "request.post",
  112. param: JSON.stringify(param)
  113. }
  114. let result = await this.sendMessageToAndroid(data);
  115. console.log("微信登录结果", result);
  116. if (result.data) {
  117. this.getAccountInfo();
  118. }
  119. }
  120. //获取账号信息
  121. getAccountInfo() {
  122. const param = {
  123. "url": ProtocolEvent.AccountInfo,
  124. "callback": {
  125. "onSuccess": "CocosHandler.inst.getAccountInfo_success",
  126. "onFail": "CocosHandler.inst.getAccountInfo_fail"
  127. }
  128. }
  129. this.sendMsgToServer(param);
  130. }
  131. //获取账号信息成功回调
  132. getAccountInfo_success(str: string) {
  133. console.log("获取账号信息成功回调", str);
  134. //保存账号信息
  135. let data = JSON.parse(str);
  136. smc.account.AccountModel.uid = data.uid;
  137. console.log("uid>>>>>>>", data.uid);
  138. smc.account.AccountModel.curScore = data.currentLevelInfo.score;
  139. smc.account.AccountModel.curLevel = data.currentLevelInfo.level;
  140. smc.account.AccountModel.targetScore = smc.account.AccountModel.curLevelConfig.score;
  141. smc.account.AccountModel.curLevelConfig = data.currentLevelConf;
  142. smc.account.AccountModel.costInfo = data.handlingChargeConf;
  143. smc.account.AccountModel.isLogined = data.logined;
  144. smc.account.AccountModel.accountName = data.nickname;
  145. smc.account.AccountModel.uid = data.uid;
  146. smc.account.AccountModel.headUrl = data.headImgUrl;
  147. oops.message.dispatchEvent(GameEvent.UserLogin);
  148. }
  149. //获取账号信息失败回调
  150. getAccountInfo_fail(code: number, str: string) {
  151. console.log("获取账号信息失败回调", str);
  152. }
  153. //领取每日奖励
  154. getDailyReward(level: number) {
  155. const param = {
  156. "url": ProtocolEvent.GetDailyReward,
  157. "param": {
  158. "level": level
  159. },
  160. "callback": {
  161. "onSuccess": "CocosHandler.inst.getDailyReward_success",
  162. "onFail": "CocosHandler.inst.request_fail"
  163. }
  164. }
  165. this.sendMsgToServer(param);
  166. }
  167. //领取每日奖励成功回调
  168. getDailyReward_success(str: string) {
  169. console.log("领取每日奖励成功回调", str);
  170. }
  171. //======获取红包提现列表数据
  172. getDailyTaskReward() {
  173. //先请求一遍用户道具信息
  174. this.getUserItemInfo();
  175. const param = {
  176. "url": ProtocolEvent.GetDailyTask,
  177. "callback": {
  178. "onSuccess": "CocosHandler.inst.getDailyTaskReward_success",
  179. "onFail": "CocosHandler.inst.request_fail"
  180. }
  181. }
  182. this.sendMsgToServer(param);
  183. }
  184. //获取红包提现列表数据成功回调
  185. getDailyTaskReward_success(str: string) {
  186. console.log("获取红包提现列表数据成功回调", str);
  187. //这里再打开记录
  188. oops.message.dispatchEvent(GameEvent.openRedBagView, "openRedBagView");
  189. }
  190. //获取用户道具信息
  191. getUserItemInfo() {
  192. const param = {
  193. "url": ProtocolEvent.UserItemInfo,
  194. "callback": {
  195. "onSuccess": "CocosHandler.inst.getUserItemInfo_success",
  196. "onFail": "CocosHandler.inst.request_fail"
  197. }
  198. }
  199. this.sendMsgToServer(param);
  200. }
  201. //获取用户道具信息成功
  202. getUserItemInfo_success(str: string) {
  203. console.log("获取用户道具信息成功回调", str);
  204. //保存用户道具信息
  205. let result = JSON.parse(str);
  206. // smc.account.AccountModel.setUserItemInfo(result);
  207. smc.account.AccountModel.gameCoin = result.data.props["1005"];
  208. smc.account.AccountModel.cashCoin = result.data.props["1004"];
  209. smc.account.AccountModel.handlingCharge = result.data.props["1009"];
  210. smc.account.AccountModel.goldCoin = result.data.propsp["1006"];
  211. }
  212. //获取提现记录
  213. getRecordList() {
  214. const param = {
  215. "url": ProtocolEvent.GetWithdrawRecord,
  216. "param": {
  217. "offset": 0,
  218. "limit": 50
  219. },
  220. "callback": {
  221. "onSuccess": "CocosHandler.inst.getRecordList_success",
  222. "onFail": "CocosHandler.inst.request_fail"
  223. }
  224. }
  225. this.sendMsgToServer(param);
  226. }
  227. //获取提现记录成功
  228. getRecordList_success(str: string) {
  229. console.log("获取提现记录成功>>>>>>>>>>", str)
  230. let result = JSON.parse(str);
  231. if (result.count > 0) {
  232. smc.account.AccountModel.recordList = result.data.list;
  233. }
  234. oops.message.dispatchEvent(GameEvent.openRecordView);
  235. }
  236. //发送信息给服务器
  237. sendMsgToServer(param: any) {
  238. const data: CocosHandlerType = {
  239. method: "request.post",
  240. param: JSON.stringify(param)
  241. }
  242. this.sendMessageToAndroid(data);
  243. }
  244. request_fail(code: number, str: string) {
  245. console.log("请求失败回调", code, str);
  246. }
  247. //=================================以下是广告方法====================
  248. //每次启动都加载一次启屏广告
  249. async ad_interstitial_start() {
  250. const param = {
  251. "funcId": "101",
  252. "callback":
  253. {
  254. "onShowFailed": "ad_splash_onShowFailed",
  255. "onClose": "CocosHandler.inst.ad_splash_close"
  256. }
  257. }
  258. const data: CocosHandlerType = {
  259. method: "ad.splash",
  260. param: JSON.stringify(param)
  261. }
  262. let result = await this.sendMessageToAndroid(data);
  263. console.log("启屏广告返回数据", result);
  264. return result;
  265. }
  266. //启屏广告关闭时回调
  267. async ad_splash_close() {
  268. if (oops.gui.has(UIID.KindTips)) {
  269. oops.gui.remove(UIID.KindTips);
  270. }
  271. if (oops.gui.has(UIID.Retention)) {
  272. oops.gui.remove(UIID.Retention);
  273. }
  274. let result = await CocosHandler.inst.savePrivacyStatus(true);
  275. if (result.code == 0) {
  276. //广告结束后调用登录
  277. this.getAccountInfo();
  278. }
  279. }
  280. //启屏广告加载失败
  281. ad_splash_onShowFailed() {
  282. this.getAccountInfo();
  283. }
  284. //广告请求--插屏广告
  285. async ad_interstitial(code: string) {
  286. const param = {
  287. "funcId": code,
  288. "callback":
  289. {
  290. "onLoaded": "",
  291. "onLoadFailed": "CocosHandler.inst.ad_interstitial_load_failed",
  292. "onShow": "",
  293. "onShowFailed": "CocosHandler.inst.ad_interstitial_show_failed",
  294. "onClose": "CocosHandler.inst.ad_interstitial_close"
  295. }
  296. }
  297. const data: CocosHandlerType = {
  298. method: "ad.interstitial",
  299. param: JSON.stringify(param)
  300. }
  301. let result = await this.sendMessageToAndroid(data);
  302. return result;
  303. }
  304. //广告关闭回调
  305. ad_interstitial_close(type: boolean) {
  306. console.log("广告关闭回调", type);
  307. }
  308. //广告加载成功回调
  309. ad_interstitial_loaded() {
  310. console.log("广告加载成功回调");
  311. }
  312. //广告加载失败回调
  313. ad_interstitial_load_failed(msg: string) {
  314. console.log("广告加载失败回调", msg);
  315. }
  316. //广告显示失败回调
  317. ad_interstitial_show_failed() {
  318. console.log("广告显示失败回调");
  319. }
  320. //广告请求--激励视频广告
  321. async ad_reward(id: number) {
  322. const param = {
  323. "funcId": `${id}`,
  324. "callback":
  325. {
  326. "onClose": "CocosHandler.inst.ad_reward_close"
  327. }
  328. }
  329. const data: CocosHandlerType = {
  330. method: "ad.reward",
  331. param: JSON.stringify(param)
  332. }
  333. let result = await this.sendMessageToAndroid(data);
  334. return result;
  335. }
  336. //激励视频广告关闭回调
  337. ad_reward_close(str: string) {
  338. console.log("激励视频广告关闭回调", str);
  339. }
  340. }
  341. window['CocosHandler'] = CocosHandler;