CocosHandler.ts 11 KB

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