AppClue.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { sys } from "cc";
  2. import { Framework } from "../../framework/Framework";
  3. import { StringUtil } from "../../framework/util/StringUtil";
  4. import { TimeUtil } from "../../framework/util/TimeUtil";
  5. import { Sha1 } from "./Sha1";
  6. export enum ClueType {
  7. active = 0, //激活
  8. active_register, //注册
  9. active_pay, //付费
  10. next_day_open = 6, //次留
  11. game_addiction = 25, //关键行为
  12. }
  13. class Clue {
  14. private _clue_token: string = "";
  15. private _ad_id: string = "";
  16. private _creative_id: string = "";
  17. private _req_id: string = "";
  18. private _advertiser_id: string = "";
  19. open_id: string = "";
  20. init() {
  21. if (sys.platform == sys.Platform.WECHAT_GAME) {
  22. // @ts-ignore
  23. let obj = wx.getLaunchOptionsSync();
  24. let str = "path:/pages/index.html?clue_token=首都华盛顿国会大厦解开了&ad_id=啊啊啊啊啊&creative_id=啵啵啵宝宝&req_id=阿斯顿法国代购&advertiser_id=丰厚的发";
  25. let sign1 = "clue_token=";
  26. let sign2 = "&ad_id=";
  27. this._clue_token = str.slice(str.indexOf(sign1) + sign1.length, str.indexOf(sign2));
  28. sign1 = "ad_id=";
  29. sign2 = "&creative_id";
  30. this._ad_id = str.slice(str.indexOf(sign1) + sign1.length, str.indexOf(sign2));
  31. sign1 = "creative_id=";
  32. sign2 = "&req_id";
  33. this._creative_id = str.slice(str.indexOf(sign1) + sign1.length, str.indexOf(sign2));
  34. sign1 = "req_id=";
  35. sign2 = "&advertiser_id";
  36. this._req_id = str.slice(str.indexOf(sign1) + sign1.length, str.indexOf(sign2));
  37. sign1 = "advertiser_id=";
  38. this._advertiser_id = str.slice(str.indexOf(sign1) + sign1.length, str.length);
  39. this.send(ClueType.active);
  40. let register_time = Framework.storage.get("register_time", 0);
  41. if (register_time != 0) {
  42. let cur_time = TimeUtil.getTimeEx(0);
  43. if (TimeUtil.getDayInterval(cur_time, register_time) == 1) {
  44. this.send(ClueType.next_day_open);
  45. Framework.storage.get("register_time", cur_time);
  46. }
  47. }
  48. }
  49. }
  50. //签名
  51. private _sign(token: string, timestamp: number, nonce: string) {
  52. let strList = [token, timestamp, nonce];
  53. strList.sort();
  54. let buffer = "";
  55. strList.forEach(str => { buffer += str; })
  56. return (new Sha1(buffer)).hex_sha1();
  57. }
  58. //报告
  59. send(type: ClueType, props: Object = null) {
  60. if (sys.platform == sys.Platform.WECHAT_GAME) {
  61. let time = TimeUtil.getTimeEx(0);
  62. let random = StringUtil.getUUID(64);
  63. let data = {
  64. "clue_token": this._clue_token,
  65. "union_id": "",
  66. "open_id": this.open_id,
  67. "event_type": type.toString(),
  68. "props": props || {},
  69. };
  70. let url = StringUtil.format("https://xxx.com/xxx?timestamp={0}&nonce={1}&signature={2}", time, random, this._sign(this._clue_token, time, random));
  71. this._post(url, data, (code: number, resp: any | null) => {
  72. if (code == 1 && resp) {
  73. console.log("上报成功");
  74. }
  75. });
  76. }
  77. }
  78. private _post(url: string, data: object | string, callback: (statusCode: number, resp: any | null) => any) {
  79. let xhr = new XMLHttpRequest();
  80. xhr.timeout = 2000;
  81. xhr.open("POST", url, true);
  82. xhr.setRequestHeader("Content-Type", "application/json");
  83. xhr.onreadystatechange = () => {
  84. if (xhr.readyState == 4 && xhr.status >= 200 && xhr.status < 400) {
  85. let resp = null;
  86. try {
  87. if (xhr.responseText != "") {
  88. resp = JSON.parse(xhr.responseText);
  89. }
  90. } catch (e) {
  91. }
  92. callback && callback(1, resp);
  93. }
  94. };
  95. xhr.onerror = () => {
  96. callback && callback(0, null);
  97. };
  98. xhr.ontimeout = () => {
  99. callback && callback(0, null);
  100. };
  101. let text = typeof (data) == "string" ? data : JSON.stringify(data);
  102. xhr.send(text);
  103. return xhr;
  104. }
  105. }
  106. export let AppClue = new Clue();