Commit f76f173b7043b62a68f9292d2cea122219140a95
1 parent
e682ab1b
Exists in
zfb_waibu_linshi
and in
2 other branches
X
Showing
36 changed files
with
3357 additions
and
224 deletions
Show diff stats
sdk/Analytics.ts
1 | -import { LogLevel } from "../wxsdk/service/LogService"; | ||
2 | -import WXSDK from "../wxsdk/WXSDK"; | 1 | +import TAMgr from "../../framework/ta/TAMgr"; |
2 | +import { SDKLogLevel } from "../../framework/wxsdk/service/LogService"; | ||
3 | +import WXSDK from "../../framework/wxsdk/WXSDK"; | ||
4 | + | ||
3 | 5 | ||
4 | 6 | ||
5 | export class Analytics { | 7 | export class Analytics { |
6 | private static _instance: Analytics; | 8 | private static _instance: Analytics; |
7 | - private systemType: number | 9 | + private systemType: number; |
8 | static get I(): Analytics { | 10 | static get I(): Analytics { |
9 | return this._instance || (this._instance = new Analytics); | 11 | return this._instance || (this._instance = new Analytics); |
10 | } | 12 | } |
@@ -20,8 +22,14 @@ export class Analytics { | @@ -20,8 +22,14 @@ export class Analytics { | ||
20 | 22 | ||
21 | // 游戏打点 | 23 | // 游戏打点 |
22 | dot(dot_type: string, data: any = {}) { | 24 | dot(dot_type: string, data: any = {}) { |
23 | - if (typeof wx == 'undefined') return | ||
24 | - // wx.aldSendEvent(dot_type, data); //阿拉丁打点,没需求注释即可 | 25 | + if (typeof wx == 'undefined'&&typeof my == 'undefined') { |
26 | + console.log("dot", dot_type, data); | ||
27 | + return | ||
28 | + } | ||
29 | + // 数数 | ||
30 | + if (['receive_reward', 'button','merge_item','addToTempStore','talk','fund','mail','milktea','mail','activity_welcome','activity_raffle','activity_bp','piggy','invite','apple_tree','energy_cost','gem_cost','gold_cost','dress_cost','gem_output','gold_output','energy_output','exp_output','dress_output'].indexOf(dot_type) == -1) {// 排除部分key | ||
31 | + TAMgr.Ins.dot(dot_type, data); | ||
32 | + } | ||
25 | return WXSDK.stat.dot(dot_type, data); | 33 | return WXSDK.stat.dot(dot_type, data); |
26 | } | 34 | } |
27 | 35 | ||
@@ -82,7 +90,7 @@ export class Analytics { | @@ -82,7 +90,7 @@ export class Analytics { | ||
82 | * @param level 日志等级 | 90 | * @param level 日志等级 |
83 | * @returns | 91 | * @returns |
84 | */ | 92 | */ |
85 | - clientLog(content, level = LogLevel.debug) { | 93 | + clientLog(content, level = SDKLogLevel.debug) { |
86 | return WXSDK.stat.clientLog(content, level) | 94 | return WXSDK.stat.clientLog(content, level) |
87 | } | 95 | } |
88 | /** | 96 | /** |
@@ -109,11 +117,4 @@ export class Analytics { | @@ -109,11 +117,4 @@ export class Analytics { | ||
109 | } | 117 | } |
110 | 118 | ||
111 | 119 | ||
112 | -} | ||
113 | -export enum EventKey { | ||
114 | - toggleScene = 'toggleScene', | ||
115 | - recoverGame = 'recoverGame', | ||
116 | - replayGame = 'replayGame', | ||
117 | - settingClose = 'settingClose', | ||
118 | - updateLvUI = 'updateLvUI', | ||
119 | -} | 120 | +} |
120 | \ No newline at end of file | 121 | \ No newline at end of file |
@@ -0,0 +1,377 @@ | @@ -0,0 +1,377 @@ | ||
1 | +import DataService from "../../framework/wxsdk/service/DataService"; | ||
2 | +import GameService from "../../framework/wxsdk/service/GameService"; | ||
3 | +import WxPay from "../../framework/wxsdk/wx/WxPay"; | ||
4 | +import SDKApiPlus from "./SDKApiPlus"; | ||
5 | + | ||
6 | + | ||
7 | + | ||
8 | +export default class GameServicePlus extends GameService { | ||
9 | + memberSave(content: string, params: any = {}) { | ||
10 | + return SDKApiPlus.memberSave({ uid: DataService.I.UserId, token: DataService.I.Token, content, ...params }); | ||
11 | + } | ||
12 | + | ||
13 | + memberGet() { | ||
14 | + return SDKApiPlus.memberGet({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
15 | + } | ||
16 | + memberSesetAup() { | ||
17 | + return SDKApiPlus.memberSesetAup({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
18 | + } | ||
19 | + | ||
20 | + memberClear() { | ||
21 | + return SDKApiPlus.memberClear({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
22 | + } | ||
23 | + | ||
24 | + getGameNotice() { | ||
25 | + return SDKApiPlus.notice(); | ||
26 | + } | ||
27 | + | ||
28 | + mail() { | ||
29 | + return SDKApiPlus.mail({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
30 | + } | ||
31 | + | ||
32 | + /** | ||
33 | + * 改变邮件状态 | ||
34 | + * @param id id为0或不传id时为 一键领取、一键删除 | ||
35 | + * @param status 1已读 2领取 3删除。如同时修改多个状态格式:1,2 | ||
36 | + * @returns | ||
37 | + */ | ||
38 | + updateMailStatus(id: number, status: string) { | ||
39 | + return SDKApiPlus.mailStatus({ id, status, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
40 | + } | ||
41 | + | ||
42 | + getQRcode() { | ||
43 | + return SDKApiPlus.QRcode(); | ||
44 | + } | ||
45 | + | ||
46 | + convertCDkey(cdkey: string) { | ||
47 | + return SDKApiPlus.cdkey({ uid: DataService.I.UserId, token: DataService.I.Token, cdkey: cdkey }); | ||
48 | + } | ||
49 | + | ||
50 | + clearData() { | ||
51 | + return SDKApiPlus.clearData({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
52 | + } | ||
53 | + | ||
54 | + goodsList() { | ||
55 | + return SDKApiPlus.goodsList({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
56 | + } | ||
57 | + | ||
58 | + createOrder(goodid: string) { | ||
59 | + return SDKApiPlus.createOrder({ uid: DataService.I.UserId, token: DataService.I.Token, goodid }); | ||
60 | + } | ||
61 | + | ||
62 | + queryOrder(no: string) { | ||
63 | + return SDKApiPlus.queryOrder({ uid: DataService.I.UserId, token: DataService.I.Token, no }); | ||
64 | + } | ||
65 | + | ||
66 | + confirmOrder(no: string) { | ||
67 | + return SDKApiPlus.confirmOrder({ uid: DataService.I.UserId, token: DataService.I.Token, no }); | ||
68 | + } | ||
69 | + | ||
70 | + /** | ||
71 | + * 支付 | ||
72 | + * @param params | ||
73 | + * @param opts | ||
74 | + * @returns | ||
75 | + */ | ||
76 | + pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}) { | ||
77 | + return WxPay.I.pay(params, opts); | ||
78 | + } | ||
79 | + /** | ||
80 | + * 订单查询 | ||
81 | + */ | ||
82 | + orderQuery(source) { | ||
83 | + return SDKApiPlus.orderQuery({ | ||
84 | + ...this.buildParams(), | ||
85 | + source | ||
86 | + }); | ||
87 | + } | ||
88 | + /** | ||
89 | + * 订单查询 | ||
90 | + */ | ||
91 | + preorder(goodid: string, orderid: string) { | ||
92 | + return SDKApiPlus.preorder({ | ||
93 | + ...this.buildParams2(), | ||
94 | + token: DataService.I.Token, | ||
95 | + goodid, orderid | ||
96 | + }); | ||
97 | + } | ||
98 | + | ||
99 | + /** | ||
100 | + * 获取玩家历史存档 | ||
101 | + * @param uid | ||
102 | + * @param token | ||
103 | + */ | ||
104 | + getUserHistory(uid: string, token: string) { | ||
105 | + return SDKApiPlus.getUserHistory({ uid: uid, token: token }); | ||
106 | + } | ||
107 | + | ||
108 | + /** | ||
109 | + * 获取玩家历史存档 | ||
110 | + * @param data //需要包含uid,token | ||
111 | + */ | ||
112 | + saveUserHistory(data: any) { | ||
113 | + return SDKApiPlus.saveUserHistory(data); | ||
114 | + } | ||
115 | + | ||
116 | + /** | ||
117 | + * 重置GM标识 | ||
118 | + */ | ||
119 | + setAup(typ: number = 0) { | ||
120 | + return SDKApiPlus.setAup({ uid: DataService.I.UserId, token: DataService.I.Token, typ }); | ||
121 | + } | ||
122 | + | ||
123 | + /** | ||
124 | + * 获取分享图片 | ||
125 | + * @param items 2,1,0|3,1,1|3,1,1|3,1,1|3,1,1格式:2,1,0(类型,id,领取状态)领取状态:1已领取0未领取 | ||
126 | + * @param zoom 图片缩放比例 | ||
127 | + * @returns | ||
128 | + */ | ||
129 | + getShareImage(items: string, zoom: number = 1) { | ||
130 | + return SDKApiPlus.getShareImg({ uid: DataService.I.UserId, token: DataService.I.Token, items, zoom }); | ||
131 | + } | ||
132 | + | ||
133 | + /** | ||
134 | + * 获取我的今日分享 | ||
135 | + * @param refresh 是否刷新 | ||
136 | + */ | ||
137 | + getShare(refresh?: number) { | ||
138 | + let req = { uid: DataService.I.UserId, token: DataService.I.Token }; | ||
139 | + if (refresh) { | ||
140 | + req['refresh'] = refresh; | ||
141 | + } | ||
142 | + return SDKApiPlus.getShare(req); | ||
143 | + } | ||
144 | + | ||
145 | + /** | ||
146 | + * 获取好友分享详情 | ||
147 | + * @param id 分享id | ||
148 | + * @param date 分享日期 格式:20220524 | ||
149 | + */ | ||
150 | + getShareInfo(id: number, date: string) { | ||
151 | + return SDKApiPlus.getShareInfo({ uid: DataService.I.UserId, token: DataService.I.Token, id, date }); | ||
152 | + } | ||
153 | + | ||
154 | + /** | ||
155 | + * 领取好友分享 | ||
156 | + * @param id 分享id | ||
157 | + * @param date 分享日期 格式:20220524 | ||
158 | + * @param itemid 分享选项ID | ||
159 | + */ | ||
160 | + getShareReward(id: number, date: string, itemid: number) { | ||
161 | + return SDKApiPlus.receiveShare({ uid: DataService.I.UserId, token: DataService.I.Token, id, date, itemid }); | ||
162 | + } | ||
163 | + | ||
164 | + /** | ||
165 | + * 领取额外进度奖励 | ||
166 | + * @param id 分享id | ||
167 | + * @param date 分享日期 格式:20220524 | ||
168 | + */ | ||
169 | + getProgressReward(id: number, date: string) { | ||
170 | + return SDKApiPlus.getProgressReward({ uid: DataService.I.UserId, token: DataService.I.Token, id, date }); | ||
171 | + } | ||
172 | + | ||
173 | + saveStory(key: string, data: string) { | ||
174 | + // return SDKApiPlus.saveStory({ | ||
175 | + // id: UserManager.I.curStory.id, | ||
176 | + // lv: UserManager.I.curStory.lv, | ||
177 | + // fbid: UserManager.I.curStory.fbid, | ||
178 | + // fbindex: UserManager.I.curStory.fbindex, | ||
179 | + // data, | ||
180 | + // uid: DataService.I.UserId, | ||
181 | + // token: DataService.I.Token, | ||
182 | + // }); | ||
183 | + } | ||
184 | + | ||
185 | + /** | ||
186 | + * 我的邀请详情 | ||
187 | + * @returns | ||
188 | + */ | ||
189 | + getInviteInfo() { | ||
190 | + return SDKApiPlus.getInviteInfo({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
191 | + } | ||
192 | + | ||
193 | + /** | ||
194 | + * 领取邀请奖励 | ||
195 | + * @param id 挡位id | ||
196 | + */ | ||
197 | + receiveInvite(id: number) { | ||
198 | + return SDKApiPlus.receiveInvite({ uid: DataService.I.UserId, token: DataService.I.Token, id }); | ||
199 | + } | ||
200 | + | ||
201 | + /** | ||
202 | + * 心跳 | ||
203 | + */ | ||
204 | + beatheart() { | ||
205 | + return SDKApiPlus.heartbeat({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
206 | + } | ||
207 | + /** | ||
208 | + * 周卡/月卡列表 | ||
209 | + */ | ||
210 | + recCardList() { | ||
211 | + return SDKApiPlus.recCardList({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
212 | + } | ||
213 | + | ||
214 | + /** | ||
215 | + * 领取周卡/月卡奖励 | ||
216 | + * @param typ 第几天 week周 month月 | ||
217 | + */ | ||
218 | + recCardReward(typ: string) { | ||
219 | + return SDKApiPlus.recCardReward({ uid: DataService.I.UserId, token: DataService.I.Token, typ }); | ||
220 | + } | ||
221 | + | ||
222 | + /** | ||
223 | + * 领取基金列表 | ||
224 | + */ | ||
225 | + recGrowthList() { | ||
226 | + return SDKApiPlus.recGrowthList({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
227 | + } | ||
228 | + | ||
229 | + /** | ||
230 | + * 领取基金列表 | ||
231 | + * @param goodid 购买的基金商品ID | ||
232 | + * @param level 等级 | ||
233 | + */ | ||
234 | + recGrowthReward(goodid: string, level: number) { | ||
235 | + return SDKApiPlus.recGrowthReward({ uid: DataService.I.UserId, token: DataService.I.Token, goodid, level }); | ||
236 | + } | ||
237 | + | ||
238 | + /** | ||
239 | + * 获取无尽礼包数据 | ||
240 | + */ | ||
241 | + recEndlessList(groupId: string) { | ||
242 | + return SDKApiPlus.recEndlessList({ uid: DataService.I.UserId, token: DataService.I.Token, group_id: groupId }); | ||
243 | + } | ||
244 | + | ||
245 | + /** | ||
246 | + * 领取无尽礼包 | ||
247 | + */ | ||
248 | + recEndlessReward(groupId: string, id: string, date: string) { | ||
249 | + return SDKApiPlus.recEndlessReward({ uid: DataService.I.UserId, token: DataService.I.Token, group_id: groupId, id, date }); | ||
250 | + } | ||
251 | + | ||
252 | + /** | ||
253 | + * 获取新手礼包数据 | ||
254 | + */ | ||
255 | + getNewbieGiftData() { | ||
256 | + return SDKApiPlus.getNewbieGiftData({ uid: DataService.I.UserId, token: DataService.I.Token }); | ||
257 | + } | ||
258 | + | ||
259 | + /** | ||
260 | + * 领取新手礼包 | ||
261 | + * @param days 第几天 | ||
262 | + */ | ||
263 | + recNewbieGift(days: string) { | ||
264 | + return SDKApiPlus.recNewbieGift({ uid: DataService.I.UserId, token: DataService.I.Token, days }); | ||
265 | + } | ||
266 | + | ||
267 | + | ||
268 | + /** | ||
269 | + * 订阅消息 | ||
270 | + * @param tmplId 订阅ID | ||
271 | + * @param message 订阅内容 | ||
272 | + * @param sendtime 订阅发送时间s二选一参数 | ||
273 | + * @param times 订阅延迟时间s二选一参数 | ||
274 | + * @param status 1取消以前相同模板信息,默认为0不取消 | ||
275 | + */ | ||
276 | + async sendSubScribe(tmplId: string, message: string, sendtime: number, times: number = 0, status: number = 1) { | ||
277 | + let uid = +DataService.I.UserId; | ||
278 | + let token = DataService.I.Token + ''; | ||
279 | + let openid = DataService.I.OpenId + ''; | ||
280 | + | ||
281 | + let data = { | ||
282 | + uid, | ||
283 | + token, | ||
284 | + openid, | ||
285 | + status, | ||
286 | + message: encodeURIComponent(message), | ||
287 | + temid: tmplId | ||
288 | + }; | ||
289 | + if (times) { | ||
290 | + data["times"] = times; | ||
291 | + } else { | ||
292 | + data["sendtime"] = Math.floor(sendtime); | ||
293 | + } | ||
294 | + let back = await SDKApiPlus.sendsubscribe(data) | ||
295 | + return back; | ||
296 | + } | ||
297 | + | ||
298 | + | ||
299 | + /** | ||
300 | + * 取消订阅消息 | ||
301 | + * @param tmplId 订阅ID | ||
302 | + */ | ||
303 | + async cancelSubscribe(tmplId: string) { | ||
304 | + let uid = +DataService.I.UserId; | ||
305 | + let token = DataService.I.Token + ''; | ||
306 | + let openid = DataService.I.OpenId + ''; | ||
307 | + | ||
308 | + let data = { | ||
309 | + uid, | ||
310 | + token, | ||
311 | + openid, | ||
312 | + temid: tmplId | ||
313 | + }; | ||
314 | + let back = await SDKApiPlus.cancelSubscribe(data) | ||
315 | + return back; | ||
316 | + } | ||
317 | + /** | ||
318 | + * 自定义活动 | ||
319 | + * @param id 活动ID(后台的ID) | ||
320 | + */ | ||
321 | + activityCustom(id?: string) { | ||
322 | + return SDKApiPlus.activityCustom({ id }); | ||
323 | + } | ||
324 | + | ||
325 | + /** | ||
326 | + * 添加排行榜 | ||
327 | + * @param typ 游戏端自定义排行标识 | ||
328 | + * @param fraction 分数 如果上报的分数小于以前上报的分数,则不会更新 | ||
329 | + * @param rankData 扩展字段 | ||
330 | + * @returns | ||
331 | + */ | ||
332 | + rankAddV2(typ: string, fraction: number, rankData?: string) { | ||
333 | + return SDKApiPlus.rankAddV2({ typ, fraction, rankData, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
334 | + } | ||
335 | + /** | ||
336 | + * 排行榜列表 | ||
337 | + * @param percent percent等于1 的时候会返回排行榜总人数和自己的当前排名 | ||
338 | + */ | ||
339 | + rankListV2(typ: string, percent: number = 0) { | ||
340 | + return SDKApiPlus.rankListV2({ typ, percent, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
341 | + } | ||
342 | + /** | ||
343 | + * 活动排行榜配置 | ||
344 | + * @param name 游戏端自定义排行标识 | ||
345 | + */ | ||
346 | + activityRankConfig(name: string) { | ||
347 | + return SDKApiPlus.activityRankConfig({ name, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
348 | + } | ||
349 | + /** | ||
350 | + * 活动排行榜添加分数 | ||
351 | + * @param name 游戏端自定义排行标识 | ||
352 | + * @param score 分数 | ||
353 | + * @param extend 扩展 | ||
354 | + */ | ||
355 | + activityRankAdd(name: string, score: number, extend: string) { | ||
356 | + return SDKApiPlus.activityRankAdd({ name, score, extend, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
357 | + } | ||
358 | + /** | ||
359 | + * 活动排行榜 | ||
360 | + * @param name 游戏端自定义排行标识 | ||
361 | + */ | ||
362 | + activityRankList(name: string) { | ||
363 | + return SDKApiPlus.activityRankList({ name, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
364 | + } | ||
365 | + /** | ||
366 | + * 活动排行榜奖励 | ||
367 | + * @param name 游戏端自定义排行标识 | ||
368 | + */ | ||
369 | + activityRankReward(name: string) { | ||
370 | + return SDKApiPlus.activityRankReward({ name, uid: DataService.I.UserId, token: DataService.I.Token }); | ||
371 | + } | ||
372 | + | ||
373 | + static instance: GameServicePlus; | ||
374 | + static get I(): GameServicePlus { | ||
375 | + return this.instance || (this.instance = new GameServicePlus()); | ||
376 | + } | ||
377 | +} | ||
0 | \ No newline at end of file | 378 | \ No newline at end of file |
@@ -0,0 +1,50 @@ | @@ -0,0 +1,50 @@ | ||
1 | +import { sys } from "cc"; | ||
2 | +import { GAMEDATA } from "../../framework/wxsdk/base/SDKConst"; | ||
3 | +import { SDKToolsPlus } from "./SDKToolsPlus"; | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | +export class Ge { | ||
8 | + private static _instance: GravityAnalyticsAPI; | ||
9 | + static get I(): GravityAnalyticsAPI { | ||
10 | + return this._instance; | ||
11 | + } | ||
12 | + constructor() { | ||
13 | + } | ||
14 | + | ||
15 | + public static init() { | ||
16 | + // console.log("ge初始化") | ||
17 | + const config = { | ||
18 | + accessToken: "ihcpiWLHTqDs5oZEGsnyxCrFXBaSeoju", // 项目通行证,在:网站后台-->管理中心-->应用列表中找到Access Token列 复制(首次使用可能需要先新增应用) | ||
19 | + clientId: SDKToolsPlus.openId, // 用户唯一标识,如微信小程序的openid | ||
20 | + autoTrack: { | ||
21 | + appLaunch: true, // 自动采集 $MPLaunch | ||
22 | + appShow: true, // 自动采集 $MPShow | ||
23 | + appHide: true, // 自动采集 $MPHide | ||
24 | + }, | ||
25 | + name: "ge", // 全局变量名称 | ||
26 | + // debugMode: "debug", // 是否开启测试模式,开启测试模式后,可以在 网站后台--管理中心--元数据--事件流中查看实时数据上报结果。(测试时使用,上线之后一定要关掉,改成none或者删除) | ||
27 | + }; | ||
28 | + let ge = new GravityAnalyticsAPI(config); | ||
29 | + ge.init(); | ||
30 | + let isFirst = sys.localStorage.getItem('tt_register'); | ||
31 | + if (!isFirst) { | ||
32 | + // 首次注册 | ||
33 | + let arr = GAMEDATA.version.split("."); | ||
34 | + let version = +(arr[0] + arr[1] + arr[2]); | ||
35 | + ge.register({ | ||
36 | + name: SDKToolsPlus.uid, | ||
37 | + version, | ||
38 | + wx_openid: SDKToolsPlus.openId, | ||
39 | + wx_unionid: "", | ||
40 | + }).then((success) => { | ||
41 | + // console.log("注册成功", success); | ||
42 | + sys.localStorage.setItem('tt_register', "1") | ||
43 | + }).catch((fail) => { | ||
44 | + // console.error("注册失败", fail) | ||
45 | + }) | ||
46 | + } | ||
47 | + this._instance = ge; | ||
48 | + } | ||
49 | + | ||
50 | +} | ||
0 | \ No newline at end of file | 51 | \ No newline at end of file |
@@ -0,0 +1,144 @@ | @@ -0,0 +1,144 @@ | ||
1 | +import { SDKApi } from "../../framework/wxsdk/http/SDKApi"; | ||
2 | +import DataService from "../../framework/wxsdk/service/DataService"; | ||
3 | +import SDKHttpPlus from "./SDKHttpPlus"; | ||
4 | + | ||
5 | +export default class SDKApiPlus extends SDKApi { | ||
6 | + //公告 | ||
7 | + public static notice = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.notice, ...args); | ||
8 | + //订阅 | ||
9 | + public static sendsubscribe = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.sendsubscribe, ...args); | ||
10 | + //取消订阅 | ||
11 | + public static cancelSubscribe = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.cancelSubscribe, ...args); | ||
12 | + //邮件 | ||
13 | + public static mail = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.mail, ...args); | ||
14 | + //邮件状态修改 | ||
15 | + public static mailStatus = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.mailStatus, ...args); | ||
16 | + //群二维码 | ||
17 | + public static QRcode = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.QRcode, ...args); | ||
18 | + //兑换码 | ||
19 | + public static cdkey = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.cdkey, ...args); | ||
20 | + //删除存档 | ||
21 | + public static clearData = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.clearData, ...args); | ||
22 | + //商品列表 | ||
23 | + public static goodsList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.goodsList, ...args); | ||
24 | + //生成订单 | ||
25 | + public static createOrder = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.createOrder, ...args); | ||
26 | + //查询订单 | ||
27 | + public static queryOrder = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.queryOrder, ...args); | ||
28 | + //确认订单 | ||
29 | + public static confirmOrder = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.confirmOrder, ...args); | ||
30 | + //重置GM标识 | ||
31 | + public static setAup = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.setAup, ...args); | ||
32 | + //获取分享图片 | ||
33 | + public static getShareImg = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getShareImg, ...args); | ||
34 | + //获取今日分享 | ||
35 | + public static getShare = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getShare, ...args); | ||
36 | + //获取分享信息 | ||
37 | + public static getShareInfo = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getShreInfo, ...args); | ||
38 | + //领取好友分享 | ||
39 | + public static receiveShare = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.receiveShare, ...args); | ||
40 | + //领取分享额外奖励 | ||
41 | + public static getProgressReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getProgressReward, ...args); | ||
42 | + //保存副本 | ||
43 | + public static saveStory = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.saveStory, ...args); | ||
44 | + //我的邀请详情 | ||
45 | + public static getInviteInfo = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getInviteInfo, ...args); | ||
46 | + //领取邀请奖励 | ||
47 | + public static receiveInvite = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.receiveInvite, ...args); | ||
48 | + | ||
49 | + // 保存用户数据 | ||
50 | + public static memberSave = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberSave, ...args); | ||
51 | + // 获取用户数据 | ||
52 | + public static memberGet = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberGet, ...args); | ||
53 | + // 重置修改标识 | ||
54 | + public static memberSesetAup = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberSesetAup, ...args); | ||
55 | + // 清除用户数据 | ||
56 | + public static memberClear = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberClear, ...args); | ||
57 | + //心跳 | ||
58 | + public static heartbeat = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberXT, ...args); | ||
59 | + //自定义活动 | ||
60 | + public static activityCustom = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityCustom, ...args); | ||
61 | + public static rankAddV2 = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.rankAddV2, ...args); | ||
62 | + public static rankListV2 = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.rankListV2, ...args); | ||
63 | + | ||
64 | + //周卡/月卡列表 | ||
65 | + public static recCardList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recCardList, ...args); | ||
66 | + //领取周卡/月卡奖励 | ||
67 | + public static recCardReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recCardReward, ...args); | ||
68 | + //领取基金列表 | ||
69 | + public static recGrowthList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recGrowthList, ...args); | ||
70 | + //领取基金奖励 | ||
71 | + public static recGrowthReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recGrowthReward, ...args); | ||
72 | + //获取无尽礼包数据 | ||
73 | + public static recEndlessList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recEndlessList, ...args); | ||
74 | + //领取无尽礼包 | ||
75 | + public static recEndlessReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recEndlessReward, ...args); | ||
76 | + //获取新手礼包数据 | ||
77 | + public static getNewbieGiftData = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getNewbieGiftData, ...args); | ||
78 | + //领取新手礼包 | ||
79 | + public static recNewbieGift = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recNewbieGift, ...args); | ||
80 | + | ||
81 | + // 活动排行榜相关 | ||
82 | + public static activityRankConfig = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankConfig, ...args); | ||
83 | + public static activityRankAdd = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankAdd, ...args); | ||
84 | + public static activityRankList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankList, ...args); | ||
85 | + public static activityRankReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankReward, ...args); | ||
86 | + | ||
87 | + //后台 | ||
88 | + public static getUserHistory = (...args) => SDKHttpPlus.backPost(DataService.I.GMApi, HostKeysPlus.getUserHistory, ...args); | ||
89 | + public static saveUserHistory = (...args) => SDKHttpPlus.backPost(DataService.I.GMApi, HostKeysPlus.saveUserHistory, ...args); | ||
90 | +} | ||
91 | + | ||
92 | + | ||
93 | +export const HostKeysPlus = { | ||
94 | + sendsubscribe: 'api/subscribe/event', //订阅 | ||
95 | + cancelSubscribe: 'api/subscribe/event/cancel', //取消订阅 | ||
96 | + notice: 'mods/notice/list', //公告 | ||
97 | + mail: 'mods/mail/list', //邮件 | ||
98 | + mailStatus: '/mods/mail/status/u', //修改邮件状态 | ||
99 | + QRcode: 'game/merge/system', //群二维码 | ||
100 | + cdkey: 'game/merge/cdkey', //兑换CDkey | ||
101 | + clearData: 'game/merge/clear', //删除存档 | ||
102 | + goodsList: 'game/merge/goodslist', //商品列表 | ||
103 | + createOrder: 'game/merge/order/create', //生成订单 | ||
104 | + queryOrder: 'game/merge/order/query', //查询订单 | ||
105 | + confirmOrder: 'game/merge/order/give', //确认订单 | ||
106 | + setAup: 'game/merge/aup', //重置GM标识 | ||
107 | + getShareImg: 'game/merge/share/getimg', //分享图片 | ||
108 | + getShare: 'game/merge/share/get', //获取今日分享(自己的) | ||
109 | + getShreInfo: 'game/merge/share/info', //获取分享详情(别人的) | ||
110 | + receiveShare: 'game/merge/share/receive', //领取分享奖励 | ||
111 | + getProgressReward: 'game/merge/share/reward/progress', //获取分享奖励 | ||
112 | + saveStory: 'game/merge/cp/save', //保存副本 | ||
113 | + getInviteInfo: 'api/member/invite/info', //获取邀请信息 | ||
114 | + receiveInvite: 'api/member/invite/receive', //领取邀请奖励 | ||
115 | + | ||
116 | + memberSave: 'yueliangdao/member/save', //存用户数据 | ||
117 | + memberGet: 'yueliangdao/member/get', //取用户数据 | ||
118 | + memberSesetAup: 'yueliangdao/member/reset/aup', //重置修改标识 | ||
119 | + memberClear: '3ad7e4ab92ae2249/member/clear', //清除用户数据 4.11改 | ||
120 | + memberXT: 'yueliangdao/member/xt', //心跳 | ||
121 | + activityCustom: 'mods/activity/custom', //自定义活动 | ||
122 | + rankListV2: 'mods/rank/permanent/list', //排行榜2023-4-24 | ||
123 | + rankAddV2: 'mods/rank/permanent/add', //更新排行榜2023-4-24 | ||
124 | + | ||
125 | + | ||
126 | + recCardList: '3ad7e4ab92ae2249/member/ship/info', //周卡/月卡列表 | ||
127 | + recCardReward: '3ad7e4ab92ae2249/member/ship/draw', //领取周卡/月卡奖励 | ||
128 | + recGrowthList: 'game/merge/growth/list', //领取基金列表 | ||
129 | + recGrowthReward: 'game/merge/growth/rec', //领取基金奖励 | ||
130 | + recEndlessList: '3ad7e4ab92ae2249/egift/show', //获取无尽礼包数据 | ||
131 | + recEndlessReward: '3ad7e4ab92ae2249/egift/draw', //领取无尽礼包 | ||
132 | + getNewbieGiftData: '3ad7e4ab92ae2249/novice/list', //获取新手礼包数据 | ||
133 | + recNewbieGift: '3ad7e4ab92ae2249/novice/draw', //领取新手礼包 | ||
134 | + | ||
135 | + activityRankConfig: 'yueliangdao/activities/rank/config', //活动排行榜配置 | ||
136 | + activityRankAdd: 'yueliangdao/activities/rank/add', //活动排行榜添加分数 | ||
137 | + activityRankList: 'yueliangdao/activities/rank/top', //活动排行榜 | ||
138 | + activityRankReward: 'yueliangdao/activities/rank/draw', //活动排行榜奖励 | ||
139 | + | ||
140 | + | ||
141 | + //后台 | ||
142 | + getUserHistory: 'index/merge/history.html', //获取用户历史存档 | ||
143 | + saveUserHistory: 'index/merge/setdata.html', //覆盖用户数据 | ||
144 | +} |
@@ -0,0 +1,139 @@ | @@ -0,0 +1,139 @@ | ||
1 | +import { DEBUG } from "cc/env"; | ||
2 | +import { GAMEDATA, sdkEnv } from "../../framework/wxsdk/base/SDKConst"; | ||
3 | +import SDKHttp from "../../framework/wxsdk/http/SDKHttp"; | ||
4 | +import { WxHelper } from "./WxHelper"; | ||
5 | +import LogService from "../../framework/wxsdk/service/LogService"; | ||
6 | +import DataService from "../../framework/wxsdk/service/DataService"; | ||
7 | + | ||
8 | +sdkEnv.isDebug = DEBUG; | ||
9 | +export default class SDKHttpPlus extends SDKHttp { | ||
10 | + | ||
11 | + public static async backRequest(url: string, method: string, data?: any, dataType: "json" | "string" = "json") { | ||
12 | + return new Promise<IResult<any>>((resolve, reject) => { | ||
13 | + data = { | ||
14 | + ...data, | ||
15 | + gameid: GAMEDATA.game_id, | ||
16 | + } | ||
17 | + | ||
18 | + if (data && typeof data === "object") { | ||
19 | + data = JSON.stringify(data); | ||
20 | + } | ||
21 | + data = data || ""; | ||
22 | + if (method == "GET" && data != "") { | ||
23 | + data = JSON.parse(data); | ||
24 | + let str = '' | ||
25 | + for (let key in data) { | ||
26 | + str = str + `${key}` + '=' + `${data[key]}&` | ||
27 | + } | ||
28 | + url += "?" + str; | ||
29 | + data = ""; | ||
30 | + } | ||
31 | + // let info = "[url:" + url + ", data:" + data + "]"; | ||
32 | + // console.error("info", info) | ||
33 | + let xhr = new XMLHttpRequest(); | ||
34 | + xhr.onreadystatechange = function () { | ||
35 | + if (xhr.readyState == 4) { | ||
36 | + if (xhr.status >= 200 && xhr.status < 400) { | ||
37 | + let responseText: any = xhr.responseText; | ||
38 | + // cc.log("responseText", responseText) | ||
39 | + try { | ||
40 | + responseText = JSON.parse(responseText); | ||
41 | + // cc.log("responseText22", responseText) | ||
42 | + if (url.indexOf('.json') > -1) { | ||
43 | + resolve({ code: 0, data: responseText, msg: responseText.msg }); | ||
44 | + } else { | ||
45 | + resolve({ code: +responseText.code, data: responseText.data, msg: responseText.msg }); | ||
46 | + } | ||
47 | + return | ||
48 | + } catch (ex) { | ||
49 | + // console.error("httpRequest[parseError]:responseText=" + xhr.responseText); | ||
50 | + resolve({ msg: "JSON parse error:" + ex.message, code: -1 }); | ||
51 | + return; | ||
52 | + } | ||
53 | + } else { | ||
54 | + console.error(xhr.status, '网络请求失败!'); | ||
55 | + resolve({ code: -2 }); | ||
56 | + } | ||
57 | + } | ||
58 | + }; | ||
59 | + | ||
60 | + xhr.ontimeout = function (info): void { | ||
61 | + console.error("info1", info) | ||
62 | + resolve({ msg: `请求超时!`, code: -3 }); | ||
63 | + } | ||
64 | + xhr.onerror = function (info): void { | ||
65 | + console.error("info2", info) | ||
66 | + resolve({ msg: `请求失败!`, code: -4 }); | ||
67 | + } | ||
68 | + xhr.onabort = function (info): void { | ||
69 | + console.error("info3", info) | ||
70 | + resolve({ msg: `请求关闭!`, code: -5 }); | ||
71 | + } | ||
72 | + | ||
73 | + xhr.timeout = 30000; | ||
74 | + xhr.open(method, url, true); | ||
75 | + | ||
76 | + if (method == "POST") { | ||
77 | + xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8")//application/x-www-form-urlencoded | ||
78 | + // if (cc.sys.os === 'Android') { | ||
79 | + // cc.error("http__uid", AppSdkData.I.uid); | ||
80 | + // xhr.setRequestHeader('Uuid', `${AppSdkData.I.uid}`); | ||
81 | + // } else { | ||
82 | + // xhr.setRequestHeader('Uuid', `909`); | ||
83 | + // } | ||
84 | + | ||
85 | + } | ||
86 | + console.log("data", data) | ||
87 | + xhr.send(data); | ||
88 | + }); | ||
89 | + } | ||
90 | + | ||
91 | + public static async backGet(baseUrl: string, url: string, data?: any, dataType: "json" | "string" = "json") { | ||
92 | + if (this.withMock(url)) { | ||
93 | + return this.mockData(url); | ||
94 | + } | ||
95 | + | ||
96 | + url = baseUrl + url; | ||
97 | + return this.backRequest(url, "GET", data, dataType); | ||
98 | + } | ||
99 | + | ||
100 | + public static backPost(baseUrl: string, url: string, data?: any, dataType: "json" | "string" = "json") { | ||
101 | + if (this.withMock(url)) { | ||
102 | + return this.mockData(url); | ||
103 | + } | ||
104 | + | ||
105 | + url = baseUrl + url; | ||
106 | + return this.backRequest(url, "POST", data, dataType); | ||
107 | + } | ||
108 | +} | ||
109 | + | ||
110 | +SDKHttp.onErrorResponse = async function (data: any) { | ||
111 | + console.log("onErrorResponse", data) | ||
112 | + if (data.code > 0) { | ||
113 | + LogService.I.dot("errCode", { form: data.code + "_" + DataService.I?.Data?.userId }) | ||
114 | + } else { | ||
115 | + LogService.I.dot("errCode", { form: data.code }) | ||
116 | + } | ||
117 | + if (data.code == 1008) { | ||
118 | + let ret = await WxHelper.showModal({ | ||
119 | + title: '登录验证失败,请重新登录', | ||
120 | + content: data.msg, | ||
121 | + showCancel: false, | ||
122 | + confirmText: '重启' | ||
123 | + }) | ||
124 | + if (ret) { | ||
125 | + WxHelper.restartMiniProgram(); | ||
126 | + } | ||
127 | + } | ||
128 | + if (data.code == 1011000) { | ||
129 | + let ret = await WxHelper.showModal({ | ||
130 | + title: '数据被修改', | ||
131 | + content: data.msg, | ||
132 | + showCancel: false, | ||
133 | + confirmText: '重启' | ||
134 | + }) | ||
135 | + if (ret) { | ||
136 | + WxHelper.restartMiniProgram(); | ||
137 | + } | ||
138 | + } | ||
139 | +}; | ||
0 | \ No newline at end of file | 140 | \ No newline at end of file |
sdk/SDKTools.ts
1 | -import { GAMEDATA } from "../wxsdk/base/SDKConst"; | ||
2 | -import DateUtils from "../wxsdk/utils/DateUtils"; | ||
3 | -import WXSDK from "../wxsdk/WXSDK"; | 1 | +import { GAMEDATA } from "../../framework/wxsdk/base/SDKConst"; |
2 | +import DateUtils from "../../framework/wxsdk/utils/DateUtils"; | ||
3 | +import WXSDK from "../../framework/wxsdk/WXSDK"; | ||
4 | + | ||
4 | 5 | ||
5 | /* | 6 | /* |
6 | * SDK工具类库; | 7 | * SDK工具类库; |
@@ -9,6 +10,9 @@ export class SDKTools { | @@ -9,6 +10,9 @@ export class SDKTools { | ||
9 | static get isWx() { | 10 | static get isWx() { |
10 | return typeof wx !== 'undefined'; | 11 | return typeof wx !== 'undefined'; |
11 | } | 12 | } |
13 | + static get isZfb() { | ||
14 | + return typeof my !== 'undefined'; | ||
15 | + } | ||
12 | static get isSupported() { | 16 | static get isSupported() { |
13 | return typeof WXSDK === 'object'; | 17 | return typeof WXSDK === 'object'; |
14 | } | 18 | } |
@@ -79,7 +83,7 @@ export class SDKTools { | @@ -79,7 +83,7 @@ export class SDKTools { | ||
79 | * isOff:是否关闭默认显示banner | 83 | * isOff:是否关闭默认显示banner |
80 | * } | 84 | * } |
81 | */ | 85 | */ |
82 | - static createBanner(adUnitId: string = GAMEDATA.bannerId, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) { | 86 | + static createBanner(adUnitId: string = GAMEDATA.bannerId, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean ,isCreate?:boolean}) { |
83 | if (!this.isWx) return | 87 | if (!this.isWx) return |
84 | return WXSDK.ad.createBanner(adUnitId, opts); | 88 | return WXSDK.ad.createBanner(adUnitId, opts); |
85 | } | 89 | } |
@@ -163,11 +167,12 @@ export class SDKTools { | @@ -163,11 +167,12 @@ export class SDKTools { | ||
163 | /** | 167 | /** |
164 | * 订阅 | 168 | * 订阅 |
165 | * @param template_ids 模板id eg['aaaaaaa','bbbbbbb'] | 169 | * @param template_ids 模板id eg['aaaaaaa','bbbbbbb'] |
166 | - * @param ids 对应后台的id eg:['1','2'] | 170 | + * @param success 成功回调 |
171 | + * @param fail 失败回调 | ||
167 | */ | 172 | */ |
168 | - static subScribe(template_ids: Array<string>, ids: Array<string>) { | ||
169 | - if (!this.isWx) return | ||
170 | - return WXSDK.game.subScribe(template_ids, ids) | 173 | + static subScribe(template_ids: Array<string>, success: Function, fail: Function) { |
174 | + if (!window['wx']) return; | ||
175 | + return WXSDK.game.subScribe(template_ids, success, fail); | ||
171 | } | 176 | } |
172 | 177 | ||
173 | /** | 178 | /** |
@@ -348,6 +353,7 @@ export class SDKTools { | @@ -348,6 +353,7 @@ export class SDKTools { | ||
348 | static checkmsg(scene: number, content: string, nickname?: string, title?: string, signature?: string) { | 353 | static checkmsg(scene: number, content: string, nickname?: string, title?: string, signature?: string) { |
349 | return WXSDK.game.checkmsg(scene, content, nickname, title, signature) | 354 | return WXSDK.game.checkmsg(scene, content, nickname, title, signature) |
350 | } | 355 | } |
356 | + | ||
351 | /** | 357 | /** |
352 | * 修改用户头像昵称 | 358 | * 修改用户头像昵称 |
353 | */ | 359 | */ |
@@ -355,6 +361,7 @@ export class SDKTools { | @@ -355,6 +361,7 @@ export class SDKTools { | ||
355 | return WXSDK.game.updateNickname(nickname, headurl) | 361 | return WXSDK.game.updateNickname(nickname, headurl) |
356 | } | 362 | } |
357 | 363 | ||
364 | + | ||
358 | } | 365 | } |
359 | 366 | ||
360 | /** | 367 | /** |
@@ -0,0 +1,420 @@ | @@ -0,0 +1,420 @@ | ||
1 | +import { sys } from "cc"; | ||
2 | +import { EventCenter } from "../../framework/core/utils/EventCenter"; | ||
3 | +import { EnvCode } from "../../framework/wxsdk/base/SDKEnum"; | ||
4 | +import DataService from "../../framework/wxsdk/service/DataService"; | ||
5 | +import { GameEvent } from "../../game/const/GameEvent"; | ||
6 | +import GameServicePlus from "./GameServicePlus"; | ||
7 | +import { SDKTools } from "./SDKTools"; | ||
8 | + | ||
9 | +export class ServerError { | ||
10 | + private static _errors = { | ||
11 | + "0": { msg: "成功", desc: "接口调用成功" }, | ||
12 | + "1000": { msg: "操作失败", desc: "检查Hermes后台配置是否正确" }, | ||
13 | + "1001": { msg: "未知错误", desc: "联系开发人员排查错误" }, | ||
14 | + "1002": { msg: "参数错误", desc: "请参照接口文档对比参数和参数类型是否正确" }, | ||
15 | + "1003": { msg: "签名错误", desc: "检查appkey跟后台是否对应" }, | ||
16 | + "1004": { msg: "数据不存在", desc: "查询的数据不存在等" }, | ||
17 | + "1005": { msg: "解析参数失败,请检查参数合法性", desc: "参数中是否有危险字符,比如SQL注入等" }, | ||
18 | + "4500": { msg: "商品不存在", desc: "检查Hermes后台配置是否正确" }, | ||
19 | + "4501": { msg: "订单未支付", desc: "" }, | ||
20 | + "4502": { msg: "不能重复发放", desc: "" }, | ||
21 | + "4503": { msg: "兑换码不存在", desc: " " }, | ||
22 | + "4504": { msg: "兑换码不在有效期内", desc: " " }, | ||
23 | + "4505": { msg: "兑换码已失效", desc: " " }, | ||
24 | + "4506": { msg: "iv error", desc: "防止用户本地修改数据" }, | ||
25 | + "4507": { msg: "数据被修改", desc: "用户数据被GM工具修改,需重新登录重置" }, | ||
26 | + "4508": { msg: "此商品已达到最大购买限制", desc: "限购" }, | ||
27 | + "4509": { msg: "没有上传文件", desc: "检查文件name属性是否正确" }, | ||
28 | + "4510": { msg: "文件超出最大限制", desc: "最大1M" }, | ||
29 | + "4511": { msg: "请先授权获取微信头像信息", desc: "登录接口获取" }, | ||
30 | + "4513": { msg: "没有达到刷新条件", desc: "生成过一次且没有领取 才可刷新" }, | ||
31 | + "4514": { msg: "刷新次数超限", desc: "刷新次数达到 配置最大项" }, | ||
32 | + "4515": { msg: "分享失效", desc: "跨天失效等" }, | ||
33 | + "4516": { msg: "分享不存在", desc: "分享ID不存在等" }, | ||
34 | + "4517": { msg: "已被领取", desc: "被其他人领取" }, | ||
35 | + "4518": { msg: "今日领取次数超限", desc: "今天领取的次数达到配置最大项" }, | ||
36 | + "4519": { msg: "已领过其他选项", desc: "只能领取一个" }, | ||
37 | + "4520": { msg: "没有达到领取条件", desc: "领取进度是否完成" }, | ||
38 | + "4522": { msg: "只能领取自己的奖励", desc: "" }, | ||
39 | + "1009": { msg: "您的账号已因数据异常而被封禁,如需申诉可以向微信客服反馈。", desc: "" }, | ||
40 | + "3004": { msg: "活动已经结束", desc: "" }, | ||
41 | + } | ||
42 | + | ||
43 | + private static _unknownError = { msg: "未知错误", desc: "联系开发人员排查错误" }; | ||
44 | + static getError(code: string): { msg: string, desc: string } { | ||
45 | + return this._errors[code] || this._unknownError; | ||
46 | + } | ||
47 | + | ||
48 | + static this(key: string): string { | ||
49 | + return (this._errors[key] || this._unknownError).msg; | ||
50 | + } | ||
51 | +} | ||
52 | + | ||
53 | +/* | ||
54 | +* SDK工具类库; | ||
55 | +*/ | ||
56 | +export class SDKToolsPlus extends SDKTools { | ||
57 | + static get isTT() { | ||
58 | + return sys.platform == sys.Platform.BYTEDANCE_MINI_GAME; | ||
59 | + } | ||
60 | + | ||
61 | + //提交订单 | ||
62 | + static doPreorder(data, goodid: string, price: number, orderid: string) { | ||
63 | + if (!data.code && data.data) { | ||
64 | + let { config, paytype } = data.data; | ||
65 | + // goodid = goodid + ""; | ||
66 | + // console.log("支付方式"+paytype); | ||
67 | + switch (paytype) { | ||
68 | + case "1"://H5 客服消息支付,游戏内调用发片消息接口 sendMessagePath:path | ||
69 | + var { img, title, path } = config; | ||
70 | + wx.openCustomerServiceConversation({ | ||
71 | + showMessageCard: true, //是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息 | ||
72 | + sendMessageTitle: title ? title : '我要充值!',//会话内消息卡片标题 | ||
73 | + sendMessagePath: path,//会话内消息卡片路径//channel=${SDKTools.ChannelId}&item=10&uid=${SDKTools.UserId} | ||
74 | + sendMessageImg: img ? img : 'https://wxsdk-cdn.miso-lab.com/moon-island/share/fx_chongzhi.jpg',//会话内消息卡片图片路径 | ||
75 | + success: (ret) => { | ||
76 | + //记录状态 | ||
77 | + //onshow检测状态,判断是否充值成功 | ||
78 | + console.log("支付成功:", ret); | ||
79 | + EventCenter.I.emit(GameEvent.PAY_POLLING, true); | ||
80 | + }, | ||
81 | + fail: (ret) => { | ||
82 | + console.log("fail", ret); | ||
83 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
84 | + } | ||
85 | + }) | ||
86 | + break; | ||
87 | + case "2": | ||
88 | + | ||
89 | + | ||
90 | + break; | ||
91 | + case "3"://米大师支付,游戏支付成功需要调用米大师订单上报接口 | ||
92 | + var { payid } = config; | ||
93 | + SDKTools.pay({ payid, goodid, money: price, orderid: orderid }).then(res => { | ||
94 | + if (!res.code) { | ||
95 | + console.log("支付成功", res); | ||
96 | + EventCenter.I.emit(GameEvent.PAY_CONFIRM, orderid, goodid); | ||
97 | + } else { | ||
98 | + console.log("支付失败", res); | ||
99 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
100 | + } | ||
101 | + }).catch(err => { | ||
102 | + console.log("支付失败2:", err); | ||
103 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
104 | + }) | ||
105 | + break; | ||
106 | + case "4"://跳转小程序支付,游戏直接跳转返回的小程序路径 | ||
107 | + var { appid, page } = config; | ||
108 | + wx.navigateToMiniProgram({ | ||
109 | + appId: appid, | ||
110 | + path: page, | ||
111 | + envVersion: DataService.I.EnvEnum === EnvCode.Prod ? 'release' : "trial",//opts.envVersion || 'release', | ||
112 | + success(res: any) { | ||
113 | + console.log("成功:", res) | ||
114 | + // resolve(res); | ||
115 | + EventCenter.I.emit(GameEvent.PAY_POLLING, true); | ||
116 | + }, | ||
117 | + fail(err: any) { | ||
118 | + console.log("失败", err) | ||
119 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
120 | + // reject(err); | ||
121 | + } | ||
122 | + }); | ||
123 | + break; | ||
124 | + case "5"://扫码小程序支付,imgurl为二维码地址,提示用户扫码即可 | ||
125 | + EventCenter.I.emit(GameEvent.PAY_POLLING, true); | ||
126 | + var { imgurl } = config; | ||
127 | + wx.previewImage({ | ||
128 | + current: imgurl, // 当前显示图片的http链接 | ||
129 | + urls: [imgurl] // 需要预览的图片http链接列表 | ||
130 | + }) | ||
131 | + | ||
132 | + break; | ||
133 | + case "6"://二维码支付,windows下需要调用扫码支付接口 | ||
134 | + EventCenter.I.emit(GameEvent.PAY_POLLING, true); | ||
135 | + var { qrcode } = config; | ||
136 | + wx.previewImage({ | ||
137 | + current: qrcode, // 当前显示图片的http链接 | ||
138 | + urls: [qrcode] // 需要预览的图片http链接列表 | ||
139 | + }) | ||
140 | + | ||
141 | + break; | ||
142 | + case "7"://抖音支付 | ||
143 | + var { payid } = config; | ||
144 | + SDKTools.pay({ payid, goodid, money: price, orderid: orderid }).then(res => { | ||
145 | + if (!res.code) { | ||
146 | + console.log("支付成功", res); | ||
147 | + EventCenter.I.emit(GameEvent.PAY_CONFIRM, orderid, goodid); | ||
148 | + } else { | ||
149 | + console.log("支付失败", res); | ||
150 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
151 | + } | ||
152 | + }).catch(err => { | ||
153 | + console.log("支付失败", err); | ||
154 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
155 | + }) | ||
156 | + break; | ||
157 | + case "10"://支付宝支付 | ||
158 | + var { payid } = config; | ||
159 | + SDKTools.pay({ payid, goodid, money: price, orderid: orderid }).then(res => { | ||
160 | + if (!res.code) { | ||
161 | + console.log("111tttttt"+Date.now()); | ||
162 | + EventCenter.I.emit(GameEvent.PAY_POLLING_NOW, true); | ||
163 | + } else { | ||
164 | + console.log("支付失败", JSON.stringify(res)); | ||
165 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
166 | + } | ||
167 | + }).catch(err => { | ||
168 | + console.log("支付失败", JSON.stringify(err)); | ||
169 | + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid); | ||
170 | + }) | ||
171 | + break; | ||
172 | + default: | ||
173 | + // utils.tips("出错!") | ||
174 | + break; | ||
175 | + } | ||
176 | + } else { | ||
177 | + // utils.tips("出错!") | ||
178 | + } | ||
179 | + } | ||
180 | + | ||
181 | + /** | ||
182 | + * 获取群二维码 | ||
183 | + */ | ||
184 | + static QRcode() { | ||
185 | + return GameServicePlus.I.getQRcode(); | ||
186 | + } | ||
187 | + | ||
188 | + /** | ||
189 | + * 兑换CDK | ||
190 | + */ | ||
191 | + static convertCDkey(cdkey: string) { | ||
192 | + return GameServicePlus.I.convertCDkey(cdkey); | ||
193 | + } | ||
194 | + | ||
195 | + /** | ||
196 | + * 商品列表 | ||
197 | + */ | ||
198 | + static goodsList() { | ||
199 | + return GameServicePlus.I.goodsList(); | ||
200 | + } | ||
201 | + | ||
202 | + /** | ||
203 | + * 生成订单 | ||
204 | + */ | ||
205 | + static createOrder(goodid: string) { | ||
206 | + return GameServicePlus.I.createOrder(goodid); | ||
207 | + } | ||
208 | + | ||
209 | + /** | ||
210 | + * 查询订单 | ||
211 | + */ | ||
212 | + static queryOrder(no: string) { | ||
213 | + return GameServicePlus.I.queryOrder(no); | ||
214 | + } | ||
215 | + | ||
216 | + /** | ||
217 | + * 确认订单 | ||
218 | + */ | ||
219 | + static confirmOrder(no: string) { | ||
220 | + return GameServicePlus.I.confirmOrder(no); | ||
221 | + } | ||
222 | + | ||
223 | + /** | ||
224 | + * 获取玩家历史存档 | ||
225 | + */ | ||
226 | + static getUserHistory(uid: string, token: string) { | ||
227 | + return GameServicePlus.I.getUserHistory(uid, token); | ||
228 | + } | ||
229 | + | ||
230 | + /** | ||
231 | + * 获取玩家历史存档 | ||
232 | + * @param data //需要包含uid,token | ||
233 | + */ | ||
234 | + static saveUserHistory(data: any) { | ||
235 | + return GameServicePlus.I.saveUserHistory(data); | ||
236 | + } | ||
237 | + | ||
238 | + /** | ||
239 | + * 重置GM标识 | ||
240 | + */ | ||
241 | + static setAup(typ: number = 0) { | ||
242 | + return GameServicePlus.I.setAup(typ); | ||
243 | + } | ||
244 | + | ||
245 | + /** | ||
246 | + * 获取分享图片 | ||
247 | + * @param items 2,1,0|3,1,1|3,1,1|3,1,1|3,1,1格式:2,1,0(类型,id,领取状态)领取状态:1已领取0未领取 | ||
248 | + * @param zoom 图片缩放比例 | ||
249 | + * @returns | ||
250 | + */ | ||
251 | + static getShareImage(items: string, zoom = 1) { | ||
252 | + return GameServicePlus.I.getShareImage(items, zoom); | ||
253 | + } | ||
254 | + | ||
255 | + /** | ||
256 | + * 获取今日分享 | ||
257 | + * @param refresh 是否刷新 | ||
258 | + */ | ||
259 | + static getShare(refresh?: number) { | ||
260 | + return GameServicePlus.I.getShare(refresh); | ||
261 | + } | ||
262 | + | ||
263 | + /** | ||
264 | + * 获取分享详情 | ||
265 | + * @param id 分享id | ||
266 | + * @param date 分享日期 格式:20220524 | ||
267 | + */ | ||
268 | + static getShareInfo(id: number, date: string) { | ||
269 | + if (typeof id === "string") { | ||
270 | + id = parseInt(id); | ||
271 | + } | ||
272 | + return GameServicePlus.I.getShareInfo(id, date); | ||
273 | + } | ||
274 | + | ||
275 | + /** | ||
276 | + * 领取好友分享 | ||
277 | + * @param id 分享id | ||
278 | + * @param date 分享日期 格式:20220524 | ||
279 | + * @param itemid 分享选项ID | ||
280 | + */ | ||
281 | + static getShareReward(id: number, date: string, itemid: number) { | ||
282 | + if (typeof id === "string") { | ||
283 | + id = parseInt(id); | ||
284 | + } | ||
285 | + return GameServicePlus.I.getShareReward(id, date, itemid); | ||
286 | + } | ||
287 | + | ||
288 | + /** | ||
289 | + * 领取额外进度奖励 | ||
290 | + * @param id 分享id | ||
291 | + * @param date 分享日期 格式:20220524 | ||
292 | + */ | ||
293 | + static getProgressReward(id: number, date: string) { | ||
294 | + if (typeof id === "string") { | ||
295 | + id = parseInt(id); | ||
296 | + } | ||
297 | + return GameServicePlus.I.getProgressReward(id, date); | ||
298 | + } | ||
299 | + | ||
300 | + static getInviteInfo() { | ||
301 | + return GameServicePlus.I.getInviteInfo(); | ||
302 | + } | ||
303 | + | ||
304 | + static receiveInvite(id: number) { | ||
305 | + return GameServicePlus.I.receiveInvite(id); | ||
306 | + } | ||
307 | + | ||
308 | + static heartbeat() { | ||
309 | + return GameServicePlus.I.beatheart(); | ||
310 | + } | ||
311 | + | ||
312 | + /** | ||
313 | + * 领取列表 | ||
314 | + * @param status 类型1周卡2月卡 | ||
315 | + */ | ||
316 | + static recCardList() { | ||
317 | + return GameServicePlus.I.recCardList(); | ||
318 | + } | ||
319 | + | ||
320 | + /** | ||
321 | + * 领取列表 | ||
322 | + * @param typ 第几天 week周 month月 | ||
323 | + */ | ||
324 | + static recCardReward(typ: string) { | ||
325 | + return GameServicePlus.I.recCardReward(typ); | ||
326 | + } | ||
327 | + | ||
328 | + /** | ||
329 | + * 领取基金列表 | ||
330 | + */ | ||
331 | + static recGrowthList() { | ||
332 | + return GameServicePlus.I.recGrowthList(); | ||
333 | + } | ||
334 | + | ||
335 | + /** | ||
336 | + * 领取基金列表 | ||
337 | + * @param goodid 购买的基金商品ID | ||
338 | + * @param level 等级 | ||
339 | + */ | ||
340 | + static recGrowthReward(goodid: string, level: number) { | ||
341 | + return GameServicePlus.I.recGrowthReward(goodid, level); | ||
342 | + } | ||
343 | + | ||
344 | + /** | ||
345 | + * 获取无尽礼包数据 | ||
346 | + */ | ||
347 | + static recEndlessList(groupId: string) { | ||
348 | + return GameServicePlus.I.recEndlessList(groupId); | ||
349 | + } | ||
350 | + | ||
351 | + /** | ||
352 | + * 领取无尽礼包 | ||
353 | + * @param date 当前日期 | ||
354 | + */ | ||
355 | + static recEndlessReward(groupId: string, id: string, date: string) { | ||
356 | + return GameServicePlus.I.recEndlessReward(groupId, id, date); | ||
357 | + } | ||
358 | + | ||
359 | + /** | ||
360 | + * 获取新手礼包数据 | ||
361 | + */ | ||
362 | + static getNewbieGiftData() { | ||
363 | + return GameServicePlus.I.getNewbieGiftData(); | ||
364 | + } | ||
365 | + | ||
366 | + /** | ||
367 | + * 领取新手礼包 | ||
368 | + * @param days 当前天 | ||
369 | + */ | ||
370 | + static recNewbieGift(days: string) { | ||
371 | + return GameServicePlus.I.recNewbieGift(days); | ||
372 | + } | ||
373 | + | ||
374 | + | ||
375 | + /** | ||
376 | + * 订阅消息 | ||
377 | + * @param tmplId 订阅ID | ||
378 | + * @param message 订阅内容 | ||
379 | + * @param sendtime 订阅发送时间s二选一参数 | ||
380 | + * @param times 订阅延迟时间s二选一参数 | ||
381 | + * @param status 1取消以前相同模板信息,默认为0不取消 | ||
382 | + */ | ||
383 | + static async sendSubScribe(tmplId: string, message: string, sendtime: number, times: number = 0, status = 1) { | ||
384 | + return GameServicePlus.I.sendSubScribe(tmplId, message, sendtime, times, status); | ||
385 | + } | ||
386 | + | ||
387 | + /** | ||
388 | + * 取消订阅消息 | ||
389 | + * @param tmplId 订阅ID | ||
390 | + */ | ||
391 | + static async cancelSubscribe(tmplId: string) { | ||
392 | + return GameServicePlus.I.cancelSubscribe(tmplId); | ||
393 | + } | ||
394 | + /** | ||
395 | + * 自定义活动 | ||
396 | + * @param id 活动ID(后台的ID) | ||
397 | + */ | ||
398 | + static activityCustom(id?: string) { | ||
399 | + return GameServicePlus.I.activityCustom(id); | ||
400 | + } | ||
401 | + /** | ||
402 | + * 添加排行榜 | ||
403 | + * @param typ 游戏端自定义排行标识 | ||
404 | + * @param fraction 分数 如果上报的分数小于以前上报的分数,则不会更新 | ||
405 | + * @param rankData 扩展字段 | ||
406 | + * @returns | ||
407 | + */ | ||
408 | + static rankAddV2(typ: string, fraction: number, rankData?: string) { | ||
409 | + return GameServicePlus.I.rankAddV2(typ, fraction, rankData); | ||
410 | + } | ||
411 | + /** | ||
412 | + * 排行榜列表 | ||
413 | + * @param typ 游戏端自定义排行标识 | ||
414 | + * @param percent percent等于1 的时候会返回排行榜总人数和自己的当前排名 | ||
415 | + */ | ||
416 | + static rankListV2(typ: string, percent: number = 0) { | ||
417 | + return GameServicePlus.I.rankListV2(typ, percent); | ||
418 | + } | ||
419 | + | ||
420 | +} | ||
0 | \ No newline at end of file | 421 | \ No newline at end of file |
@@ -0,0 +1,534 @@ | @@ -0,0 +1,534 @@ | ||
1 | + | ||
2 | +// import UserManager from "../manager/UserManager"; | ||
3 | + | ||
4 | +import { Node, UITransform, game, view } from "cc"; | ||
5 | +import { ALIPAY } from "cc/env"; | ||
6 | + | ||
7 | +/** WXapi */ | ||
8 | +export class WxHelper { | ||
9 | + | ||
10 | + /** 手机设备信息 */ | ||
11 | + public static SystemInfo: SystemInfoSyncReturnValue; | ||
12 | + | ||
13 | + /** 微信用户信息 */ | ||
14 | + public static userInfo: WxUserInfo; | ||
15 | + static get isWx() { | ||
16 | + return typeof wx !== 'undefined'; | ||
17 | + } | ||
18 | + | ||
19 | + /** 获取设备信息 */ | ||
20 | + public static getSystemInfo() { | ||
21 | + if (this.isWx) this.SystemInfo = wx.getSystemInfoSync(); | ||
22 | + } | ||
23 | + | ||
24 | + /** 像开放数据域发送信息 */ | ||
25 | + public static postMessage(eventType: string, data?: any): void { | ||
26 | + if (!this.isWx || !this.checkVerison('1.9.92')) return; | ||
27 | + wx.getOpenDataContext().postMessage({ | ||
28 | + eventType: eventType, | ||
29 | + data: data | ||
30 | + }); | ||
31 | + | ||
32 | + } | ||
33 | + | ||
34 | + /** 更新微信开放数据榜单数据 */ | ||
35 | + public static updateWxRank(key: string, value: number) { | ||
36 | + if (typeof my != 'undefined') { | ||
37 | + return; | ||
38 | + } | ||
39 | + if (!this.isWx || !this.checkVerison('1.9.92')) return; | ||
40 | + let data = { | ||
41 | + value, | ||
42 | + } | ||
43 | + wx.setUserCloudStorage({ | ||
44 | + KVDataList: [{ | ||
45 | + key, | ||
46 | + value: JSON.stringify(data) | ||
47 | + }] | ||
48 | + }) | ||
49 | + | ||
50 | + } | ||
51 | + | ||
52 | + /** 创建用户反馈按钮 */ | ||
53 | + public static createFeedbackButton(target: Node) { | ||
54 | + | ||
55 | + let data = this.computWxPosition(target); | ||
56 | + return wx.createFeedbackButton({ | ||
57 | + type: 'text', | ||
58 | + text: ' ', | ||
59 | + style: { | ||
60 | + left: data.left, | ||
61 | + top: data.top, | ||
62 | + width: data.width, | ||
63 | + height: data.height, | ||
64 | + borderRadius: 5, | ||
65 | + // backgroundColor: '#69c66d', | ||
66 | + } | ||
67 | + }) | ||
68 | + | ||
69 | + } | ||
70 | + | ||
71 | + | ||
72 | + /** 获取用户信息按钮 */ | ||
73 | + public static userInfoButton: any; | ||
74 | + /** 创建一个获取用户信息按钮 */ | ||
75 | + public static createUserInfoButton(target: Node) { | ||
76 | + let data = this.computWxPosition(target); | ||
77 | + // console.log("data", data) | ||
78 | + return wx.createUserInfoButton({ | ||
79 | + type: 'text', | ||
80 | + text: ' ', | ||
81 | + style: { | ||
82 | + left: data.left, | ||
83 | + top: data.top, | ||
84 | + width: data.width, | ||
85 | + height: data.height, | ||
86 | + borderRadius: 5, | ||
87 | + // color: '#ffffff', | ||
88 | + // backgroundColor: '#69c66d', | ||
89 | + // textAlign: 'center', | ||
90 | + // fontSize: 20, | ||
91 | + // lineHeight: 45, | ||
92 | + }, | ||
93 | + withCredentials: true | ||
94 | + }) | ||
95 | + | ||
96 | + } | ||
97 | + | ||
98 | + /** 计算微信坐标 */ | ||
99 | + public static computWxPosition(target: Node): { left: number, top: number, width: number, height: number } { | ||
100 | + | ||
101 | + let data = { left: 0, top: 0, width: 0, height: 0 } | ||
102 | + let pos = target.worldPosition; | ||
103 | + let width = target.getComponent(UITransform).width; | ||
104 | + let height = target.getComponent(UITransform).height; | ||
105 | + let ratio = view.getDevicePixelRatio(); | ||
106 | + let scale = view.getScaleX(); | ||
107 | + let factor = scale / ratio; | ||
108 | + // let point = cc.v2(rect.x, rect.y); | ||
109 | + // point.mulSelf(scale); | ||
110 | + data.left = (pos.x - width / 2) * factor; | ||
111 | + data.top = wx.getSystemInfoSync().screenHeight - (pos.y + height / 2) * factor; | ||
112 | + data.width = width * factor; | ||
113 | + data.height = height * factor; | ||
114 | + | ||
115 | + // let btnSize = cc.size(target.width + 10, target.height + 10); | ||
116 | + // let frameSize = cc.view.getFrameSize(); | ||
117 | + // let winSize = cc.director.getWinSize(); | ||
118 | + // // cc.log("winSize: ",winSize); | ||
119 | + // // cc.log("frameSize: ",frameSize); | ||
120 | + // //适配不同机型来创建微信按钮 | ||
121 | + // data.left = (winSize.width * 0.5 + target.x - btnSize.width * 0.5) / winSize.width * frameSize.width; | ||
122 | + // data.top = (winSize.height * 0.5 - target.y - btnSize.height * 0.5) / winSize.height * frameSize.height; | ||
123 | + // data.width = btnSize.width / winSize.width * frameSize.width; | ||
124 | + // data.height = btnSize.height / winSize.height * frameSize.height; | ||
125 | + // cc.log("button pos: ",cc.v2(left,top)); | ||
126 | + // cc.log("button size: ",cc.size(width,height)); | ||
127 | + | ||
128 | + // cc.log(data) | ||
129 | + return data; | ||
130 | + | ||
131 | + } | ||
132 | + | ||
133 | + | ||
134 | + /** 兼容方式 - 版本比较 */ | ||
135 | + public static compareVersion(versionA: any, versionB: any) { | ||
136 | + versionA = versionA.split('.'); | ||
137 | + versionB = versionB.split('.'); | ||
138 | + let len = Math.max(versionA.length, versionB.length); | ||
139 | + | ||
140 | + while (versionA.length < len) { | ||
141 | + versionA.push('0'); | ||
142 | + } | ||
143 | + while (versionB.length < len) { | ||
144 | + versionB.push('0'); | ||
145 | + } | ||
146 | + | ||
147 | + for (let i = 0; i < len; i++) { | ||
148 | + let num1 = parseInt(versionA[i]); | ||
149 | + let num2 = parseInt(versionB[i]); | ||
150 | + | ||
151 | + if (num1 > num2) { | ||
152 | + return 1; | ||
153 | + } else if (num1 < num2) { | ||
154 | + return -1; | ||
155 | + } | ||
156 | + } | ||
157 | + | ||
158 | + return 0; | ||
159 | + } | ||
160 | + | ||
161 | + /** 当前版本是否能使用接口 */ | ||
162 | + public static checkVerison(version: string): boolean { | ||
163 | + return this.compareVersion(this.SystemInfo.SDKVersion, version) >= 0; | ||
164 | + } | ||
165 | + | ||
166 | + /** 显示一个对话框 */ | ||
167 | + public static showModal(data: ShowModalType) { | ||
168 | + if (typeof my != 'undefined') { | ||
169 | + return new Promise((resolve, reject) => { | ||
170 | + wx.confirm({ | ||
171 | + ...data, | ||
172 | + success: (res: { confirm: boolean, cancel: boolean }) => { | ||
173 | + if (res.confirm) { | ||
174 | + resolve(true); | ||
175 | + } else { | ||
176 | + resolve(false); | ||
177 | + } | ||
178 | + }, | ||
179 | + fail: () => { | ||
180 | + reject(); | ||
181 | + } | ||
182 | + | ||
183 | + }); | ||
184 | + | ||
185 | + }); | ||
186 | + } | ||
187 | + | ||
188 | + return new Promise((resolve, reject) => { | ||
189 | + | ||
190 | + if (typeof wx !== 'undefined') { | ||
191 | + wx.showModal({ | ||
192 | + ...data, | ||
193 | + success: (res: { confirm: boolean, cancel: boolean }) => { | ||
194 | + if (res.confirm) { | ||
195 | + resolve(true); | ||
196 | + } else { | ||
197 | + resolve(false); | ||
198 | + } | ||
199 | + }, | ||
200 | + fail: () => { | ||
201 | + reject(); | ||
202 | + } | ||
203 | + | ||
204 | + }); | ||
205 | + } else { | ||
206 | + console.log(JSON.stringify(data)); | ||
207 | + } | ||
208 | + | ||
209 | + }); | ||
210 | + | ||
211 | + } | ||
212 | + | ||
213 | + /** | ||
214 | + * 显示一个提示层 | ||
215 | + * @param msg 显示信息 | ||
216 | + * @param time 关闭时间 | ||
217 | + */ | ||
218 | + public static showToast(msg: string, time: number = 1500) { | ||
219 | + if (!this.isWx) return; | ||
220 | + if (typeof my != 'undefined') { | ||
221 | + my.showToast({ | ||
222 | + type: 'none', | ||
223 | + content: msg, | ||
224 | + duration: time, | ||
225 | + }); | ||
226 | + return; | ||
227 | + } | ||
228 | + wx.showToast({ | ||
229 | + title: msg, | ||
230 | + icon: 'none', | ||
231 | + duration: time | ||
232 | + }) | ||
233 | + | ||
234 | + } | ||
235 | + | ||
236 | + /** 设置系统剪贴板的内容 */ | ||
237 | + public static copy(str: string) { | ||
238 | + if (!this.checkVerison('1.1.0')) return Promise.reject(''); | ||
239 | + if (typeof my != 'undefined') { | ||
240 | + return new Promise((resolve, reject) => { | ||
241 | + wx.setClipboard({ | ||
242 | + text: str, | ||
243 | + success: (res: any) => { | ||
244 | + resolve(res); | ||
245 | + }, | ||
246 | + fail: () => { | ||
247 | + resolve(''); | ||
248 | + } | ||
249 | + }); | ||
250 | + }); | ||
251 | + } | ||
252 | + return new Promise((resolve, reject) => { | ||
253 | + wx.setClipboardData({ | ||
254 | + data: str, | ||
255 | + success: (res: any) => { | ||
256 | + resolve(res); | ||
257 | + }, | ||
258 | + fail: () => { | ||
259 | + resolve(''); | ||
260 | + } | ||
261 | + }); | ||
262 | + }); | ||
263 | + } | ||
264 | + | ||
265 | + /** 手机发生较长时间的振动(400 ms) */ | ||
266 | + public static vibrateLong() { | ||
267 | + if (!this.checkVerison('1.2.0')) return Promise.reject(null); | ||
268 | + | ||
269 | + return new Promise((resolve, reject) => { | ||
270 | + wx.vibrateLong({ | ||
271 | + success: () => { | ||
272 | + resolve(1); | ||
273 | + }, | ||
274 | + fail: () => { | ||
275 | + resolve(0); | ||
276 | + } | ||
277 | + }); | ||
278 | + }); | ||
279 | + } | ||
280 | + | ||
281 | + /** 手机发生较短时间的振动(15 ms) */ | ||
282 | + public static vibrateShort() { | ||
283 | + if (!this.checkVerison('1.2.0')) return Promise.reject(null); | ||
284 | + | ||
285 | + return new Promise<IResult<any>>((resolve, reject) => { | ||
286 | + wx.vibrateShort({ | ||
287 | + success: () => { | ||
288 | + resolve({ code: 0 }); | ||
289 | + }, | ||
290 | + fail: () => { | ||
291 | + resolve({ code: 1 }); | ||
292 | + } | ||
293 | + }); | ||
294 | + }); | ||
295 | + } | ||
296 | + | ||
297 | + /** | ||
298 | + * 检测更新 | ||
299 | + */ | ||
300 | + public static checkUpdate(bol: boolean = true) { | ||
301 | + if (!this.checkVerison('1.9.90')) return; | ||
302 | + const updateManager = wx.getUpdateManager(); | ||
303 | + updateManager.onCheckForUpdate(function (res) { | ||
304 | + console.log('updateManager', res.hasUpdate); | ||
305 | + }); | ||
306 | + | ||
307 | + updateManager.onUpdateReady(function () { | ||
308 | + wx.showModal({ | ||
309 | + title: '更新提示', | ||
310 | + content: '新版本已经准备好,请重启应用!', | ||
311 | + showCancel: bol, | ||
312 | + success: function (res) { | ||
313 | + if (res.confirm) { | ||
314 | + updateManager.applyUpdate() | ||
315 | + } | ||
316 | + } | ||
317 | + }); | ||
318 | + }); | ||
319 | + updateManager.onUpdateFailed(function () { | ||
320 | + // 新的版本下载失败 | ||
321 | + }); | ||
322 | + } | ||
323 | + | ||
324 | + /** 发送客服信息 */ | ||
325 | + public static openCustomerServiceConversation() { | ||
326 | + | ||
327 | + return new Promise<IResult<any>>((resolve, reject) => { | ||
328 | + if (!this.checkVerison('2.0.3')) resolve({ code: 1 }); | ||
329 | + wx.openCustomerServiceConversation({ | ||
330 | + showMessageCard: true, | ||
331 | + sendMessageTitle: '我要更多好玩!', | ||
332 | + sendMessageImg: 'http://dep.miso-lab.com/tetrischangeskin/bin/share/concat.png', | ||
333 | + success: () => { | ||
334 | + resolve({ code: 0 }); | ||
335 | + }, | ||
336 | + fail: () => { | ||
337 | + resolve({ code: 1 }); | ||
338 | + } | ||
339 | + }); | ||
340 | + }); | ||
341 | + | ||
342 | + } | ||
343 | + | ||
344 | + /** 发送客服信息 */ | ||
345 | + public static openConversation() { | ||
346 | + | ||
347 | + return new Promise<IResult<any>>((resolve, reject) => { | ||
348 | + if (!this.checkVerison('2.0.3')) resolve({ code: 1 }); | ||
349 | + wx.openCustomerServiceConversation({ | ||
350 | + success: () => { | ||
351 | + resolve({ code: 0 }); | ||
352 | + }, | ||
353 | + fail: () => { | ||
354 | + resolve({ code: 1 }); | ||
355 | + } | ||
356 | + }); | ||
357 | + }); | ||
358 | + | ||
359 | + } | ||
360 | + | ||
361 | + /** 回到前台 */ | ||
362 | + public static onShow(callback: () => void) { | ||
363 | + if (!this.isWx) return; | ||
364 | + wx.onShow(callback); | ||
365 | + // return new Promise<IResult<any>>((resolve, reject) => { | ||
366 | + // wx.onShow((res: any) => { | ||
367 | + // resolve({ code: 1 }); | ||
368 | + // }); | ||
369 | + // }); | ||
370 | + | ||
371 | + } | ||
372 | + | ||
373 | + /** 切换到后台 */ | ||
374 | + public static onHide(callback: () => void) { | ||
375 | + | ||
376 | + if (!this.isWx) return; | ||
377 | + wx.onHide(callback); | ||
378 | + | ||
379 | + } | ||
380 | + | ||
381 | + public static updateShareMenu(value) { | ||
382 | + if (!this.isWx) return; | ||
383 | + wx.updateShareMenu({ | ||
384 | + withShareTicket: value | ||
385 | + }); | ||
386 | + } | ||
387 | + | ||
388 | + /** | ||
389 | + * 检查授权 | ||
390 | + */ | ||
391 | + public static getSetting(scope: string = 'scope.userInfo') { | ||
392 | + if (!this.isWx) return Promise.resolve(1); | ||
393 | + return new Promise((resolve, reject) => { | ||
394 | + wx.getSetting({ | ||
395 | + success(res) { | ||
396 | + if (res.authSetting[scope]) { | ||
397 | + resolve(1) | ||
398 | + } else { | ||
399 | + reject() | ||
400 | + } | ||
401 | + } | ||
402 | + }) | ||
403 | + }) | ||
404 | + } | ||
405 | + /** | ||
406 | + * 打开授权设置 | ||
407 | + */ | ||
408 | + public static openSetting(scope: string = 'scope.userInfo') { | ||
409 | + if (!this.isWx) return Promise.resolve(1); | ||
410 | + return new Promise((resolve, reject) => { | ||
411 | + wx.openSetting({ | ||
412 | + success(res) { | ||
413 | + if (res.authSetting[scope]) { | ||
414 | + resolve(1) | ||
415 | + } else { | ||
416 | + reject() | ||
417 | + } | ||
418 | + } | ||
419 | + }) | ||
420 | + }) | ||
421 | + } | ||
422 | + /** | ||
423 | + * 打开授权窗口 | ||
424 | + */ | ||
425 | + public static authorize(scope: string = 'scope.userInfo') { | ||
426 | + if (!this.isWx) return; | ||
427 | + wx.authorize({ | ||
428 | + scope: scope, | ||
429 | + success(suc) { | ||
430 | + console.log("suc", suc) | ||
431 | + }, | ||
432 | + fail(err) { | ||
433 | + console.log("err", err) | ||
434 | + } | ||
435 | + }) | ||
436 | + } | ||
437 | + /** | ||
438 | + * 获取用户信息 | ||
439 | + */ | ||
440 | + public static getUserInfo(callback) { | ||
441 | + wx.getUserInfo({ | ||
442 | + success: function (res) { | ||
443 | + // console.log(res) | ||
444 | + callback(res) | ||
445 | + }, | ||
446 | + fail: function (err) { | ||
447 | + callback(err) | ||
448 | + } | ||
449 | + }) | ||
450 | + } | ||
451 | + /** | ||
452 | + * 获取用户信息 自动弹出 | ||
453 | + */ | ||
454 | + public static getUserProfile(callback) { | ||
455 | + if (!this.isWx) { | ||
456 | + callback({ userInfo: "" }) | ||
457 | + return | ||
458 | + }; | ||
459 | + wx.getUserProfile({ | ||
460 | + desc: '补充用户资料', | ||
461 | + success: function (res) { | ||
462 | + // console.log(res) | ||
463 | + callback(res) | ||
464 | + }, | ||
465 | + fail: function (err) { | ||
466 | + console.log("获取用户信息", err); | ||
467 | + callback(err) | ||
468 | + } | ||
469 | + }) | ||
470 | + } | ||
471 | + /** 游戏圈 */ | ||
472 | + public static createGameClubButton(target: Node) { | ||
473 | + let data = this.computWxPosition(target); | ||
474 | + //@ts-ignore | ||
475 | + return wx.createGameClubButton({ | ||
476 | + icon: 'white', | ||
477 | + style: { | ||
478 | + left: data.left, | ||
479 | + top: data.top, | ||
480 | + width: data.width, | ||
481 | + height: data.height, | ||
482 | + } | ||
483 | + }) | ||
484 | + | ||
485 | + } | ||
486 | + | ||
487 | + /** 抖音创建客服按钮 */ | ||
488 | + public static createContactButton(target: Node) { | ||
489 | + | ||
490 | + let data = this.computWxPosition(target); | ||
491 | + return wx.createContactButton({ | ||
492 | + type: "text", // image | text | ||
493 | + // image: "../resources/prefab/loading/mask", | ||
494 | + text: ' ', | ||
495 | + style: { | ||
496 | + left: data.left, | ||
497 | + top: data.top, | ||
498 | + width: data.width, | ||
499 | + height: data.height, | ||
500 | + // lineHeight: 40, | ||
501 | + backgroundColor: "#00000000", | ||
502 | + // textAlign: "center", | ||
503 | + // fontSize: 16, | ||
504 | + // borderRadius: 5, | ||
505 | + borderColor: "#00000000", | ||
506 | + // borderWidth: 1, | ||
507 | + // textColor: "#ffffff", | ||
508 | + }, | ||
509 | + success(res) { | ||
510 | + console.log("createContactButton success", res); | ||
511 | + }, | ||
512 | + fail(res) { | ||
513 | + console.log("createContactButton fail", res); | ||
514 | + }, | ||
515 | + complete(res) { | ||
516 | + console.log("createContactButton complete", res); | ||
517 | + }, | ||
518 | + }); | ||
519 | + } | ||
520 | + | ||
521 | + public static restartMiniProgram() { | ||
522 | + if (typeof my != 'undefined') { | ||
523 | + game.restart(); | ||
524 | + return; | ||
525 | + } | ||
526 | + if (!this.isWx) { | ||
527 | + return | ||
528 | + }; | ||
529 | + if (!wx.restartMiniProgram) { | ||
530 | + this.showToast("自动重启失败,请手动重启!", 10000); | ||
531 | + } | ||
532 | + wx.restartMiniProgram(); | ||
533 | + } | ||
534 | +} | ||
0 | \ No newline at end of file | 535 | \ No newline at end of file |
sdk/shareTools.ts
1 | -import WXSDK from "../wxsdk/WXSDK"; | 1 | +import { UIManager } from "../../framework/core/view/UIManager"; |
2 | +import { AudioManager } from "../../framework/mananger/AudioManager"; | ||
3 | +import TAMgr from "../../framework/ta/TAMgr"; | ||
4 | +import WXSDK from "../../framework/wxsdk/WXSDK"; | ||
5 | +import { EventModels, EventPool } from "../const/EventModels"; | ||
6 | +import { GameConst } from "../const/GameConst"; | ||
7 | +import { EActivitySubTaskType, EWindowExitCode, WindowType } from "../const/types"; | ||
8 | +import { mapController } from "../modules/map/MapController"; | ||
9 | +import { PayShopManager } from "../modules/server/manager/PayShopManager"; | ||
10 | +import { shopController } from "../modules/shop/ShopController"; | ||
11 | +import { Utils } from "../utils/Utils"; | ||
12 | +import MaskView from "../view/common/MaskView"; | ||
13 | +import { Analytics } from "./Analytics"; | ||
14 | +import { Ge } from "./Ge"; | ||
15 | +import { SDKTools } from "./SDKTools"; | ||
16 | +import { WxHelper } from "./WxHelper"; | ||
17 | + | ||
2 | /* | 18 | /* |
3 | * 分享与视频工具类; | 19 | * 分享与视频工具类; |
4 | */ | 20 | */ |
@@ -9,43 +25,126 @@ export class ShareTools { | @@ -9,43 +25,126 @@ export class ShareTools { | ||
9 | public static onShowAd: boolean = false; | 25 | public static onShowAd: boolean = false; |
10 | 26 | ||
11 | public static isTest: boolean = false; | 27 | public static isTest: boolean = false; |
28 | + | ||
29 | + // private static getAdCount() { | ||
30 | + // try { | ||
31 | + // let adCount = SDKTools.getParamsString("ad_count", '10,10'); | ||
32 | + // let arr = adCount.split(',').map(Number); | ||
33 | + // if (SDKTools.isnew) { | ||
34 | + // return +arr[0]; | ||
35 | + // } else { | ||
36 | + // return +arr[1]; | ||
37 | + // } | ||
38 | + // } catch (error) { | ||
39 | + // return 10; | ||
40 | + // } | ||
41 | + // } | ||
12 | /** | 42 | /** |
13 | * 验证分享:可处理成功、失败 | 43 | * 验证分享:可处理成功、失败 |
14 | * @param shareKey | 44 | * @param shareKey |
15 | * @param params params.fail 有就不处理,没有自动处理 | 45 | * @param params params.fail 有就不处理,没有自动处理 |
16 | - * @param opts 目前支持5个key 1,title自定义分享标题 2,img_url自定义分享图片 3,share_type(不走后台配置写死走视频or分享。1分享2视频3无视频则分享)4,closeSimulate是否关闭模拟分享 5:multiton重新创建视频实例 | 46 | + * @param opts 目前支持4个key 1,title自定义分享标题 2,img_url自定义分享图片 3,share_type(不走后台配置写死走视频or分享。1分享2视频3无视频则分享)4,closeSimulate是否关闭模拟分享 |
17 | */ | 47 | */ |
18 | - static share(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) { | ||
19 | - if (typeof wx === 'undefined' || this.isTest) { | 48 | + static async share(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) { |
49 | + const type = this.getShareType(shareKey); | ||
50 | + // 免广告卡、体验卡 | ||
51 | + if ((type == 2 && (!opts || opts.share_type != 1)) || (opts && opts.share_type == 2)) { | ||
52 | + if (PayShopManager.I.isExperienceOrNoAd()) { | ||
53 | + Analytics.I.dot("video_no_ad", { form: shareKey }); | ||
54 | + params && params.success && params.success(); | ||
55 | + return; | ||
56 | + } else { | ||
57 | + // 非免广告卡、体验卡用户 检查是否买过体验卡 | ||
58 | + if (PayShopManager.I.checkShowExperience()) { | ||
59 | + if (shopController.buyExperienceTips != Utils.getDayTime(0)) { | ||
60 | + shopController.buyExperienceTips = Utils.getDayTime(0);; | ||
61 | + UIManager.instance.showWindow2(WindowType.ExperienceGiftWindow); | ||
62 | + params && params.fail && params.fail(); | ||
63 | + return; | ||
64 | + } | ||
65 | + } | ||
66 | + } | ||
67 | + } | ||
68 | + // 广告卡 | ||
69 | + if (((type == 2 && (!opts || opts.share_type != 1)) || (opts && opts.share_type == 2)) && mapController.getPackageItemNum(GameConst.ITEM_ADCARD_ID) > 0) { | ||
70 | + const ret = await UIManager.instance.waitWindow2(WindowType.AdCardWindow); | ||
71 | + if (ret == EWindowExitCode.Yes) { | ||
72 | + Analytics.I.dot("ad_card", { ad_card: shareKey }); | ||
73 | + params && params.success && params.success(); | ||
74 | + return; | ||
75 | + } | ||
76 | + } | ||
77 | + | ||
78 | + if ((typeof wx == 'undefined'&&typeof my == 'undefined') || this.isTest) { | ||
20 | params && params.success && params.success(); | 79 | params && params.success && params.success(); |
80 | + // 分享 | ||
81 | + const evt = EventPool.get(EventModels.AcitvitySubTaskEvent); | ||
82 | + evt.type = EActivitySubTaskType.Share; | ||
83 | + evt.centerEmit(); | ||
21 | return | 84 | return |
22 | } | 85 | } |
86 | + | ||
87 | + // // 看广告n次后处理为分享 | ||
88 | + // let count = this.getAdCount(); | ||
89 | + // let isClear = false; | ||
90 | + // // console.log("改为分享前:", settingsController.videoCount, count); | ||
91 | + // if (settingsController.videoCount >= count) { | ||
92 | + // if (type != 1 || (opts && opts.share_type == 2)) {// 视频 or // 强制视频 | ||
93 | + // opts = { | ||
94 | + // ...opts, | ||
95 | + // share_type: 1,//强制改为分享 | ||
96 | + // }; | ||
97 | + // isClear = true; | ||
98 | + // // console.log("改为分享了"); | ||
99 | + // } | ||
100 | + // } | ||
101 | + | ||
23 | this.onShowAd = true; | 102 | this.onShowAd = true; |
103 | + AudioManager.I.pauseAll(); | ||
104 | + if (!opts || !opts.closeSimulate) { | ||
105 | + MaskView.Show() | ||
106 | + } | ||
24 | WXSDK.share.share(shareKey.toString(), params, opts).then(async res => { | 107 | WXSDK.share.share(shareKey.toString(), params, opts).then(async res => { |
25 | this.onShowAd = false; | 108 | this.onShowAd = false; |
109 | + // if (isClear) { | ||
110 | + // settingsController.videoCount = 0; | ||
111 | + // } | ||
112 | + if (res.type == 2) { | ||
113 | + // 视频 | ||
114 | + // settingsController.videoCount++; | ||
115 | + Ge.I.adShowEvent("video", shareKey.toString()); | ||
116 | + TAMgr.Ins.userAdd({ total_ad_num: 1 }); | ||
117 | + } else { | ||
118 | + // 分享 | ||
119 | + const evt = EventPool.get(EventModels.AcitvitySubTaskEvent); | ||
120 | + evt.type = EActivitySubTaskType.Share; | ||
121 | + evt.centerEmit(); | ||
122 | + TAMgr.Ins.dot('share_source', { from: shareKey }); | ||
123 | + } | ||
26 | params && params.success && params.success(res); | 124 | params && params.success && params.success(res); |
125 | + AudioManager.I.resumeAll(); | ||
126 | + MaskView.Hide(); | ||
27 | }).catch(async err => { | 127 | }).catch(async err => { |
128 | + AudioManager.I.resumeAll(); | ||
129 | + MaskView.Hide(); | ||
28 | this.onShowAd = false; | 130 | this.onShowAd = false; |
29 | if (!params || !params.fail) { | 131 | if (!params || !params.fail) { |
30 | - wx.showToast({ | ||
31 | - title: err.msg, | ||
32 | - icon: 'none', | ||
33 | - duration: 1500 | ||
34 | - }) | 132 | + if (err && err.msg) { |
133 | + WxHelper.showToast(err.msg) | ||
134 | + } | ||
35 | } else { | 135 | } else { |
36 | params && params.fail && params.fail(err); | 136 | params && params.fail && params.fail(err); |
37 | } | 137 | } |
38 | - })//this.buildParams(params) | 138 | + }) |
39 | } | 139 | } |
40 | 140 | ||
41 | /** | 141 | /** |
42 | - * 重新创建视频实例 | 142 | + * 必定视频 不走后台配置 |
43 | * @param shareKey | 143 | * @param shareKey |
44 | * @param params | 144 | * @param params |
45 | - * @param opts multiton重新创建视频实例 | ||
46 | */ | 145 | */ |
47 | - static multitonShare(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) { | ||
48 | - this.share(shareKey, params, { multiton: true, ...opts }); | 146 | + static video(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) { |
147 | + this.share(shareKey, params, { ...opts, share_type: 2 }); | ||
49 | } | 148 | } |
50 | /** | 149 | /** |
51 | * 纯净分享 不处理回调 | 150 | * 纯净分享 不处理回调 |
@@ -76,4 +175,11 @@ export class ShareTools { | @@ -76,4 +175,11 @@ export class ShareTools { | ||
76 | } | 175 | } |
77 | } | 176 | } |
78 | 177 | ||
178 | + /** | ||
179 | + * 分享到朋友圈 bate 只支持安卓 | ||
180 | + */ | ||
181 | + static onShareTimeline(title: string, imageUrl: string, imagePreviewUrl?: string, query?: string) { | ||
182 | + WXSDK.share.onShareTimeline(title, imageUrl, imagePreviewUrl, query); | ||
183 | + } | ||
184 | + | ||
79 | } | 185 | } |
wxsdk/WXSDK.ts
@@ -7,9 +7,10 @@ import LogService from "./service/LogService"; | @@ -7,9 +7,10 @@ import LogService from "./service/LogService"; | ||
7 | import AdService from "./service/AdService"; | 7 | import AdService from "./service/AdService"; |
8 | import OnlineService from "./service/OnlineService"; | 8 | import OnlineService from "./service/OnlineService"; |
9 | import WxInterstitial from "./wx/WxInterstitial"; | 9 | import WxInterstitial from "./wx/WxInterstitial"; |
10 | +import { sys } from "cc"; | ||
10 | export default class WXSDK { | 11 | export default class WXSDK { |
11 | public static get isWx(): boolean { | 12 | public static get isWx(): boolean { |
12 | - return typeof (wx) != "undefined" | 13 | + return typeof wx != "undefined" |
13 | } | 14 | } |
14 | public static get data(): SdkData { | 15 | public static get data(): SdkData { |
15 | return DataService.I.Data; | 16 | return DataService.I.Data; |
@@ -38,10 +39,10 @@ export default class WXSDK { | @@ -38,10 +39,10 @@ export default class WXSDK { | ||
38 | public static async init() { | 39 | public static async init() { |
39 | if (this.isWx) { | 40 | if (this.isWx) { |
40 | WxInit.I.init(); | 41 | WxInit.I.init(); |
41 | - // 视频预加载 启动预加载视频会闪屏 | ||
42 | - if (cc.sys.platform === cc.sys.WECHAT_GAME && typeof qq == 'undefined') { | 42 | + //视频预加载 启动预加载视频会闪屏 |
43 | + if (typeof wx !='undefined') { | ||
43 | setTimeout(() => { | 44 | setTimeout(() => { |
44 | - WxInterstitial.initInterstitialAd();//插屏预加载 | 45 | + // WxInterstitial.initInterstitialAd();//插屏预加载 |
45 | ShareVideoService.I.preloadVideo(); | 46 | ShareVideoService.I.preloadVideo(); |
46 | }, 2000); | 47 | }, 2000); |
47 | } | 48 | } |
@@ -0,0 +1,482 @@ | @@ -0,0 +1,482 @@ | ||
1 | +import SDKUtils from "../utils/SDKUtils"; | ||
2 | + | ||
3 | +import { __LOG__ } from "../base/SDKConst"; | ||
4 | +import { NetworkType } from "../base/SDKEnum"; | ||
5 | +import DataService from "../service/DataService"; | ||
6 | +import Version from "../wx/Version"; | ||
7 | +import WxApi from "../wx/WxApi"; | ||
8 | +import WxSystem from "../wx/WxSystem"; | ||
9 | +import { SDKApi } from "../http/SDKApi"; | ||
10 | + | ||
11 | +export default class AlipayApi { | ||
12 | + private getVersionError(version: string): { errMsg: string; errCode: number } { | ||
13 | + return { errMsg: `支持最低版本:${version}`, errCode: -1 }; | ||
14 | + } | ||
15 | + | ||
16 | + canIUse(version: string): boolean { | ||
17 | + return SDKUtils.compareVersion(WxSystem.I.SDKVersion, version) >= 0; | ||
18 | + } | ||
19 | + | ||
20 | + // 注意 | ||
21 | + // Android 6.7.2 以下版本,点击取消或蒙层时,回调 fail, errMsg 为 "fail cancel"; | ||
22 | + // Android 6.7.2 及以上版本 和 iOS 点击蒙层不会关闭模态弹窗,所以尽量避免使用「取消」分支中实现业务逻辑 | ||
23 | + showModal(data: any) { | ||
24 | + wx.showModal(data); | ||
25 | + } | ||
26 | + | ||
27 | + subscribeMessage(tmplIds: Array<string>) { | ||
28 | + let version = Version.I.getVSubscribeMessage(); | ||
29 | + if (!this.canIUse(version)) return Promise.reject(this.getVersionError(version)); | ||
30 | + // console.log("tmplIds", tmplIds) | ||
31 | + return new Promise((resolve, reject) => { | ||
32 | + wx.requestSubscribeMessage({ | ||
33 | + tmplIds, | ||
34 | + success: (ret: { errMsg: string }) => { | ||
35 | + resolve(ret); | ||
36 | + }, | ||
37 | + fail: (err: { errMsg: string; errCode: number }) => { | ||
38 | + reject(err); | ||
39 | + } | ||
40 | + }); | ||
41 | + }); | ||
42 | + } | ||
43 | + | ||
44 | + /** | ||
45 | + * 创建banner广告 | ||
46 | + */ | ||
47 | + createBannerAd(adUnitId: string, style: _StyleObject, adIntervals?: number) { | ||
48 | + if (!this.canIUse(Version.I.getVBannerAd())) return null; | ||
49 | + | ||
50 | + adIntervals = adIntervals || 30; | ||
51 | + return my.createBannerAd({ | ||
52 | + adUnitId, | ||
53 | + style | ||
54 | + }); | ||
55 | + } | ||
56 | + | ||
57 | + /** | ||
58 | + * 创建小游戏推荐banner | ||
59 | + */ | ||
60 | + createGameBanner(adUnitId: string, style: _StyleGameObject) { | ||
61 | + if (!this.canIUse(Version.I.getVGameBanner())) return null; | ||
62 | + | ||
63 | + return my.createGameBanner({ | ||
64 | + adUnitId, | ||
65 | + style | ||
66 | + }); | ||
67 | + } | ||
68 | + | ||
69 | + /** | ||
70 | + * 创建插屏广告组件 | ||
71 | + */ | ||
72 | + createInterstitialAd(adUnitId: string) { | ||
73 | + if (!this.canIUse(Version.I.getVInterstitialAd())) return null; | ||
74 | + return my.createInterstitialAd({ | ||
75 | + adUnitId | ||
76 | + }); | ||
77 | + } | ||
78 | + | ||
79 | + /** | ||
80 | + * 创建小游戏推荐icon组件 | ||
81 | + */ | ||
82 | + createGameIcon(adUnitId: string, opts: { count: number; style: Array<_GameIconStyleItem> }) {// | ||
83 | + if (!this.canIUse(Version.I.getVGameIcon())) return null; | ||
84 | + | ||
85 | + return wx.createGameIcon({ adUnitId, ...opts }); | ||
86 | + } | ||
87 | + | ||
88 | + /** | ||
89 | + * 创建小游戏推荐弹窗组件 | ||
90 | + */ | ||
91 | + createGamePortal(adUnitId: string) { | ||
92 | + if (!this.canIUse(Version.I.getVGamePortal())) return null; | ||
93 | + | ||
94 | + return wx.createGamePortal({ | ||
95 | + adUnitId | ||
96 | + }); | ||
97 | + } | ||
98 | + | ||
99 | + /** | ||
100 | + * 创建激励视频广告组件 | ||
101 | + */ | ||
102 | + createRewardedVideoAd(adUnitId: string) { | ||
103 | + // if (!this.canIUse(Version.I.getVRewardedVideoAd())) return null; | ||
104 | + return my.createRewardedAd({ | ||
105 | + adUnitId: adUnitId, | ||
106 | + }); | ||
107 | + } | ||
108 | + | ||
109 | + /** | ||
110 | + * 创建打开意见反馈页面的按钮 | ||
111 | + */ | ||
112 | + createFeedbackButton(data: _FeedbackButtonObject) { | ||
113 | + if (!this.canIUse(Version.I.getVFeedbackButton())) return null; | ||
114 | + | ||
115 | + return wx.createFeedbackButton(data); | ||
116 | + } | ||
117 | + | ||
118 | + /** | ||
119 | + * 创建用户信息按钮 | ||
120 | + */ | ||
121 | + createUserInfoButton(data: _UserInfoButtonObject): _UserInfoButton | null {// | ||
122 | + if (!this.canIUse(Version.I.getVUserInfoButton())) return null; | ||
123 | + return wx.createUserInfoButton(data); | ||
124 | + } | ||
125 | + | ||
126 | + /** | ||
127 | + * 进入客服会话。要求在用户发生过至少一次 touch 事件后才能调用 | ||
128 | + */ | ||
129 | + openCustomerServiceConversation(params: _CustomerServiceConversationObject) {// | ||
130 | + if (!this.canIUse(Version.I.getVCustomerService())) return -1; | ||
131 | + wx.openCustomerServiceConversation({ ...params }); | ||
132 | + return 1; | ||
133 | + } | ||
134 | + | ||
135 | + vibrateLong() { | ||
136 | + // if (!this.canIUse(Version.I.getVVibrate())) return Promise.reject(null); | ||
137 | + | ||
138 | + return new Promise((resolve, reject) => { | ||
139 | + my.vibrateLong({ | ||
140 | + success: () => { | ||
141 | + resolve(1); | ||
142 | + }, | ||
143 | + fail: () => { | ||
144 | + resolve(0); | ||
145 | + } | ||
146 | + }); | ||
147 | + }); | ||
148 | + } | ||
149 | + | ||
150 | + vibrateShort() { | ||
151 | + // if (!this.canIUse(Version.I.getVVibrate())) return Promise.reject(null); | ||
152 | + return new Promise((resolve, reject) => { | ||
153 | + my.vibrateShort({ | ||
154 | + success: () => { | ||
155 | + resolve(1); | ||
156 | + }, | ||
157 | + fail: () => { | ||
158 | + resolve(0); | ||
159 | + } | ||
160 | + }); | ||
161 | + }); | ||
162 | + } | ||
163 | + | ||
164 | + /** | ||
165 | + * 更新转发属性 | ||
166 | + */ | ||
167 | + updateShareMenu(value: boolean) { | ||
168 | + if (!this.canIUse(Version.I.getVUpdateShareMenu())) return; | ||
169 | + wx.updateShareMenu({ | ||
170 | + withShareTicket: value | ||
171 | + }); | ||
172 | + } | ||
173 | + | ||
174 | + /** | ||
175 | + * 检测更新 | ||
176 | + */ | ||
177 | + checkUpdate(data: _ShowModalObject): void {// | ||
178 | + if (!this.canIUse(Version.I.getVUpdateManager())) return; | ||
179 | + | ||
180 | + data = data || {}; | ||
181 | + // tslint:disable-next-line: no-this-assignment | ||
182 | + let that = this; | ||
183 | + // 默认参数 | ||
184 | + let params: _ShowModalObject = {// | ||
185 | + title: data.title || '更新提示', | ||
186 | + content: data.content || '新版本已经准备好,是否重启应用?', | ||
187 | + showCancel: false, | ||
188 | + success: (res: _ShowModalSuccessObject) => {// | ||
189 | + data.success && data.success(res); | ||
190 | + if (res.confirm) { | ||
191 | + updateManager.applyUpdate(); | ||
192 | + } | ||
193 | + }, | ||
194 | + fail: (err: any) => data.fail && data.fail(err), | ||
195 | + complete: () => data.complete && data.complete() | ||
196 | + }; | ||
197 | + // 合并参数 | ||
198 | + let keys = ['cancelText', 'cancelColor', 'confirmText', 'confirmColor']; | ||
199 | + keys.forEach(key => SDKUtils.hasProperty(data, key) && (params = { ...params, [key]: data[key] })); | ||
200 | + | ||
201 | + let updateManager = wx.getUpdateManager(); | ||
202 | + updateManager.onCheckForUpdate((res: any) => { | ||
203 | + __LOG__ && console.warn('====> PCSDK AlipayApi updateManager onCheckForUpdate', res.hasUpdate); | ||
204 | + }); | ||
205 | + updateManager.onUpdateReady(function () { | ||
206 | + that.showModal(params); | ||
207 | + }); | ||
208 | + updateManager.onUpdateFailed(function () { | ||
209 | + // 新的版本下载失败 | ||
210 | + __LOG__ && console.warn('SDK WxApi updateManager onUpdateFailed'); | ||
211 | + }); | ||
212 | + } | ||
213 | + | ||
214 | + /** | ||
215 | + * 显示当前页面的转发按钮 | ||
216 | + */ | ||
217 | + showShareMenu(shareApp: _ShareAppMessageObject, shareMenu: _UpdateShareMenuObject) { | ||
218 | + if (!this.canIUse(Version.I.getVShowShareMenu())) return; | ||
219 | + __LOG__ && console.error('showShareMenu shareApp'); | ||
220 | + __LOG__ && console.error('showShareMenu shareMenu'); | ||
221 | + my.onShareAppMessage(() => shareApp); | ||
222 | + // my.showShareMenu(shareMenu); | ||
223 | + } | ||
224 | + | ||
225 | + /** | ||
226 | + * 主动拉起转发,进入选择通讯录界面。 | ||
227 | + */ | ||
228 | + shareAppMessage(data: _ShareAppMessageObject, callback: { success: Function, fail: Function, cancel: Function }) { | ||
229 | + my.onShareAppMessage = function () { | ||
230 | + return { | ||
231 | + title: data.title, | ||
232 | + bgImgUrl:'https://wxsdk-cdn.miso-lab.com/moon-island/share/zfbshare.jpeg', | ||
233 | + // desc: , | ||
234 | + scImgUrl: data.imageUrl, | ||
235 | + success: function (res) { | ||
236 | + console.log(res); | ||
237 | + }, | ||
238 | + fail: function (e) { | ||
239 | + console.log(e); | ||
240 | + }, | ||
241 | + complete: function (e) { | ||
242 | + | ||
243 | + } | ||
244 | + } | ||
245 | + } | ||
246 | + | ||
247 | + return my.showSharePanel({ | ||
248 | + success: () => { | ||
249 | + callback.success(); | ||
250 | + | ||
251 | + }, | ||
252 | + fail: () => { | ||
253 | + callback.fail(); | ||
254 | + }, | ||
255 | + complete: (e) => { | ||
256 | + | ||
257 | + }, | ||
258 | + }); | ||
259 | + | ||
260 | + } | ||
261 | + | ||
262 | + previewImage(imgList: Array<string>, index: number) { | ||
263 | + return new Promise((suc, fail) => { | ||
264 | + if (!imgList || imgList.length === 0) { | ||
265 | + fail(); | ||
266 | + return; | ||
267 | + } | ||
268 | + wx.previewImage({ | ||
269 | + current: imgList[index], // 当前显示图片的http链接 | ||
270 | + urls: imgList, // 需要预览的图片http链接列表 | ||
271 | + success(res: any) { | ||
272 | + suc({ ...res, qrcode: 1 }); | ||
273 | + }, | ||
274 | + fail(err: any) { | ||
275 | + fail(err); | ||
276 | + } | ||
277 | + }); | ||
278 | + }); | ||
279 | + } | ||
280 | + | ||
281 | + getNetworkType(): Promise<_NetworkTypeSuccessObject> { | ||
282 | + return new Promise((resolve, reject) => { | ||
283 | + wx.getNetworkType({ | ||
284 | + success(res: _NetworkTypeSuccessObject) { | ||
285 | + resolve(res); | ||
286 | + }, | ||
287 | + fail(err: any) { | ||
288 | + reject({ networkType: NetworkType.Unknown }); | ||
289 | + } | ||
290 | + }); | ||
291 | + }); | ||
292 | + } | ||
293 | + | ||
294 | + navigateToMiniProgram(appId: string, path: string, opts: any = {}) { | ||
295 | + return new Promise((resolve, reject) => { | ||
296 | + wx.navigateToMiniProgram({ | ||
297 | + appId, | ||
298 | + path, | ||
299 | + extraData: opts.extraData || {}, | ||
300 | + envVersion: opts.envVersion || 'release', | ||
301 | + success(res: any) { | ||
302 | + resolve(res); | ||
303 | + }, | ||
304 | + fail(err: any) { | ||
305 | + reject(err); | ||
306 | + } | ||
307 | + }); | ||
308 | + }); | ||
309 | + } | ||
310 | + | ||
311 | + /** | ||
312 | + * login获取code接口 | ||
313 | + */ | ||
314 | + login(): Promise<any> { | ||
315 | + return new Promise((resolve, reject) => { | ||
316 | + my.getAuthCode({ | ||
317 | + scopes: 'auth_base', | ||
318 | + success: (res) => { | ||
319 | + resolve(res.authCode); | ||
320 | + }, | ||
321 | + fail: (err: any) => { | ||
322 | + reject(err); | ||
323 | + } | ||
324 | + }); | ||
325 | + }); | ||
326 | + } | ||
327 | + | ||
328 | + /** | ||
329 | + * 用户信息授权接口 | ||
330 | + */ | ||
331 | + getUserinfo(): Promise<any> { | ||
332 | + return new Promise((resolve, reject) => { | ||
333 | + my.getAuthUserInfo({ | ||
334 | + success: (ret: any) => { | ||
335 | + if (!ret) { | ||
336 | + console.log('getUserinfo success', ret) | ||
337 | + reject(ret); | ||
338 | + return AlipayApi.I.setAuthorize({ | ||
339 | + errorTip: 'getUserInfo Success result is null', | ||
340 | + ...ret | ||
341 | + }); | ||
342 | + } | ||
343 | + console.log('getUserinfo success', ret) | ||
344 | + resolve(ret); | ||
345 | + }, | ||
346 | + fail: (err: any) => { | ||
347 | + console.log('getUserinfo fail', err) | ||
348 | + reject(err); | ||
349 | + AlipayApi.I.setAuthorize({ | ||
350 | + errorTip: 'getUserInfo Fail', | ||
351 | + ...err | ||
352 | + }); | ||
353 | + }, | ||
354 | + complete: (res) => { | ||
355 | + console.log('getUserinfo complete', res) | ||
356 | + } | ||
357 | + }); | ||
358 | + }); | ||
359 | + } | ||
360 | + | ||
361 | + /** | ||
362 | + * 分享接口 | ||
363 | + * @param shareTicket | ||
364 | + */ | ||
365 | + getShareInfo(shareTicket: string): Promise<any> { | ||
366 | + if (!this.canIUse(Version.I.getVShareInfo())) return Promise.reject(null); | ||
367 | + | ||
368 | + return new Promise((resolve, reject) => { | ||
369 | + wx.getShareInfo({ | ||
370 | + shareTicket, | ||
371 | + success: (ret: _getShareInfoSuccessObject) => { | ||
372 | + let { errMsg } = ret; | ||
373 | + if (errMsg === 'getShareInfo:ok') { | ||
374 | + resolve(ret); | ||
375 | + } else { | ||
376 | + reject(ret); | ||
377 | + } | ||
378 | + }, | ||
379 | + fail: (err: any) => { | ||
380 | + reject(err); | ||
381 | + } | ||
382 | + }); | ||
383 | + }); | ||
384 | + } | ||
385 | + | ||
386 | + /** | ||
387 | + * 米大师充值 | ||
388 | + */ | ||
389 | + requestMidasPayment(params: { mode: string; env: number; offerId: string; currencyType: string; platform: string; buyQuantity: number; zoneId: string }): Promise<any> { | ||
390 | + let { mode, env, offerId, currencyType, platform, buyQuantity, zoneId } = params; | ||
391 | + console.warn('====> PCSDK AlipayApi requestMidasPayment 支付参数', { | ||
392 | + mode, | ||
393 | + env, | ||
394 | + offerId, | ||
395 | + currencyType, | ||
396 | + platform, | ||
397 | + buyQuantity, | ||
398 | + zoneId | ||
399 | + }); | ||
400 | + return new Promise((resolve, reject) => { | ||
401 | + wx.requestMidasPayment({ | ||
402 | + mode, | ||
403 | + env, | ||
404 | + offerId, | ||
405 | + currencyType, | ||
406 | + platform, | ||
407 | + buyQuantity, | ||
408 | + zoneId, | ||
409 | + success: ret => { | ||
410 | + if (ret && ret.errMsg === 'requestMidasPayment:ok') | ||
411 | + resolve(ret); | ||
412 | + else | ||
413 | + reject(ret); | ||
414 | + }, | ||
415 | + fail: err => { | ||
416 | + reject(err); | ||
417 | + } | ||
418 | + }); | ||
419 | + }); | ||
420 | + } | ||
421 | + | ||
422 | + private setAuthorize(error: any) { | ||
423 | + DataService.I.setAuthorize(false); | ||
424 | + } | ||
425 | + | ||
426 | + canIncrementGameaction(): boolean { | ||
427 | + if (window['my'] == undefined) return false; | ||
428 | + return true; | ||
429 | + } | ||
430 | + /** | ||
431 | + * 玩一玩增量行为 | ||
432 | + */ | ||
433 | + incrementGameaction(action_code: string) { | ||
434 | + return new Promise((resolve, reject) => { | ||
435 | + if (window['my'] == undefined) return reject(null); | ||
436 | + let channel = 'other'; | ||
437 | + let info = my.getLaunchOptionsSync(); | ||
438 | + if (info.query.channel == undefined) { | ||
439 | + channel = 'other'; | ||
440 | + } else { | ||
441 | + if (info.query.channel.length <= 0 || info.query.channel == null) { | ||
442 | + channel = 'other'; | ||
443 | + } else { | ||
444 | + channel = info.query.channel; | ||
445 | + } | ||
446 | + } | ||
447 | + // my.alert({ | ||
448 | + // title: '增加量行为', | ||
449 | + // content:`${action_code}` | ||
450 | + // }); | ||
451 | + let uid = DataService.I.UserId; | ||
452 | + let token = DataService.I.Token; | ||
453 | + let openid = DataService.I.OpenId; | ||
454 | + let action_finish_channel = channel | ||
455 | + let params = { | ||
456 | + uid, | ||
457 | + token, | ||
458 | + openid, | ||
459 | + action_code, | ||
460 | + action_finish_channel | ||
461 | + }; | ||
462 | + return SDKApi.incrementGameaction(params).then(() => { | ||
463 | + // my.confirm({ | ||
464 | + // title: '增加量行为', | ||
465 | + // content: `${action_code}`, | ||
466 | + // confirmButtonText: ``, | ||
467 | + // cancelButtonText: '暂不需要', | ||
468 | + // success: (result) => { | ||
469 | + // }, | ||
470 | + // }); | ||
471 | + resolve(null) | ||
472 | + }) | ||
473 | + }) | ||
474 | + } | ||
475 | + | ||
476 | + | ||
477 | + private static _instance: AlipayApi; | ||
478 | + static get I(): AlipayApi { | ||
479 | + return this._instance || (this._instance = new AlipayApi); | ||
480 | + } | ||
481 | + | ||
482 | +} |
@@ -0,0 +1,238 @@ | @@ -0,0 +1,238 @@ | ||
1 | + | ||
2 | +// import SDKUtils from "../utils/SDKUtils"; | ||
3 | +// import { BannerError, __LOG__ } from "../base/SDKConst"; | ||
4 | +// import LogService from "../service/LogService"; | ||
5 | +// import { DOT_AD_STATUS, DOT_AD_TYPE } from "../base/SDKEnum"; | ||
6 | +// import WxSystem from "../wx/WxSystem"; | ||
7 | +// import AlipayApi from "./AlipayApi"; | ||
8 | + | ||
9 | + | ||
10 | +// /* | ||
11 | +// * banner | ||
12 | +// */ | ||
13 | +// export default class AlipayBanner { | ||
14 | +// private static instance: AlipayBanner; | ||
15 | +// static get I(): AlipayBanner { | ||
16 | +// return this.instance || (this.instance = new AlipayBanner(750, 750)); | ||
17 | +// } | ||
18 | +// private designWidth: number; | ||
19 | +// private bannerWidth: number; | ||
20 | +// private bannerHeight: number; | ||
21 | +// private bannerScale: number; | ||
22 | +// private bannerParams: any; | ||
23 | +// private _isErrored: boolean; | ||
24 | +// private adUnitId: string; | ||
25 | +// private bannerAd: any; | ||
26 | +// private resolve: any; | ||
27 | +// private reject: any; | ||
28 | + | ||
29 | +// constructor(designWidth: number, bannerWidth: number) { | ||
30 | +// designWidth = designWidth || 750; | ||
31 | +// bannerWidth = bannerWidth || 750; | ||
32 | + | ||
33 | +// this.adUnitId = ''; | ||
34 | +// this._isErrored = false; | ||
35 | +// this.designWidth = designWidth; | ||
36 | +// this.bannerScale = WxSystem.I.winWidth / this.designWidth; | ||
37 | +// this.bannerWidth = Math.max(this.bannerScale * bannerWidth, 300); | ||
38 | +// this.bannerHeight = WxSystem.I.winHeight / this.bannerScale; | ||
39 | +// } | ||
40 | + | ||
41 | +// get isErrored() { | ||
42 | +// return this._isErrored; | ||
43 | +// } | ||
44 | + | ||
45 | +// private queue: Function[] = []; | ||
46 | +// private isEnd: boolean = false; | ||
47 | + | ||
48 | +// create(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) { | ||
49 | +// // console.log('wxbanner can not') | ||
50 | +// if (SDKUtils.compareVersion(my.env.clientVersion, '10.3.66') < 0) return null; | ||
51 | +// // if (!WxApi.I.canIUse(Version.I.getVBannerAd())) | ||
52 | +// // console.log('wxbanner can', adUnitId) | ||
53 | + | ||
54 | +// this.bannerParams = opts || {}; | ||
55 | +// if (opts && opts.bannerWidth) { | ||
56 | +// this.bannerWidth = opts.bannerWidth; | ||
57 | +// } | ||
58 | +// this.isEnd = true; | ||
59 | +// this.bannerParams.type = this.bannerParams.type || 1; | ||
60 | +// this.bannerParams.offsetY = -this.bannerParams.offsetY || 0; | ||
61 | +// this.bannerParams.adIntervals = this.bannerParams.adIntervals || 120; | ||
62 | +// return new Promise((resolve, reject) => { | ||
63 | +// this.resolve = resolve; | ||
64 | +// this.reject = reject; | ||
65 | +// this._isErrored = false; | ||
66 | +// this.adUnitId = adUnitId; | ||
67 | + | ||
68 | +// if (SDKUtils.isEmpty(adUnitId)) { | ||
69 | +// AlipayBanner.I.handleQueue(); | ||
70 | +// return this.reject({ ...BannerError.BannerInvalid, adUnitId: this.adUnitId }); | ||
71 | +// } | ||
72 | + | ||
73 | +// // 设置样式(hack:修复qq版本) | ||
74 | +// this.bannerParams.type === 2 && (this.bannerWidth = WxSystem.I.winWidth); | ||
75 | +// let style = { top: 0, left: (WxSystem.I.winWidth - this.bannerWidth) / 2, width: this.bannerWidth }; | ||
76 | +// style = { | ||
77 | +// ...style, | ||
78 | +// top: WxSystem.I.winHeight - 100, | ||
79 | +// }; | ||
80 | +// // 创建并判断是否存在 | ||
81 | +// // if (this.bannerParams.type === 2) | ||
82 | +// // this.bannerAd = wx.createGameBanner({ adUnitId, style: { left: style.left, top: this.bannerHeight } }); | ||
83 | +// // else | ||
84 | +// if (this.bannerAd) { | ||
85 | +// if (!opts || (opts && !opts.isOff)) { | ||
86 | +// this.show(false); | ||
87 | +// } | ||
88 | +// return | ||
89 | +// } | ||
90 | +// this.bannerAd = AlipayApi.I.createBannerAd(adUnitId, style); | ||
91 | +// LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.request) | ||
92 | +// if (!this.bannerAd) { | ||
93 | +// AlipayBanner.I.handleQueue(); | ||
94 | +// return this.reject({ ...BannerError.BannerNotOpen, adUnitId: this.adUnitId }); | ||
95 | +// } | ||
96 | +// this.bannerAd.onLoad(this.onLoad); | ||
97 | +// this.bannerAd.onError(this.onError); | ||
98 | +// //支付宝无这个方法!!! | ||
99 | +// // this.bannerAd.onResize(this.onResize); | ||
100 | +// if (!opts || (opts && !opts.isOff)) { | ||
101 | +// this.show(false); | ||
102 | +// } | ||
103 | +// }); | ||
104 | +// } | ||
105 | + | ||
106 | +// /** | ||
107 | +// * | ||
108 | +// * @param bol | ||
109 | +// */ | ||
110 | +// show(bol: boolean = true): boolean { | ||
111 | +// if (AlipayBanner.I.isEnd && bol) { | ||
112 | +// AlipayBanner.I.queue.push(AlipayBanner.I.show.bind(AlipayBanner.I)) | ||
113 | +// return | ||
114 | +// } | ||
115 | +// AlipayBanner.I.isEnd = true | ||
116 | +// if (this.bannerAd) { | ||
117 | +// if (this.bannerAd.style.realHeight) | ||
118 | +// this.bannerAd.style.top = WxSystem.I.winHeight - this.bannerAd.style.realHeight + this.bannerParams.offsetY; | ||
119 | +// if (this.bannerParams.type === 2) { | ||
120 | +// if (this.bannerAd.style.width) | ||
121 | +// this.bannerAd.style.left = (WxSystem.I.winWidth - this.bannerAd.style.width) / 2; | ||
122 | +// else | ||
123 | +// this.bannerAd.style.left = (WxSystem.I.winWidth - this.bannerWidth) / 2; | ||
124 | +// } else | ||
125 | +// this.bannerAd.style.left = (WxSystem.I.winWidth - this.bannerWidth) / 2; | ||
126 | + | ||
127 | +// LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.show) | ||
128 | +// this.bannerAd.show().catch((err: any) => this.handleShowError(err)); | ||
129 | +// __LOG__ && console.error('wxBanner - show: ' + this.adUnitId, this.bannerAd.style); | ||
130 | +// AlipayBanner.I.handleQueue() | ||
131 | +// return true; | ||
132 | +// } | ||
133 | +// AlipayBanner.I.handleQueue() | ||
134 | +// return false; | ||
135 | +// } | ||
136 | + | ||
137 | +// hide() { | ||
138 | +// let that = AlipayBanner.I; | ||
139 | +// if (that.isEnd) { | ||
140 | +// that.queue.push(that.hide.bind(that)) | ||
141 | +// return | ||
142 | +// } | ||
143 | +// that.isEnd = true | ||
144 | +// if (this.bannerAd) { | ||
145 | +// this.bannerAd.style.left = -9999; | ||
146 | +// this.bannerAd.hide(); | ||
147 | +// LogService.I.adStat('banner', that.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.interrupt) | ||
148 | +// __LOG__ && console.error('wxBanner - hide: ' + this.adUnitId); | ||
149 | +// } | ||
150 | +// that.handleQueue() | ||
151 | +// } | ||
152 | + | ||
153 | +// toggle(isshow: boolean) { | ||
154 | +// isshow ? this.show() : this.hide(); | ||
155 | +// } | ||
156 | + | ||
157 | +// destory() { | ||
158 | +// if (this.bannerAd) { | ||
159 | +// this.bannerAd.style.left = -9999; | ||
160 | +// this.bannerAd.destroy(); | ||
161 | +// this.bannerAd = null; | ||
162 | +// LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.interrupt) | ||
163 | +// __LOG__ && console.error('wxBanner - destory: ' + this.adUnitId); | ||
164 | +// } | ||
165 | +// } | ||
166 | + | ||
167 | +// private onLoad() { | ||
168 | +// let that = AlipayBanner.I; | ||
169 | +// let bannerAd = that.bannerAd; | ||
170 | +// if (!bannerAd) return; | ||
171 | +// // Platform.IsQQ && that.show(); | ||
172 | +// __LOG__ && console.error('wxBanner - onLoad: ' + that.adUnitId); | ||
173 | +// if (bannerAd.style.realHeight) | ||
174 | +// bannerAd.style.top = WxSystem.I.winHeight - bannerAd.style.realHeight + that.bannerParams.offsetY; | ||
175 | +// that.unbind(); | ||
176 | +// that.handleQueue(); | ||
177 | +// that.resolve && that.resolve({ | ||
178 | +// adUnitId: that.adUnitId, | ||
179 | +// scale: that.bannerScale, | ||
180 | +// width: bannerAd.style.realWidth / that.bannerScale, | ||
181 | +// height: bannerAd.style.realHeight / that.bannerScale | ||
182 | +// }); | ||
183 | +// } | ||
184 | + | ||
185 | +// private onError(err: any, ...params) { | ||
186 | +// __LOG__ && console.error('wxBanner - onError', err, JSON.stringify(err), params); | ||
187 | +// let that = AlipayBanner.I; | ||
188 | +// !that._isErrored && that.handleError(err, { ...BannerError.BannerFail, adUnitId: that.adUnitId }); | ||
189 | +// } | ||
190 | + | ||
191 | +// private onResize() { | ||
192 | +// let that = AlipayBanner.I; | ||
193 | +// let bannerAd = that.bannerAd; | ||
194 | +// if (!bannerAd) return; | ||
195 | +// bannerAd.style.top = WxSystem.I.winHeight - bannerAd.style.realHeight + that.bannerParams.offsetY; | ||
196 | +// bannerAd.style.left = (WxSystem.I.winWidth - bannerAd.style.realWidth) / 2; | ||
197 | +// } | ||
198 | + | ||
199 | +// private handleShowError(ret: { errCode: number; errMsg: string }) { | ||
200 | +// __LOG__ && console.error('wxBanner - handleShowError', ret); | ||
201 | +// let that = AlipayBanner.I; | ||
202 | +// let { errCode, errMsg } = ret; | ||
203 | +// !that.isErrored && that.handleError(ret, { code: errCode, msg: errMsg }); | ||
204 | +// } | ||
205 | + | ||
206 | +// private handleError(ret: any, err: any) { | ||
207 | +// let that = AlipayBanner.I; | ||
208 | +// that.unbind(); | ||
209 | +// that._isErrored = true; | ||
210 | +// that.bannerAd = null; | ||
211 | +// that.handleQueue() | ||
212 | +// LogService.I.adStat('banner', that.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.fail) | ||
213 | +// that.reject && that.reject({ ...err, adUnitId: that.adUnitId }); | ||
214 | +// __LOG__ && console.error('wxBanner - onError: ' + that.adUnitId, ret, err); | ||
215 | +// } | ||
216 | + | ||
217 | +// private unbind() { | ||
218 | +// if (this.bannerAd) { | ||
219 | +// // this.bannerAd.offLoad(this.onLoad); | ||
220 | +// // this.bannerAd.offError(this.onError); | ||
221 | +// // this.bannerAd.offResize(this.onResize); | ||
222 | +// } | ||
223 | +// } | ||
224 | + | ||
225 | +// /** | ||
226 | +// * 处队列 | ||
227 | +// */ | ||
228 | +// handleQueue() { | ||
229 | +// let that = AlipayBanner.I; | ||
230 | +// if (that.queue.length > 0) { | ||
231 | +// that.isEnd = false; | ||
232 | +// let fn = that.queue.shift(); | ||
233 | +// fn(); | ||
234 | +// } else { | ||
235 | +// that.isEnd = false; | ||
236 | +// } | ||
237 | +// } | ||
238 | +// } | ||
0 | \ No newline at end of file | 239 | \ No newline at end of file |
@@ -0,0 +1,68 @@ | @@ -0,0 +1,68 @@ | ||
1 | +// import { GAMEDATA } from "../base/SDKConst"; | ||
2 | +// import { DOT_AD_STATUS, DOT_AD_TYPE } from "../base/SDKEnum"; | ||
3 | +// import LogService from "../service/LogService"; | ||
4 | +// import AlipayApi from "./AlipayApi"; | ||
5 | + | ||
6 | +// export default class AlipayInterstitial { | ||
7 | +// /** 插屏广告ID */ | ||
8 | +// private static interstitialAdId: string = GAMEDATA.interstitialAdId; | ||
9 | +// /** 插屏广告实例 */ | ||
10 | +// public static interstitialAd: any; | ||
11 | +// /** 插屏广告是否加载完成 */ | ||
12 | +// private static interstitialSuccell: boolean = false; | ||
13 | +// /** 初始化插屏广告 */ | ||
14 | +// public static initInterstitialAd(adUnitId: string = GAMEDATA.interstitialAdId) { | ||
15 | +// this.interstitialAdId = adUnitId; | ||
16 | +// this.createInterstitial(); | ||
17 | +// } | ||
18 | + | ||
19 | +// /** 显示插屏广告 */ | ||
20 | +// public static showInterstitialAd(adUnitId: string = GAMEDATA.interstitialAdId) { | ||
21 | +// return new Promise(async (resolve, reject) => { | ||
22 | +// this.interstitialAdId = adUnitId; | ||
23 | +// if (!this.interstitialSuccell) { | ||
24 | +// this.createInterstitial(true, resolve); | ||
25 | +// return; | ||
26 | +// } | ||
27 | +// this.interstitialAd.show().then(suc => { | ||
28 | +// resolve && resolve({ code: 0, msg: "展示成功!" }); | ||
29 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.show) | ||
30 | +// }).catch((err) => { | ||
31 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.fail) | ||
32 | +// resolve && resolve({ code: err.errCode, msg: err.errMsg }); | ||
33 | +// }) | ||
34 | +// }) | ||
35 | +// } | ||
36 | + | ||
37 | +// /** 创建插屏广告 */ | ||
38 | +// private static createInterstitial(isShow: boolean = false, resolve?) { | ||
39 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.request) | ||
40 | +// this.interstitialAd = AlipayApi.I.createInterstitialAd(this.interstitialAdId); | ||
41 | +// this.interstitialAd.onLoad(async () => { | ||
42 | +// AlipayInterstitial.interstitialSuccell = true; | ||
43 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.rt) | ||
44 | +// if (isShow) { | ||
45 | +// this.interstitialAd.show().then(suc => { | ||
46 | +// resolve && resolve({ code: 0, msg: "展示成功!" }); | ||
47 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.show) | ||
48 | +// }).catch((err) => { | ||
49 | +// AlipayInterstitial.interstitialSuccell = false; | ||
50 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.fail) | ||
51 | +// resolve && resolve({ code: err.errCode, msg: err.errMsg }); | ||
52 | +// }) | ||
53 | +// } | ||
54 | +// }) | ||
55 | +// this.interstitialAd.onError(err => { | ||
56 | +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.fail) | ||
57 | +// AlipayInterstitial.interstitialSuccell = false; | ||
58 | +// resolve && resolve({ code: err.errCode, msg: err.errMsg }); | ||
59 | +// }) | ||
60 | + | ||
61 | +// this.interstitialAd.onClose(call => { | ||
62 | +// this.createInterstitial(false); | ||
63 | +// }) | ||
64 | +// // }).bind(this), 200); | ||
65 | + | ||
66 | + | ||
67 | +// } | ||
68 | +// } | ||
0 | \ No newline at end of file | 69 | \ No newline at end of file |
@@ -0,0 +1,183 @@ | @@ -0,0 +1,183 @@ | ||
1 | +import { WxHelper } from '../../../game/sdk/WxHelper'; | ||
2 | +import { GAMEDATA } from '../base/SDKConst'; | ||
3 | +import { EnvCode } from '../base/SDKEnum'; | ||
4 | +import { SDKApi } from '../http/SDKApi'; | ||
5 | +import DataService from '../service/DataService'; | ||
6 | +import WxSystem from '../wx/WxSystem'; | ||
7 | + | ||
8 | +export default class ZfbPay { | ||
9 | + /** | ||
10 | + * 发起支付 | ||
11 | + */ | ||
12 | + pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}): Promise<any> { | ||
13 | + return new Promise((resolve, reject) => { | ||
14 | + let { Mode, OfferId, ZoneId, CurrencyType, Platform } = GAMEDATA.MidasPay; | ||
15 | + // 环境配置,0:米大师正式环境 1:米大师沙箱环境 | ||
16 | + let env = DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1; | ||
17 | + // 平台类型,android or ios,config.js有配置走配置,否则判断系统id | ||
18 | + let platform = DataService.I.Platform; | ||
19 | + let pms = { | ||
20 | + mode: Mode, | ||
21 | + env, | ||
22 | + platform, | ||
23 | + offerId: OfferId, | ||
24 | + currencyType: CurrencyType, | ||
25 | + buyQuantity: params.money / 10, | ||
26 | + zoneId: ZoneId | ||
27 | + }; | ||
28 | + let extend = ""; | ||
29 | + for (let key in opts) { | ||
30 | + extend += (`${key}=${opts[key]}&`) | ||
31 | + } | ||
32 | + extend = extend.substring(0, extend.length - 1); | ||
33 | + extend = encodeURIComponent(extend); | ||
34 | + | ||
35 | + let payParams = { | ||
36 | + ...this.buildParams(), | ||
37 | + extend, | ||
38 | + orderid: params.orderid, | ||
39 | + // payid: params.payid, | ||
40 | + goodid: params.goodid, | ||
41 | + money: params.money, | ||
42 | + platform | ||
43 | + }; | ||
44 | + SDKApi.zfbOrderReport(payParams).then(res => { | ||
45 | + console.log("res:" + JSON.stringify(res)); | ||
46 | + console.log("调用函数成功00"); | ||
47 | + if (!res.code) { | ||
48 | + let { customId, buyQuantity, extraInfo } = res.data; | ||
49 | + my.requestGamePayment({ | ||
50 | + customId, | ||
51 | + buyQuantity, | ||
52 | + extraInfo, | ||
53 | + success(res) { | ||
54 | + console.log("调用函数成功"); | ||
55 | + resolve({ code: 0, msg: '支付成功!' }) | ||
56 | + }, | ||
57 | + fail(err) { | ||
58 | + console.log("调用函数失败"); | ||
59 | + if (err && err.error) { | ||
60 | + if ("" + err.error == '15215') { | ||
61 | + my.alert({ | ||
62 | + title: '您好,基于国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》的规定,支付宝限制未成年人游戏充值哦', | ||
63 | + }); | ||
64 | + } else if ("" + err.error == '15204') { | ||
65 | + my.alert({ | ||
66 | + title: '非常抱歉,充值功能暂不可用,请稍后再试', | ||
67 | + }); | ||
68 | + } | ||
69 | + } | ||
70 | + resolve({ code: err.errCode, msg: '支付失败' }); | ||
71 | + }, | ||
72 | + complete(res) { | ||
73 | + try { | ||
74 | + console.log(JSON.stringify(res)); | ||
75 | + } catch (error) { | ||
76 | + | ||
77 | + } | ||
78 | + console.log(res) | ||
79 | + console.log("调用完成"); | ||
80 | + }, | ||
81 | + }) | ||
82 | + } else { | ||
83 | + console.log("调用函数成功222"); | ||
84 | + reject(res); | ||
85 | + } | ||
86 | + }) | ||
87 | + }); | ||
88 | + } | ||
89 | + | ||
90 | + private async handlePaySuccess(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts: any, resolve: any, reject: any, t = 1000) { | ||
91 | + let extend = ""; | ||
92 | + for (let key in opts) { | ||
93 | + extend += (`${key}=${opts[key]}&`) | ||
94 | + } | ||
95 | + extend = extend.substring(0, extend.length - 1); | ||
96 | + extend = encodeURIComponent(extend); | ||
97 | + let params = { | ||
98 | + ...this.buildParams(), | ||
99 | + extend, | ||
100 | + midasenv: DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1, | ||
101 | + orderid: data.orderid, | ||
102 | + payid: data.payid, goodid: data.goodid, | ||
103 | + type: 1, | ||
104 | + money: data.money, | ||
105 | + platform: data.platform | ||
106 | + }; | ||
107 | + var that = this; | ||
108 | + SDKApi.zfbOrderReport(params) | ||
109 | + .then(res => { | ||
110 | + if (!res.code) { | ||
111 | + resolve(res); | ||
112 | + } else { | ||
113 | + t = Math.min(t * 2, 60000) | ||
114 | + setTimeout(() => { | ||
115 | + that.handlePaySuccess(data, opts, resolve, reject, t) | ||
116 | + }, t); | ||
117 | + } | ||
118 | + }) | ||
119 | + } | ||
120 | + | ||
121 | + private handlePayError(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts, err: any, reject: any) { | ||
122 | + console.log("支付失败", JSON.stringify(err)); | ||
123 | + let type = 2; | ||
124 | + if (err.errCode + '' == '1') { | ||
125 | + type = 3; | ||
126 | + } | ||
127 | + let extend = ""; | ||
128 | + for (let key in opts) { | ||
129 | + extend += (`${key}=${opts[key]}&`) | ||
130 | + } | ||
131 | + extend = extend.substring(0, extend.length - 1); | ||
132 | + extend = encodeURIComponent(extend); | ||
133 | + let params = { | ||
134 | + ...this.buildParams(), | ||
135 | + extend, | ||
136 | + midasenv: DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1, | ||
137 | + orderid: data.orderid, | ||
138 | + payid: data.payid, goodid: data.goodid, | ||
139 | + type, | ||
140 | + money: data.money, | ||
141 | + platform: data.platform | ||
142 | + }; | ||
143 | + SDKApi.zfbOrderReport(params) | ||
144 | + reject(err); | ||
145 | + } | ||
146 | + | ||
147 | + /** | ||
148 | + * 构建支付公用参数 | ||
149 | + */ | ||
150 | + private buildParams() { | ||
151 | + let gameid = GAMEDATA.game_id; | ||
152 | + let channel = DataService.I.ChannelId; | ||
153 | + let openid = DataService.I.OpenId; | ||
154 | + let brand = WxSystem.I.brand; | ||
155 | + let model = WxSystem.I.model; | ||
156 | + let version = WxSystem.I.version; | ||
157 | + let system = WxSystem.I.system; | ||
158 | + let sdkversion = WxSystem.I.SDKVersion; | ||
159 | + let scene = DataService.I.Scene + ''; | ||
160 | + let uid = DataService.I.UserId; | ||
161 | + let token = DataService.I.Token; | ||
162 | + let env = DataService.I.EnvEnum === 1 ? 'pre' : 'prod'; | ||
163 | + return { | ||
164 | + gameid, | ||
165 | + openid, | ||
166 | + channel, | ||
167 | + brand, | ||
168 | + model, | ||
169 | + version, | ||
170 | + system, | ||
171 | + sdkversion, | ||
172 | + scene, | ||
173 | + uid, | ||
174 | + token, | ||
175 | + env | ||
176 | + }; | ||
177 | + } | ||
178 | + | ||
179 | + private static _instance: ZfbPay; | ||
180 | + static get I(): ZfbPay { | ||
181 | + return this._instance || (this._instance = new ZfbPay); | ||
182 | + } | ||
183 | +} | ||
0 | \ No newline at end of file | 184 | \ No newline at end of file |
wxsdk/base/SDKBaseData.ts
wxsdk/base/SDKConst.ts
1 | // 游戏配置数据 只需要改动这里的配置信息 | 1 | // 游戏配置数据 只需要改动这里的配置信息 |
2 | -// 游戏配置数据 只需要改动这里的配置信息 | ||
3 | - | ||
4 | export const GAMEDATA = { | 2 | export const GAMEDATA = { |
5 | - game_id: '10001',//游戏id | ||
6 | - channel_id: '10001',//渠道id 暂时和游戏id一致 | ||
7 | - version: '1.0.1', //版本号 中台控制正式还是测试服,尽量保持和小游戏版本一致 | ||
8 | - appkey: 'd959274a83ea3b95bd1d9b765683e777',//中台appkey | 3 | + game_id: '10110',//游戏id |
4 | + isDebug: false, | ||
5 | + channel_id: '10110',//渠道id 暂时和游戏id一致 | ||
6 | + version: '1.0.0', //版本号 中台控制正式还是测试服,尽量保持和小游戏版本一致 | ||
7 | + appkey: '48ef655c48f53f1e75f2108cf65d394e',//中台appkey | ||
9 | interstitialAdId: 'adunit-4bd19de3c351233e',//插屏ID | 8 | interstitialAdId: 'adunit-4bd19de3c351233e',//插屏ID |
10 | - bannerId: 'adunit-25341fff11681315',//banner | 9 | + bannerId: 'adunit-6145b17777e308a8',//banner |
11 | customId: 'adunit-193590de82ede6a4',//原生模板单个 | 10 | customId: 'adunit-193590de82ede6a4',//原生模板单个 |
12 | - videoAd: 'adunit-638f9158bce2c31e',//初始化视频广告id | 11 | + videoAd: 'adunit-59404ef14e6c32ed',//初始化视频广告id |
13 | shareMessageToFriend: { // 暂时只支持一个场景值 | 12 | shareMessageToFriend: { // 暂时只支持一个场景值 |
14 | scene: 0, //定向分享场景值1-50 配>0的会初始化 | 13 | scene: 0, //定向分享场景值1-50 配>0的会初始化 |
15 | sharekey: 'shareMessageToFriendScene',//定向分享对应后台的分享key | 14 | sharekey: 'shareMessageToFriendScene',//定向分享对应后台的分享key |
16 | share_id: 26,//定向分享对应后台的分享key | 15 | share_id: 26,//定向分享对应后台的分享key |
17 | }, | 16 | }, |
18 | default_share: { //默认分享数据在拉取不到中台分享数据的时候用 | 17 | default_share: { //默认分享数据在拉取不到中台分享数据的时候用 |
19 | - content: '全新版本的连连消,等你来玩!',//分享标题 *找运营提供 | ||
20 | - icon: 'xxxx',//分享图链接 *找运营提供 | 18 | + content: '惊喜世界合不停',//分享标题 *找运营提供 |
19 | + icon: 'https://cdn-wxsdk.miso-lab.com/7d/da1ed3fb6073ddd43f156f98c625e3.jpg',//分享图链接 *找运营提供 | ||
21 | id: '9999',//默认id 写死9999 | 20 | id: '9999',//默认id 写死9999 |
22 | key: 'default',//默认分享key 写死default | 21 | key: 'default',//默认分享key 写死default |
23 | title: '默认',//无需修改 | 22 | title: '默认',//无需修改 |
24 | typ: 1,//分享类型 写死1 | 23 | typ: 1,//分享类型 写死1 |
25 | videoid: '',//默认的视频广告id 填空就行 | 24 | videoid: '',//默认的视频广告id 填空就行 |
26 | }, | 25 | }, |
27 | - MidasPay: { // 米大师虚拟支付配置 | ||
28 | - OfferId: "xxxx", // 在米大师申请的应用id | 26 | + MidasPay: { // 米大师虚拟支付配置 *找运营提供 |
27 | + OfferId: "1450051274", // 在米大师申请的应用id *找运营提供 | ||
29 | ZoneId: "1", // 分区ID,默认:1 | 28 | ZoneId: "1", // 分区ID,默认:1 |
30 | Mode: "game", // 默认:game | 29 | Mode: "game", // 默认:game |
31 | CurrencyType: "CNY", // 默认:CNY | 30 | CurrencyType: "CNY", // 默认:CNY |
@@ -33,9 +32,8 @@ export const GAMEDATA = { | @@ -33,9 +32,8 @@ export const GAMEDATA = { | ||
33 | } | 32 | } |
34 | } | 33 | } |
35 | 34 | ||
36 | - | ||
37 | // sdk版本 | 35 | // sdk版本 |
38 | -export const SDKVersion = 'v1.0.16'; | 36 | +export const SDKVersion = 'v1.0.15'; |
39 | // 是否打印 | 37 | // 是否打印 |
40 | export const __LOG__ = false; | 38 | export const __LOG__ = false; |
41 | // 是否mock | 39 | // 是否mock |
@@ -43,8 +41,6 @@ export var sdkEnv = { | @@ -43,8 +41,6 @@ export var sdkEnv = { | ||
43 | isDebug: false | 41 | isDebug: false |
44 | }; | 42 | }; |
45 | 43 | ||
46 | - | ||
47 | - | ||
48 | //游戏基础信息 | 44 | //游戏基础信息 |
49 | export const VersionHost = 'https://wxsdk-ver.d3games.com/version'; | 45 | export const VersionHost = 'https://wxsdk-ver.d3games.com/version'; |
50 | 46 | ||
@@ -106,7 +102,7 @@ export const HostKeys = { | @@ -106,7 +102,7 @@ export const HostKeys = { | ||
106 | rankAdd: 'api/rank/add', //排行榜添加分数 517废弃 | 102 | rankAdd: 'api/rank/add', //排行榜添加分数 517废弃 |
107 | rankList: 'api/rank/list', //世界排行榜 517废弃 | 103 | rankList: 'api/rank/list', //世界排行榜 517废弃 |
108 | totalrankAdd: 'game/totalrank/add', //排行榜添加分数 | 104 | totalrankAdd: 'game/totalrank/add', //排行榜添加分数 |
109 | - totalrankList: 'game/totalrank/list', //世界排行榜 | 105 | + totalrankList: 'game/totalrank/list', //世界排行榜 |
110 | adList: 'api/adplan/list', //广告计划列表 | 106 | adList: 'api/adplan/list', //广告计划列表 |
111 | behavior: 'api/douyin/behavior', //抖音投放关键行为 | 107 | behavior: 'api/douyin/behavior', //抖音投放关键行为 |
112 | attribute: 'api/member/attribute/set', //修改用户属性 | 108 | attribute: 'api/member/attribute/set', //修改用户属性 |
@@ -120,8 +116,13 @@ export const HostKeys = { | @@ -120,8 +116,13 @@ export const HostKeys = { | ||
120 | preorder: 'api/order/v2/preorder', //获取支付方式 | 116 | preorder: 'api/order/v2/preorder', //获取支付方式 |
121 | bytedanceOrderReport: 'api/order/v2/bytedance', //字节订单信息上报 | 117 | bytedanceOrderReport: 'api/order/v2/bytedance', //字节订单信息上报 |
122 | qqOrderReport: 'api/order/v2/qq', //qq订单信息上报 | 118 | qqOrderReport: 'api/order/v2/qq', //qq订单信息上报 |
119 | + zfbOrderReport:'api/order/v2/zfb/add', //支付宝小游戏订单上报 | ||
123 | // | 120 | // |
124 | goodslist: 'api/v2/goodslist', //商品列表 | 121 | goodslist: 'api/v2/goodslist', //商品列表 |
122 | + | ||
123 | + | ||
124 | + //支付宝 | ||
125 | + AlipayIncrementGameaction: 'api/ali/action/submit' ,//玩一玩:增量游戏行为完成上报 | ||
125 | }; | 126 | }; |
126 | 127 | ||
127 | // 本地存储keys | 128 | // 本地存储keys |
wxsdk/base/wx.d.ts
wxsdk/http/SDKApi.ts
@@ -84,6 +84,16 @@ export class SDKApi { | @@ -84,6 +84,16 @@ export class SDKApi { | ||
84 | public static qqOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.qqOrderReport, ...args); | 84 | public static qqOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.qqOrderReport, ...args); |
85 | public static orderQuery = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.orderQuery, ...args); | 85 | public static orderQuery = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.orderQuery, ...args); |
86 | public static preorder = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.preorder, ...args); | 86 | public static preorder = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.preorder, ...args); |
87 | + public static zfbOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.zfbOrderReport, ...args); | ||
87 | 88 | ||
88 | public static goodslist = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.goodslist, ...args); | 89 | public static goodslist = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.goodslist, ...args); |
90 | + | ||
91 | + | ||
92 | + //支付宝 | ||
93 | + /** | ||
94 | + * 玩一玩增量行为 | ||
95 | + * @param args | ||
96 | + * @returns | ||
97 | + */ | ||
98 | + public static incrementGameaction = (...args) => SDKHttp.httpPost(DataService.I.GameApi, HostKeys.AlipayIncrementGameaction, ...args); | ||
89 | } | 99 | } |
wxsdk/http/SDKHttp.ts
@@ -43,9 +43,9 @@ export default class SDKHttp { | @@ -43,9 +43,9 @@ export default class SDKHttp { | ||
43 | responseText = JSON.parse(responseText); | 43 | responseText = JSON.parse(responseText); |
44 | // cc.log("responseText22", responseText) | 44 | // cc.log("responseText22", responseText) |
45 | if (url.indexOf('.json') > -1) { | 45 | if (url.indexOf('.json') > -1) { |
46 | - resolve({ code: 0, data: responseText, msg: responseText.msg , servertime: responseText.servertime}); | 46 | + resolve({ code: 0, data: responseText, msg: responseText.msg, servertime: responseText.servertime }); |
47 | } else { | 47 | } else { |
48 | - resolve({ code: +responseText.code, data: responseText.data, msg: responseText.msg , servertime: responseText.servertime}); | 48 | + resolve({ code: +responseText.code, data: responseText.data, msg: responseText.msg, servertime: responseText.servertime }); |
49 | } | 49 | } |
50 | return | 50 | return |
51 | } catch (ex) { | 51 | } catch (ex) { |
@@ -55,37 +55,30 @@ export default class SDKHttp { | @@ -55,37 +55,30 @@ export default class SDKHttp { | ||
55 | } | 55 | } |
56 | } else { | 56 | } else { |
57 | console.error(xhr.status, '网络请求失败!'); | 57 | console.error(xhr.status, '网络请求失败!'); |
58 | - resolve({ code: -1 }); | 58 | + resolve({ code: -2 }); |
59 | } | 59 | } |
60 | } | 60 | } |
61 | }; | 61 | }; |
62 | 62 | ||
63 | xhr.ontimeout = function (info): void { | 63 | xhr.ontimeout = function (info): void { |
64 | // cc.error("info1", info) | 64 | // cc.error("info1", info) |
65 | - resolve({ msg: `请求超时!`, code: -1 }); | 65 | + resolve({ msg: `请求超时!`, code: -3 }); |
66 | } | 66 | } |
67 | xhr.onerror = function (info): void { | 67 | xhr.onerror = function (info): void { |
68 | // cc.error("info2", info) | 68 | // cc.error("info2", info) |
69 | - resolve({ msg: `请求失败!`, code: -1 }); | 69 | + resolve({ msg: `请求失败!`, code: -4 }); |
70 | } | 70 | } |
71 | xhr.onabort = function (info): void { | 71 | xhr.onabort = function (info): void { |
72 | // cc.error("info3", info) | 72 | // cc.error("info3", info) |
73 | - resolve({ msg: `请求失败!`, code: -1 }); | 73 | + resolve({ msg: `请求失败!`, code: -5 }); |
74 | } | 74 | } |
75 | 75 | ||
76 | xhr.open(method, url, true); | 76 | xhr.open(method, url, true); |
77 | 77 | ||
78 | if (method == "POST") { | 78 | if (method == "POST") { |
79 | xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8")//application/x-www-form-urlencoded | 79 | xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8")//application/x-www-form-urlencoded |
80 | - // if (cc.sys.os === 'Android') { | ||
81 | - // cc.error("http__uid", AppSdkData.I.uid); | ||
82 | - // xhr.setRequestHeader('Uuid', `${AppSdkData.I.uid}`); | ||
83 | - // } else { | ||
84 | - // xhr.setRequestHeader('Uuid', `909`); | ||
85 | - // } | ||
86 | - | ||
87 | } | 80 | } |
88 | - xhr.timeout = 3000; | 81 | + xhr.timeout = 10000; |
89 | xhr.send(data); | 82 | xhr.send(data); |
90 | }); | 83 | }); |
91 | } | 84 | } |
wxsdk/platform/wx/WxStorage.ts.meta
1 | { | 1 | { |
2 | - "ver": "1.0.8", | 2 | + "ver": "4.0.23", |
3 | + "importer": "typescript", | ||
4 | + "imported": true, | ||
3 | "uuid": "6013014c-7aa3-4eb4-b818-583d937a9f05", | 5 | "uuid": "6013014c-7aa3-4eb4-b818-583d937a9f05", |
4 | - "isPlugin": false, | ||
5 | - "loadPluginInWeb": true, | ||
6 | - "loadPluginInNative": true, | ||
7 | - "loadPluginInEditor": false, | ||
8 | - "subMetas": {} | ||
9 | -} | ||
10 | \ No newline at end of file | 6 | \ No newline at end of file |
7 | + "files": [], | ||
8 | + "subMetas": {}, | ||
9 | + "userData": {} | ||
10 | +} |
wxsdk/service/AdService.ts
@@ -5,6 +5,7 @@ import WxInterstitial from "../wx/WxInterstitial"; | @@ -5,6 +5,7 @@ import WxInterstitial from "../wx/WxInterstitial"; | ||
5 | import { GAMEDATA } from "../base/SDKConst"; | 5 | import { GAMEDATA } from "../base/SDKConst"; |
6 | import LogService from "./LogService"; | 6 | import LogService from "./LogService"; |
7 | import DouyinInterstitial from "../douyin/DouyinInterstitial"; | 7 | import DouyinInterstitial from "../douyin/DouyinInterstitial"; |
8 | +import { sys } from "cc"; | ||
8 | 9 | ||
9 | 10 | ||
10 | 11 | ||
@@ -16,7 +17,7 @@ export default class AdService { | @@ -16,7 +17,7 @@ export default class AdService { | ||
16 | * @param adUnitId | 17 | * @param adUnitId |
17 | * @param opts | 18 | * @param opts |
18 | */ | 19 | */ |
19 | - createBanner(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) { | 20 | + createBanner(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean,isCreate?:boolean }) { |
20 | return WxBanner.I.create(adUnitId, opts); | 21 | return WxBanner.I.create(adUnitId, opts); |
21 | } | 22 | } |
22 | /** | 23 | /** |
@@ -44,7 +45,7 @@ export default class AdService { | @@ -44,7 +45,7 @@ export default class AdService { | ||
44 | * @param adUnitId | 45 | * @param adUnitId |
45 | */ | 46 | */ |
46 | createInterstitialAd(adUnitId: string) { | 47 | createInterstitialAd(adUnitId: string) { |
47 | - if (cc.sys.platform === cc.sys.BYTEDANCE_GAME) { | 48 | + if (sys.platform === sys.Platform.BYTEDANCE_MINI_GAME) { |
48 | return DouyinInterstitial.showInterstitialAd(adUnitId); | 49 | return DouyinInterstitial.showInterstitialAd(adUnitId); |
49 | } else { | 50 | } else { |
50 | return WxInterstitial.showInterstitialAd(adUnitId) | 51 | return WxInterstitial.showInterstitialAd(adUnitId) |
wxsdk/service/DataService.ts
@@ -17,7 +17,7 @@ export default class DataService { | @@ -17,7 +17,7 @@ export default class DataService { | ||
17 | // 0点数据变动 | 17 | // 0点数据变动 |
18 | let expiration = +((this.nextDay() - Date.now()) / 1000).toFixed(0); | 18 | let expiration = +((this.nextDay() - Date.now()) / 1000).toFixed(0); |
19 | setTimeout(this.resetData.bind(this), expiration * 1000); | 19 | setTimeout(this.resetData.bind(this), expiration * 1000); |
20 | - if (typeof wx != 'undefined') { | 20 | + if (typeof wx != 'undefined' || typeof my != 'undefined') { |
21 | wx.onShow(this.onShow.bind(this)); | 21 | wx.onShow(this.onShow.bind(this)); |
22 | wx.onHide(this.onHide.bind(this)); | 22 | wx.onHide(this.onHide.bind(this)); |
23 | } | 23 | } |
wxsdk/service/GameService.ts
1 | -import DataService from "./DataService"; | ||
2 | -import { SDKApi } from "../http/SDKApi"; | 1 | +import { sys } from "cc"; |
3 | import { GAMEDATA, SDKVersion, __LOG__ } from "../base/SDKConst"; | 2 | import { GAMEDATA, SDKVersion, __LOG__ } from "../base/SDKConst"; |
4 | -import WxLogin from "../wx/WxLogin"; | 3 | +import DouyinPay from "../douyin/DouyinPay"; |
4 | +import { SDKApi } from "../http/SDKApi"; | ||
5 | +import QQPay from "../qq/QQPay"; | ||
5 | import WxApi from "../wx/WxApi"; | 6 | import WxApi from "../wx/WxApi"; |
7 | +import WxLogin from "../wx/WxLogin"; | ||
6 | import WxPay from "../wx/WxPay"; | 8 | import WxPay from "../wx/WxPay"; |
7 | import WxSystem from "../wx/WxSystem"; | 9 | import WxSystem from "../wx/WxSystem"; |
8 | -import DouyinPay from "../douyin/DouyinPay"; | ||
9 | -import QQPay from "../qq/QQPay"; | 10 | +import DataService from "./DataService"; |
11 | +import ZfbPay from "../alipay/zfbPay"; | ||
10 | 12 | ||
11 | 13 | ||
12 | export default class GameService { | 14 | export default class GameService { |
@@ -69,31 +71,22 @@ export default class GameService { | @@ -69,31 +71,22 @@ export default class GameService { | ||
69 | } | 71 | } |
70 | 72 | ||
71 | 73 | ||
72 | - subScribe(tmplIds: Array<string>, ids: Array<string>): Promise<any> { | 74 | + subScribe(tmplIds: Array<string>, success: Function, fail: Function): Promise<any> { |
73 | return new Promise((resolve, reject) => { | 75 | return new Promise((resolve, reject) => { |
74 | WxApi.I.subscribeMessage(tmplIds) | 76 | WxApi.I.subscribeMessage(tmplIds) |
75 | .then((ret: any) => { | 77 | .then((ret: any) => { |
76 | ret = ret || {}; | 78 | ret = ret || {}; |
77 | let acceptKeys = tmplIds.filter((idKey: string) => ret[idKey] && ret[idKey] === 'accept'); | 79 | let acceptKeys = tmplIds.filter((idKey: string) => ret[idKey] && ret[idKey] === 'accept'); |
78 | if (!acceptKeys.length) { | 80 | if (!acceptKeys.length) { |
79 | - reject({ errCode: 0, errMsg: '点击取消订阅' }); | 81 | + fail() |
82 | + resolve({ errCode: 0, errMsg: '点击取消订阅' }); | ||
80 | } else { | 83 | } else { |
81 | - let uid = +DataService.I.UserId; | ||
82 | - let token = DataService.I.Token + ''; | ||
83 | - let openid = DataService.I.OpenId + ''; | ||
84 | - let id = ids//JSON.stringify() | ||
85 | - SDKApi.subscribe({ | ||
86 | - uid, | ||
87 | - token, | ||
88 | - openid, | ||
89 | - status: 1, | ||
90 | - id, | ||
91 | - }) | ||
92 | - resolve({ code: 0, msg: '订阅成功!' }) | 84 | + success(acceptKeys) |
85 | + console.log('订阅成功', ret, acceptKeys) | ||
86 | + resolve(ret); | ||
93 | } | 87 | } |
94 | - | ||
95 | }) | 88 | }) |
96 | - .catch(err => reject(err)); | 89 | + .catch(err => resolve(err)); |
97 | }); | 90 | }); |
98 | } | 91 | } |
99 | 92 | ||
@@ -104,10 +97,12 @@ export default class GameService { | @@ -104,10 +97,12 @@ export default class GameService { | ||
104 | * @returns | 97 | * @returns |
105 | */ | 98 | */ |
106 | pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}) { | 99 | pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}) { |
107 | - if (cc.sys.platform === cc.sys.BYTEDANCE_GAME) { | 100 | + if (sys.platform === sys.Platform.BYTEDANCE_MINI_GAME) { |
108 | return DouyinPay.I.pay(params, opts); | 101 | return DouyinPay.I.pay(params, opts); |
109 | } else { | 102 | } else { |
110 | - if (typeof qq != 'undefined') { | 103 | + if (typeof my != 'undefined') { |
104 | + return ZfbPay.I.pay(params, opts); | ||
105 | + } else if (typeof qq != 'undefined') { | ||
111 | console.log("QQ支付") | 106 | console.log("QQ支付") |
112 | return QQPay.I.pay(params, opts); | 107 | return QQPay.I.pay(params, opts); |
113 | } else { | 108 | } else { |
@@ -161,19 +156,18 @@ export default class GameService { | @@ -161,19 +156,18 @@ export default class GameService { | ||
161 | /** | 156 | /** |
162 | * 更换昵称和头像 | 157 | * 更换昵称和头像 |
163 | */ | 158 | */ |
164 | - updateNickname(nickname: string, headurl: string) { | 159 | + updateNickname(nickname: string, headurl: string) { |
165 | let gameid = GAMEDATA.game_id; | 160 | let gameid = GAMEDATA.game_id; |
166 | let uid = DataService.I.UserId; | 161 | let uid = DataService.I.UserId; |
167 | let token = DataService.I.Token; | 162 | let token = DataService.I.Token; |
168 | let pkv = SDKVersion; | 163 | let pkv = SDKVersion; |
169 | return SDKApi.updateNickname({ | 164 | return SDKApi.updateNickname({ |
170 | - gameid,uid,token,pkv, | 165 | + gameid, uid, token, pkv, |
171 | nickname, headurl | 166 | nickname, headurl |
172 | }) | 167 | }) |
173 | } | 168 | } |
174 | 169 | ||
175 | 170 | ||
176 | - | ||
177 | /** | 171 | /** |
178 | * 构建登录/弱登录公用参数 | 172 | * 构建登录/弱登录公用参数 |
179 | */ | 173 | */ |
wxsdk/service/LogService.ts
@@ -458,25 +458,25 @@ export default class LogService { | @@ -458,25 +458,25 @@ export default class LogService { | ||
458 | /** | 458 | /** |
459 | * 客户端日志 | 459 | * 客户端日志 |
460 | */ | 460 | */ |
461 | - clientLog(content, level = LogLevel.debug) { | 461 | + clientLog(content, level = SDKLogLevel.debug) { |
462 | SDKApi.client_log({ | 462 | SDKApi.client_log({ |
463 | APIVersion: '0.6.0', | 463 | APIVersion: '0.6.0', |
464 | gameid: GAMEDATA.game_id, | 464 | gameid: GAMEDATA.game_id, |
465 | cacheUserId: StorageUtils.I.get("userId") || "0", | 465 | cacheUserId: StorageUtils.I.get("userId") || "0", |
466 | - level: LogLevel[level], | 466 | + level: SDKLogLevel[level], |
467 | content | 467 | content |
468 | }) | 468 | }) |
469 | switch (level) { | 469 | switch (level) { |
470 | - case LogLevel.error: | 470 | + case SDKLogLevel.error: |
471 | console.error(content); | 471 | console.error(content); |
472 | break; | 472 | break; |
473 | - case LogLevel.debug: | 473 | + case SDKLogLevel.debug: |
474 | console.log(content); | 474 | console.log(content); |
475 | break; | 475 | break; |
476 | - case LogLevel.info: | 476 | + case SDKLogLevel.info: |
477 | console.info(content); | 477 | console.info(content); |
478 | break; | 478 | break; |
479 | - case LogLevel.warning: | 479 | + case SDKLogLevel.warning: |
480 | console.warn(content); | 480 | console.warn(content); |
481 | break; | 481 | break; |
482 | default: | 482 | default: |
@@ -586,7 +586,7 @@ export default class LogService { | @@ -586,7 +586,7 @@ export default class LogService { | ||
586 | error:更严重的问题,软件没能执行一些功能 | 586 | error:更严重的问题,软件没能执行一些功能 |
587 | critical:一个严重的错误,这表明程序本身可能无法继续运行 | 587 | critical:一个严重的错误,这表明程序本身可能无法继续运行 |
588 | */ | 588 | */ |
589 | -export enum LogLevel { | 589 | +export enum SDKLogLevel { |
590 | debug, | 590 | debug, |
591 | info, | 591 | info, |
592 | warning, | 592 | warning, |
wxsdk/service/ShareVideoService.ts
1 | -import { GAMEDATA } from "../base/SDKConst"; | ||
2 | -import { ShareVideoType } from "../base/SDKEnum"; | ||
3 | -import { SDKApi } from "../http/SDKApi"; | ||
4 | -import SDKShare from "../share/SDKShare"; | ||
5 | -import SDKVideo from "../share/SDKVideo"; | 1 | +import { ShareVideoType, ShareVideoFrom } from "../base/SDKEnum"; |
6 | import RandomUtils from "../utils/RandomUtils"; | 2 | import RandomUtils from "../utils/RandomUtils"; |
7 | -import DataService from "./DataService"; | ||
8 | import ShareData from "./entity/ShareData"; | 3 | import ShareData from "./entity/ShareData"; |
4 | +import SDKShare from "../share/SDKShare"; | ||
5 | +import { __LOG__, GAMEDATA } from "../base/SDKConst"; | ||
6 | +import { SDKApi } from "../http/SDKApi"; | ||
7 | +import DataService from "./DataService"; | ||
8 | +import SDKVideo from "../share/SDKVideo"; | ||
9 | +import { sys } from "cc"; | ||
9 | 10 | ||
10 | export default class ShareVideoService { | 11 | export default class ShareVideoService { |
11 | private forwardKey?: string; | 12 | private forwardKey?: string; |
@@ -27,19 +28,28 @@ export default class ShareVideoService { | @@ -27,19 +28,28 @@ export default class ShareVideoService { | ||
27 | this.forward(this.forwardKey); | 28 | this.forward(this.forwardKey); |
28 | } | 29 | } |
29 | 30 | ||
30 | - async init() { | 31 | + private cnt: number = 1 |
32 | + async initList() { //初始化List | ||
31 | let data = await SDKApi.ShareList(); | 33 | let data = await SDKApi.ShareList(); |
34 | + if (data.code) { | ||
35 | + console.log('拉取ShareList失败!') | ||
36 | + setTimeout(this.initList.bind(this), 200 * this.cnt) | ||
37 | + this.cnt++; | ||
38 | + return | ||
39 | + } | ||
40 | + console.log('拉取ShareList成功!') | ||
41 | + console.log('拉取ShareList成功!',JSON.stringify(data)); | ||
32 | this.setShareVideoData(data); | 42 | this.setShareVideoData(data); |
33 | - // console.log(JSON.stringify(data)) | 43 | + if (this.forwardKey) this.forward(this.forwardKey); |
44 | + } | ||
45 | + async init() { | ||
46 | + this.initList(); | ||
34 | SDKShare.I.updateShareMenu(true);//打开群分享 | 47 | SDKShare.I.updateShareMenu(true);//打开群分享 |
35 | - | ||
36 | - if (cc.sys.platform === cc.sys.WECHAT_GAME) { | 48 | + if (sys.platform === sys.Platform.WECHAT_GAME) { |
37 | if (GAMEDATA.shareMessageToFriend.scene > 0) { | 49 | if (GAMEDATA.shareMessageToFriend.scene > 0) { |
38 | wx.setMessageToFriendQuery({ shareMessageToFriendScene: GAMEDATA.shareMessageToFriend.scene }) | 50 | wx.setMessageToFriendQuery({ shareMessageToFriendScene: GAMEDATA.shareMessageToFriend.scene }) |
39 | } | 51 | } |
40 | } | 52 | } |
41 | - | ||
42 | - if (this.forwardKey) this.forward(this.forwardKey); | ||
43 | } | 53 | } |
44 | 54 | ||
45 | preload = true; | 55 | preload = true; |
@@ -62,26 +72,22 @@ export default class ShareVideoService { | @@ -62,26 +72,22 @@ export default class ShareVideoService { | ||
62 | share_id: id, | 72 | share_id: id, |
63 | query: this.createQuery({ share_key: key, share_id: id, query: opts.query }), | 73 | query: this.createQuery({ share_key: key, share_id: id, query: opts.query }), |
64 | }; | 74 | }; |
65 | - let multiton = false; | ||
66 | if (opts) { | 75 | if (opts) { |
67 | if (opts.title) _params.title = opts.title; | 76 | if (opts.title) _params.title = opts.title; |
68 | if (opts.img_url) _params.imageUrl = opts.img_url; | 77 | if (opts.img_url) _params.imageUrl = opts.img_url; |
69 | if (opts.share_type) typ = opts.share_type; | 78 | if (opts.share_type) typ = opts.share_type; |
70 | - if (opts.hasOwnProperty('multiton')) { | ||
71 | - multiton = opts.multiton; | ||
72 | - }; | ||
73 | } | 79 | } |
74 | // console.log("share_query",JSON.stringify(_params), _params.query); | 80 | // console.log("share_query",JSON.stringify(_params), _params.query); |
75 | switch (+typ) { | 81 | switch (+typ) { |
76 | case ShareVideoType.Video: | 82 | case ShareVideoType.Video: |
77 | - SDKVideo.I.show(shareKey, videoid, multiton).then(success => { | 83 | + SDKVideo.I.show(shareKey, videoid).then(success => { |
78 | resolve(success) | 84 | resolve(success) |
79 | }).catch(err => { | 85 | }).catch(err => { |
80 | reject(err); | 86 | reject(err); |
81 | }) | 87 | }) |
82 | break; | 88 | break; |
83 | case ShareVideoType.VideoToShare: | 89 | case ShareVideoType.VideoToShare: |
84 | - SDKVideo.I.show(shareKey, videoid, multiton).then(success => { | 90 | + SDKVideo.I.show(shareKey, videoid).then(success => { |
85 | resolve(success) | 91 | resolve(success) |
86 | }).catch(err => { | 92 | }).catch(err => { |
87 | if (err.code !== 1000 && err.code !== 1003) {//1000关闭1003正在播放 | 93 | if (err.code !== 1000 && err.code !== 1003) {//1000关闭1003正在播放 |
@@ -107,6 +113,46 @@ export default class ShareVideoService { | @@ -107,6 +113,46 @@ export default class ShareVideoService { | ||
107 | resolve({}) | 113 | resolve({}) |
108 | break; | 114 | break; |
109 | } | 115 | } |
116 | + // share_desc = opts.shareTitle || share_desc; | ||
117 | + // share_desc = StringUtils.stringFormat(share_desc, opts.formater); | ||
118 | + // let shareMsg = { | ||
119 | + // title: share_desc, | ||
120 | + // imageUrl: opts.shareImg || share_icon, | ||
121 | + // query | ||
122 | + // }; | ||
123 | + // // __LOG__ && console.error(`SDK ShareVideoService ${opts.shareForward ? 'forward 右上角分享:' : 'share 主动拉起分享:'}`); | ||
124 | + // // __LOG__ && console.error(`SDK ShareVideoService 分享参数对象shareMsg: ${JSON.stringify(shareMsg)}`); | ||
125 | + // // __LOG__ && console.error('SDK ShareVideoService 分享扩展参数', opts); | ||
126 | + // DebugUtils.I.dynamic(`====> PCSDK ShareVideoService share 分享query: ${query}`); | ||
127 | + // let success = (ret: any) => { | ||
128 | + // // __LOG__ && console.error(`SDK ShareVideoService ${opts.shareForward ? 'forward 右上角分享:' : 'share 主动拉起分享:'} 成功回调: ${share_id}`); | ||
129 | + // if (!opts.__GROUP) { | ||
130 | + // // 不是群分享的情况下,进行统计,群分享需要验证 | ||
131 | + // TempService.I.add(TempDataKeys.ShareSuccess, 1); | ||
132 | + // share_id && LogService.I.tacticShare(share_id, share_key, TacticType.ShareSuccess); | ||
133 | + // } | ||
134 | + // resolve({ ...ret, share_id, share_key: shareKey }); | ||
135 | + // }; | ||
136 | + // let fail = (err: any) => { | ||
137 | + // // __LOG__ && console.error(`SDK ShareVideoService ${opts.shareForward ? 'forward 右上角分享:' : 'share 主动拉起分享:'} 失败回调: ${share_id}`); | ||
138 | + // if (!opts.__GROUP) { | ||
139 | + // share_id && LogService.I.tacticShare(share_id, share_key, TacticType.ShareInterrupt); | ||
140 | + // } | ||
141 | + // reject({ ...err, share_id, share_key: shareKey }); | ||
142 | + // }; | ||
143 | + // if (opts.shareForward) | ||
144 | + // // 右上角转发 | ||
145 | + // Platform.I.forward(shareMsg, { | ||
146 | + // ...opts, | ||
147 | + // success, | ||
148 | + // fail, | ||
149 | + // context: this | ||
150 | + // }); | ||
151 | + // else | ||
152 | + // // 普通分享 | ||
153 | + // Platform.I.share(shareMsg, opts) | ||
154 | + // .then((ret: any) => success(ret)) | ||
155 | + // .catch((err: any) => fail(err)); | ||
110 | }); | 156 | }); |
111 | } | 157 | } |
112 | 158 | ||
@@ -123,6 +169,129 @@ export default class ShareVideoService { | @@ -123,6 +169,129 @@ export default class ShareVideoService { | ||
123 | // console.log("forward", JSON.stringify(params)); | 169 | // console.log("forward", JSON.stringify(params)); |
124 | SDKShare.I.forward(params); | 170 | SDKShare.I.forward(params); |
125 | } | 171 | } |
172 | + | ||
173 | + /** | ||
174 | + * 分享自动入口 | ||
175 | + * @param shareKey | ||
176 | + * @param opts { | ||
177 | + * type: 当shareType为VideoAndShare时候,该参数有用,0:分享 1:视频 | ||
178 | + * context: 函数执行上下文 | ||
179 | + * fail: Function 失败函数 | ||
180 | + * success: Function 成功函数 | ||
181 | + * } | ||
182 | + */ | ||
183 | + // dispatch(shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) { | ||
184 | + // let shareData = this.getShareVideoData(shareKey); | ||
185 | + // let { share_open, share_wxad_id } = shareData; | ||
186 | + // opts = { | ||
187 | + // ...opts, | ||
188 | + // share_wxad_id, | ||
189 | + // __ShareData__: shareData | ||
190 | + // }; | ||
191 | + // this.dispatchType(+share_open, shareKey, opts, queryObj); | ||
192 | + // } | ||
193 | + | ||
194 | + shareDispatch(shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) { | ||
195 | + // this.dispatch(shareKey, opts, queryObj); | ||
196 | + } | ||
197 | + | ||
198 | + /** | ||
199 | + * 根据分享类型进行处理 | ||
200 | + * @param shareType | ||
201 | + * @param shareKey | ||
202 | + * @param opts { | ||
203 | + * type: 当shareType为VideoAndShare时候,该参数有用,0:分享 1:视频 | ||
204 | + * context: 函数执行上下文 | ||
205 | + * fail: Function 失败函数 | ||
206 | + * success: Function 成功函数 | ||
207 | + * } | ||
208 | + */ | ||
209 | + dispatchType(shareType: ShareVideoType, shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) { | ||
210 | + // if (Platform.IsWx && OnlineService.I.getParamsInt(OnlineKeys.ShareUnlock, 1) !== 1) | ||
211 | + // shareType = ShareVideoType.None; | ||
212 | + | ||
213 | + // let share_wxad_id = opts.share_wxad_id || (opts.__ShareData__ || this.getShareVideoData(shareKey) || {}).share_wxad_id; | ||
214 | + // switch (shareType) { | ||
215 | + // case ShareVideoType.None: // 无分享 | ||
216 | + // this.handleSuccess(opts, shareType, ShareVideoFrom.None, null); | ||
217 | + // break; | ||
218 | + | ||
219 | + // case ShareVideoType.Share: // 同步分享 | ||
220 | + // // 同步分享点:是否开启后台配置中如果存在视频ID,则自动切换为视频点 | ||
221 | + // if (opts.shareAutoVideo && share_wxad_id) { | ||
222 | + // this.dispatchType(ShareVideoType.VideoToShare, shareKey, opts, queryObj); | ||
223 | + // break; | ||
224 | + // } | ||
225 | + // this.group(shareKey, queryObj, opts) | ||
226 | + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret)) | ||
227 | + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err)); | ||
228 | + // break; | ||
229 | + | ||
230 | + // case ShareVideoType.ShareAysnc: // 异步分享 | ||
231 | + // break; | ||
232 | + | ||
233 | + // case ShareVideoType.ShareIntegral: // 分享积分 | ||
234 | + // // 是否开启分享积分,且配置为分享积分 | ||
235 | + // if (IntegralService.I.IsOpen) { | ||
236 | + // let data = IntegralService.I.convert(); | ||
237 | + // if (data) { | ||
238 | + // opts.shareIntegralData = data; | ||
239 | + // this.dispatchType(data.shareType, shareKey, opts, queryObj); | ||
240 | + // } else { | ||
241 | + // // 超过了现在,直接执行失败:今日已达分享上限次数,请明日再来 | ||
242 | + // this.handleFail(opts, shareType, ShareVideoFrom.Share, { ...ShareVideoError.ShareOverLimit }); | ||
243 | + // } | ||
244 | + // } else { | ||
245 | + // // 如果配置了分享积分,但是未开启开关,则推:无视频则分享 | ||
246 | + // this.dispatchType(ShareVideoType.VideoToShare, shareKey, opts, queryObj); | ||
247 | + // } | ||
248 | + // break; | ||
249 | + | ||
250 | + // case ShareVideoType.Video: // 看视频 | ||
251 | + // Platform.I.video(shareKey, share_wxad_id) | ||
252 | + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Video, ret)) | ||
253 | + // .catch((err: any) => this.handleFail(opts, shareType, ShareVideoFrom.Video, err)); | ||
254 | + // break; | ||
255 | + | ||
256 | + // case ShareVideoType.VideoToShare: // 无视频则分享 | ||
257 | + // if (!share_wxad_id) { | ||
258 | + // this.group(shareKey, queryObj, opts) | ||
259 | + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret)) | ||
260 | + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err)); | ||
261 | + // return; | ||
262 | + // } | ||
263 | + // Platform.I.video(shareKey, share_wxad_id) | ||
264 | + // .then((ret) => this.handleSuccess(opts, shareType, ShareVideoFrom.Video, ret)) | ||
265 | + // .catch((err: any) => { | ||
266 | + // // 拉取视频失败/视频UID不存在/微信版本过低,暂不支持看视频,自动切换到分享 | ||
267 | + // let { VideoFail, VideoInvalid, VideoNotOpen } = ShareVideoError; | ||
268 | + // if (err && (err.code === VideoFail.code || err.code === VideoInvalid.code || err.code === VideoNotOpen.code)) | ||
269 | + // this.group(shareKey, queryObj, opts) | ||
270 | + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret)) | ||
271 | + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err)); | ||
272 | + // else | ||
273 | + // this.handleFail(opts, shareType, ShareVideoFrom.Video, err); | ||
274 | + // }); | ||
275 | + // break; | ||
276 | + | ||
277 | + // case ShareVideoType.VideoAndShare: // 看视频 | ||
278 | + // if (share_wxad_id && opts.type === 1) { | ||
279 | + // Platform.I.video(shareKey, share_wxad_id) | ||
280 | + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Video, ret)) | ||
281 | + // .catch((err: any) => this.handleFail(opts, shareType, ShareVideoFrom.Video, err)); | ||
282 | + // } else { | ||
283 | + // this.group(shareKey, queryObj, opts) | ||
284 | + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret)) | ||
285 | + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err)); | ||
286 | + // } | ||
287 | + // break; | ||
288 | + // } | ||
289 | + } | ||
290 | + | ||
291 | + shareWithType(shareType: ShareVideoType, shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) { | ||
292 | + this.dispatchType(shareType, shareKey, opts, queryObj); | ||
293 | + } | ||
294 | + | ||
126 | /** | 295 | /** |
127 | * 分享id | 296 | * 分享id |
128 | * @param shareKey | 297 | * @param shareKey |
@@ -143,6 +312,25 @@ export default class ShareVideoService { | @@ -143,6 +312,25 @@ export default class ShareVideoService { | ||
143 | getShareVideoType(shareKey: string): ShareVideoType { | 312 | getShareVideoType(shareKey: string): ShareVideoType { |
144 | let shareData = this.getShareVideoData(shareKey); | 313 | let shareData = this.getShareVideoData(shareKey); |
145 | let shareType: ShareVideoType = +shareData.typ; | 314 | let shareType: ShareVideoType = +shareData.typ; |
315 | + // // 木有开启分享,直接返回None | ||
316 | + // if (Platform.IsWx && OnlineService.I.getParamsInt(OnlineKeys.ShareUnlock, 1) !== 1) | ||
317 | + // return ShareVideoType.None; | ||
318 | + | ||
319 | + // // 后台配置视频,判断是否加载出错过,出错返回分享,否则直接返回 | ||
320 | + // if (shareType === ShareVideoType.Video || shareType === ShareVideoType.VideoAndShare || shareType === ShareVideoType.VideoToShare) { | ||
321 | + // // 检测视频加载失败 | ||
322 | + // if (Platform.I.isVideoErrored()) | ||
323 | + // return ShareVideoType.Share; | ||
324 | + // else | ||
325 | + // return shareType; | ||
326 | + // } | ||
327 | + | ||
328 | + // // 是否开启分享积分,且配置为分享积分 | ||
329 | + // if (shareType === ShareVideoType.ShareIntegral && IntegralService.I.IsOpen) { | ||
330 | + // let data = IntegralService.I.convert(); | ||
331 | + // if (data) | ||
332 | + // return data.shareType; | ||
333 | + // } | ||
146 | return shareType; | 334 | return shareType; |
147 | } | 335 | } |
148 | 336 | ||
@@ -154,6 +342,55 @@ export default class ShareVideoService { | @@ -154,6 +342,55 @@ export default class ShareVideoService { | ||
154 | return this.getShareVideoType(shareKey); | 342 | return this.getShareVideoType(shareKey); |
155 | } | 343 | } |
156 | 344 | ||
345 | + private handleSuccess(opts: any, shareType: ShareVideoType, from: ShareVideoFrom, ret: any) { | ||
346 | + // // 判断分享规则 | ||
347 | + // if (IntegralService.I.IsOpen && opts.shareIntegralData && from === ShareVideoFrom.Share) { | ||
348 | + // let shareNum = IntegralService.I.IntegralShareNum; | ||
349 | + // if (shareNum === 0) { | ||
350 | + // // 第1次分享 | ||
351 | + // IntegralService.I.setIntegralShareNum(); | ||
352 | + // IntegralService.I.resetShareRatio(); | ||
353 | + // __LOG__ && console.error(`SDK ShareVideoService 分享积分 第1次分享: 初始来源:${shareType}, 类型:${from}, 分享次数:${shareNum}`); | ||
354 | + // // 设定:第一次强制失败 | ||
355 | + // // return this.handleFail(opts, shareType, from, { ...ShareVideoError.ShareRuleFail }, true); | ||
356 | + // } else { | ||
357 | + // // 第n次分享 | ||
358 | + // IntegralService.I.setIntegralShareNum(); | ||
359 | + // IntegralService.I.addShareRatio(); | ||
360 | + | ||
361 | + // let shareRatio = IntegralService.I.ShareRatio; | ||
362 | + // let radomRatio = +Math.random().toFixed(2); | ||
363 | + // __LOG__ && console.error(`SDK ShareVideoService 分享积分 第${shareNum}次分享: 初始来源:${shareType}, 类型:${from}, 分享次数:${shareNum}, 随机概率:${radomRatio}, 失败概率:${shareRatio}`); | ||
364 | + // if (radomRatio <= shareRatio) { | ||
365 | + // __LOG__ && console.error(`SDK ShareVideoService 分享积分 触发失败规则:分享强制失败, radomRatio <= shareRatio: ${radomRatio} <= ${shareRatio}`); | ||
366 | + // return this.handleFail(opts, shareType, from, { ...ShareVideoError.ShareRuleFail }, true); | ||
367 | + // } | ||
368 | + // } | ||
369 | + | ||
370 | + // // 是否同步分享积分数据 | ||
371 | + // let { intergral, isAsyncNum } = opts.shareIntegralData; | ||
372 | + // isAsyncNum && LocalService.I.saveVideoOverShareNum(intergral); | ||
373 | + // __LOG__ && isAsyncNum && console.error(`SDK ShareVideoService 分享积分 触发视频看完后,再次分享次数限制更新成功,成功后数量:${LocalService.I.getVideoOverShareNum(intergral)}`); | ||
374 | + // } | ||
375 | + | ||
376 | + // let success = opts.success || function () { }; | ||
377 | + // let context = opts.context || this; | ||
378 | + // typeof success === 'function' && success.call(context, from, ret); | ||
379 | + // (from === ShareVideoFrom.Share) && TempService.I.add(TempDataKeys.ShareSuccess, 1); | ||
380 | + } | ||
381 | + | ||
382 | + private handleFail(opts: any, shareType: ShareVideoType, from: ShareVideoFrom, err: any, isFromIntegral?: boolean) { | ||
383 | + // if (err instanceof Error) return; | ||
384 | + // // 判断来自分享积分规则,则重置分享概率 | ||
385 | + // if (IntegralService.I.IsOpen && opts.shareIntegralData && from === ShareVideoFrom.Share) { | ||
386 | + // __LOG__ && console.error(`SDK ShareVideoService 强制失败分享,回滚到: ${IntegralService.I.ShareRatioInit}`); | ||
387 | + // IntegralService.I.resetShareRatio(); | ||
388 | + // } | ||
389 | + // let fail = opts.fail || function () { }; | ||
390 | + // let context = opts.context || this; | ||
391 | + // fail && fail.call(context, from, err); | ||
392 | + } | ||
393 | + | ||
157 | private setShareVideoData(data: any) { | 394 | private setShareVideoData(data: any) { |
158 | (data.data || []).forEach((item: any) => { | 395 | (data.data || []).forEach((item: any) => { |
159 | this.shareObjs[item.key] = this.shareObjs[item.key] || []; | 396 | this.shareObjs[item.key] = this.shareObjs[item.key] || []; |
@@ -165,11 +402,19 @@ export default class ShareVideoService { | @@ -165,11 +402,19 @@ export default class ShareVideoService { | ||
165 | let list: Array<ShareData> = this.shareObjs[shareKey]; | 402 | let list: Array<ShareData> = this.shareObjs[shareKey]; |
166 | if (!list) { | 403 | if (!list) { |
167 | list = this.shareObjs.default; | 404 | list = this.shareObjs.default; |
405 | + // let shareData: ShareData = CfgManager.I.config.ShareData; | ||
406 | + // if (!shareData) throw new TypeError('SDK ShareVideoService - 请在config.js中配置ShareData'); | ||
407 | + // let share_open = shareData.share_wxad_id ? ShareVideoType.Video : ShareVideoType.Share; | ||
408 | + // return { ...shareData, share_id: 99999 + '', share_key: shareKey, share_open }; | ||
168 | } | 409 | } |
169 | let index = RandomUtils.rand(0, list.length); | 410 | let index = RandomUtils.rand(0, list.length); |
170 | return list[index]; | 411 | return list[index]; |
171 | } | 412 | } |
172 | 413 | ||
414 | + onShareTimeline(title?: string, imageUrl?: string, imagePreviewUrl?: string, query?: string) { | ||
415 | + return SDKShare.I.onShareTimeline(title, imageUrl, imagePreviewUrl, query); | ||
416 | + } | ||
417 | + | ||
173 | private createQuery(params = {}): string { | 418 | private createQuery(params = {}): string { |
174 | let q = params["query"]; | 419 | let q = params["query"]; |
175 | delete params["query"]; | 420 | delete params["query"]; |
wxsdk/service/entity/SdkData.ts.meta
1 | { | 1 | { |
2 | - "ver": "1.0.8", | 2 | + "ver": "4.0.23", |
3 | + "importer": "typescript", | ||
4 | + "imported": true, | ||
3 | "uuid": "f09e38ff-4d68-417e-8904-949127e4d321", | 5 | "uuid": "f09e38ff-4d68-417e-8904-949127e4d321", |
4 | - "isPlugin": false, | ||
5 | - "loadPluginInWeb": true, | ||
6 | - "loadPluginInNative": true, | ||
7 | - "loadPluginInEditor": false, | ||
8 | - "subMetas": {} | ||
9 | -} | ||
10 | \ No newline at end of file | 6 | \ No newline at end of file |
7 | + "files": [], | ||
8 | + "subMetas": {}, | ||
9 | + "userData": {} | ||
10 | +} |
wxsdk/service/entity/ShareData.ts.meta
1 | { | 1 | { |
2 | - "ver": "1.0.8", | 2 | + "ver": "4.0.23", |
3 | + "importer": "typescript", | ||
4 | + "imported": true, | ||
3 | "uuid": "d9db9b13-470b-456d-95ff-75354ec23ca0", | 5 | "uuid": "d9db9b13-470b-456d-95ff-75354ec23ca0", |
4 | - "isPlugin": false, | ||
5 | - "loadPluginInWeb": true, | ||
6 | - "loadPluginInNative": true, | ||
7 | - "loadPluginInEditor": false, | ||
8 | - "subMetas": {} | ||
9 | -} | ||
10 | \ No newline at end of file | 6 | \ No newline at end of file |
7 | + "files": [], | ||
8 | + "subMetas": {}, | ||
9 | + "userData": {} | ||
10 | +} |
wxsdk/share/SDKShare.ts
@@ -2,6 +2,7 @@ import SimulateShare from "./SimulateShare"; | @@ -2,6 +2,7 @@ import SimulateShare from "./SimulateShare"; | ||
2 | import { __LOG__, ShareVideoError } from "../base/SDKConst"; | 2 | import { __LOG__, ShareVideoError } from "../base/SDKConst"; |
3 | import LogService from "../service/LogService"; | 3 | import LogService from "../service/LogService"; |
4 | import { DOT_SHARE_TYPE } from "../base/SDKEnum"; | 4 | import { DOT_SHARE_TYPE } from "../base/SDKEnum"; |
5 | +import AlipayApi from "../alipay/AlipayApi"; | ||
5 | 6 | ||
6 | export default class SDKShare { | 7 | export default class SDKShare { |
7 | private shareSimulate: boolean | 8 | private shareSimulate: boolean |
@@ -47,14 +48,19 @@ export default class SDKShare { | @@ -47,14 +48,19 @@ export default class SDKShare { | ||
47 | reject(null); | 48 | reject(null); |
48 | } | 49 | } |
49 | }; | 50 | }; |
50 | - // 是否模拟分享 | ||
51 | - this.shareSimulate && !opts.closeSimulate && this.simulate({ ...callbackObj }); | ||
52 | - | ||
53 | - if(this.shareSimulate && opts.closeSimulate){ | 51 | + |
52 | + if (this.shareSimulate && opts.closeSimulate) { | ||
54 | LogService.I.share(shareKey, share_id, DOT_SHARE_TYPE.share) | 53 | LogService.I.share(shareKey, share_id, DOT_SHARE_TYPE.share) |
55 | } | 54 | } |
56 | // 主动拉起转发 | 55 | // 主动拉起转发 |
57 | - wx.shareAppMessage(commonObj); | 56 | + if (typeof my != 'undefined') { |
57 | + //模拟分享支付宝上面会失败 | ||
58 | + return AlipayApi.I.shareAppMessage(commonObj, callbackObj) | ||
59 | + } else { | ||
60 | + // 是否模拟分享 | ||
61 | + this.shareSimulate && !opts.closeSimulate && this.simulate({ ...callbackObj }); | ||
62 | + wx.shareAppMessage(commonObj); | ||
63 | + } | ||
58 | }); | 64 | }); |
59 | } | 65 | } |
60 | /** | 66 | /** |
@@ -75,6 +81,27 @@ export default class SDKShare { | @@ -75,6 +81,27 @@ export default class SDKShare { | ||
75 | forward(params: any, opts: any = {}) { | 81 | forward(params: any, opts: any = {}) { |
76 | let me = this; | 82 | let me = this; |
77 | let { title, imageUrl, query, imageUrlId } = params; | 83 | let { title, imageUrl, query, imageUrlId } = params; |
84 | + if (typeof my != 'undefined') { | ||
85 | + my.onShareAppMessage = function () { | ||
86 | + return { | ||
87 | + title: title, | ||
88 | + scImgUrl: imageUrl, | ||
89 | + bgImgUrl: 'https://wxsdk-cdn.miso-lab.com/moon-island/share/zfbshare.jpeg', | ||
90 | + success: (ret?: any) => { | ||
91 | + __LOG__ && console.error('WxShare forward success'); | ||
92 | + opts.success && opts.success.call(opts.context, ret); | ||
93 | + }, | ||
94 | + fail: (err?: any) => { | ||
95 | + __LOG__ && console.error('WxShare forward fail'); | ||
96 | + opts.fail && opts.fail.call(opts.context, err); | ||
97 | + }, | ||
98 | + complete: function (e) { | ||
99 | + | ||
100 | + } | ||
101 | + } | ||
102 | + } | ||
103 | + return; | ||
104 | + } | ||
78 | wx.onShareAppMessage(function () { | 105 | wx.onShareAppMessage(function () { |
79 | let obj = { | 106 | let obj = { |
80 | title, | 107 | title, |
@@ -98,8 +125,12 @@ export default class SDKShare { | @@ -98,8 +125,12 @@ export default class SDKShare { | ||
98 | me.shareSimulate && !opts.closeSimulate && me.simulate({ ...obj }); | 125 | me.shareSimulate && !opts.closeSimulate && me.simulate({ ...obj }); |
99 | return obj; | 126 | return obj; |
100 | }); | 127 | }); |
101 | - // 显示当前页面的转发按钮 | ||
102 | - wx.showShareMenu({}); | 128 | + // 显示当前页面的转发按钮 "shareAppMessage"表示“发送给朋友”按钮,"shareTimeline"表示“分享到朋友圈”按钮 |
129 | + wx.showShareMenu({ | ||
130 | + withShareTicket: true, | ||
131 | + menus: ['shareAppMessage', 'shareTimeline'] | ||
132 | + }) | ||
133 | + | ||
103 | } | 134 | } |
104 | 135 | ||
105 | private createQuery(params = {}): string { | 136 | private createQuery(params = {}): string { |
@@ -120,4 +151,18 @@ export default class SDKShare { | @@ -120,4 +151,18 @@ export default class SDKShare { | ||
120 | SimulateShare.I.bind(data); | 151 | SimulateShare.I.bind(data); |
121 | } | 152 | } |
122 | 153 | ||
154 | + onShareTimeline(title?: string, imageUrl?: string, imagePreviewUrl?: string, query?: string) { | ||
155 | + if (wx?.onShareTimeline) { | ||
156 | + wx.onShareTimeline(() => { | ||
157 | + return { | ||
158 | + title,//朋友圈标题 | ||
159 | + imageUrl, // 朋友圈 小图 | ||
160 | + imagePreviewUrl,//朋友圈 预览大图 | ||
161 | + query, | ||
162 | + } | ||
163 | + }) | ||
164 | + } | ||
165 | + | ||
166 | + } | ||
167 | + | ||
123 | } | 168 | } |
124 | \ No newline at end of file | 169 | \ No newline at end of file |
wxsdk/share/SDKVideo.ts
1 | +import { sys } from "cc"; | ||
1 | import { ShareVideoError, __LOG__ } from "../base/SDKConst"; | 2 | import { ShareVideoError, __LOG__ } from "../base/SDKConst"; |
2 | import { DOT_AD_TYPE, DOT_AD_STATUS } from "../base/SDKEnum"; | 3 | import { DOT_AD_TYPE, DOT_AD_STATUS } from "../base/SDKEnum"; |
3 | import LogService from "../service/LogService"; | 4 | import LogService from "../service/LogService"; |
5 | +import TAMgr from "../../ta/TAMgr"; | ||
6 | +import AlipayApi from "../alipay/AlipayApi"; | ||
4 | 7 | ||
5 | /* | 8 | /* |
6 | * 激烈视频 | 9 | * 激烈视频 |
@@ -8,7 +11,6 @@ import LogService from "../service/LogService"; | @@ -8,7 +11,6 @@ import LogService from "../service/LogService"; | ||
8 | export default class SDKVideo { | 11 | export default class SDKVideo { |
9 | private _isPlaying: boolean; | 12 | private _isPlaying: boolean; |
10 | private _isErrored: boolean; | 13 | private _isErrored: boolean; |
11 | - private _isMultiton: boolean; | ||
12 | private resolve: any; | 14 | private resolve: any; |
13 | private reject: any; | 15 | private reject: any; |
14 | private videoAd: any; | 16 | private videoAd: any; |
@@ -20,7 +22,6 @@ export default class SDKVideo { | @@ -20,7 +22,6 @@ export default class SDKVideo { | ||
20 | this.videoKey = ''; | 22 | this.videoKey = ''; |
21 | this._isPlaying = false; | 23 | this._isPlaying = false; |
22 | this._isErrored = false; | 24 | this._isErrored = false; |
23 | - this._isMultiton = false; | ||
24 | } | 25 | } |
25 | 26 | ||
26 | get isErrored() { | 27 | get isErrored() { |
@@ -36,41 +37,57 @@ export default class SDKVideo { | @@ -36,41 +37,57 @@ export default class SDKVideo { | ||
36 | preloadVideo(adUnitId: string) { | 37 | preloadVideo(adUnitId: string) { |
37 | if (this.preloadVideoAd || this.isPreload) return | 38 | if (this.preloadVideoAd || this.isPreload) return |
38 | this.isPreload = true; | 39 | this.isPreload = true; |
39 | - let ad = wx.createRewardedVideoAd({ | ||
40 | - adUnitId, | ||
41 | - }); | 40 | + let ad; |
41 | + if (typeof my != 'undefined') { | ||
42 | + ad = AlipayApi.I.createRewardedVideoAd(adUnitId); | ||
43 | + } else { | ||
44 | + ad = wx.createRewardedVideoAd({ | ||
45 | + adUnitId, | ||
46 | + }); | ||
47 | + } | ||
42 | ad.onError(this.preError); | 48 | ad.onError(this.preError); |
43 | - ad.load().then(this.handleLoaded2).catch(() => { | ||
44 | - this.isPreload = false | ||
45 | - }) | ||
46 | - this.videoAd2 = ad; | 49 | + //支付宝同时调用create 和load 需要间隔时间 |
50 | + if (typeof my != 'undefined') { | ||
51 | + let self = this; | ||
52 | + setTimeout(() => { | ||
53 | + self.videoAd2 = ad; | ||
54 | + ad.load().then(self.handleLoaded2).catch(() => { | ||
55 | + self.isPreload = false | ||
56 | + }) | ||
57 | + }, 300) | ||
58 | + } else { | ||
59 | + ad.load().then(this.handleLoaded2).catch(() => { | ||
60 | + this.isPreload = false | ||
61 | + }) | ||
62 | + this.videoAd2 = ad; | ||
63 | + } | ||
47 | 64 | ||
48 | } | 65 | } |
49 | private preError() { | 66 | private preError() { |
50 | let that = SDKVideo.I; | 67 | let that = SDKVideo.I; |
51 | - that.isPreload = false | 68 | + that.isPreload = false; |
69 | + __LOG__ && console.warn("视频预加载失败") | ||
52 | } | 70 | } |
53 | 71 | ||
54 | private handleLoaded2() { | 72 | private handleLoaded2() { |
55 | let that = SDKVideo.I; | 73 | let that = SDKVideo.I; |
56 | that.preloadVideoAd = that.videoAd2; | 74 | that.preloadVideoAd = that.videoAd2; |
57 | that.isPreload = false | 75 | that.isPreload = false |
58 | - __LOG__ && console.warn("视频预加载成功", that.preloadVideoAd) | 76 | + __LOG__ && console.warn("视频预加载成功") |
77 | + // that.preloadVideoAd.ttttttt = '111111' | ||
78 | + // console.warn(that.preloadVideoAd.isReady()); | ||
59 | } | 79 | } |
60 | 80 | ||
61 | offPreload() { | 81 | offPreload() { |
62 | let that = SDKVideo.I; | 82 | let that = SDKVideo.I; |
63 | - that.preloadVideoAd.offError(that.preError); | 83 | + if (typeof my != 'undefined') { |
84 | + that.preloadVideoAd = null; | ||
85 | + } else { | ||
86 | + that.preloadVideoAd.offError(that.preError); | ||
87 | + } | ||
64 | } | 88 | } |
65 | 89 | ||
66 | - /** | ||
67 | - * | ||
68 | - * @param videoKey | ||
69 | - * @param adUnitId | ||
70 | - * @param multiton 多例 | ||
71 | - * @returns | ||
72 | - */ | ||
73 | - async show(videoKey: string, adUnitId: string, multiton: boolean = false): Promise<any> { | 90 | + async show(videoKey: string, adUnitId: string): Promise<any> { |
74 | return new Promise(async (resolve, reject) => { | 91 | return new Promise(async (resolve, reject) => { |
75 | if (this.isPlaying) | 92 | if (this.isPlaying) |
76 | return reject({ ...ShareVideoError.VideoPlaying }); | 93 | return reject({ ...ShareVideoError.VideoPlaying }); |
@@ -79,25 +96,40 @@ export default class SDKVideo { | @@ -79,25 +96,40 @@ export default class SDKVideo { | ||
79 | return reject({ ...ShareVideoError.VideoInvalid }); | 96 | return reject({ ...ShareVideoError.VideoInvalid }); |
80 | 97 | ||
81 | LogService.I.adStat(videoKey, this.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.request); | 98 | LogService.I.adStat(videoKey, this.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.request); |
82 | - let videoAd; | ||
83 | - let hasVideo; | ||
84 | - if (this.preloadVideoAd && !multiton) { | ||
85 | - __LOG__ && console.log("使用预加载视频", this.preloadVideoAd) | 99 | + TAMgr.Ins.dot('video', { |
100 | + ad_key: videoKey, | ||
101 | + type: DOT_AD_STATUS.request | ||
102 | + }) | ||
103 | + let videoAd | ||
104 | + let hasVideo | ||
105 | + if (this.preloadVideoAd) { | ||
106 | + __LOG__ && console.log("使用预加载视频") | ||
86 | hasVideo = true | 107 | hasVideo = true |
87 | - this.offPreload(); | ||
88 | videoAd = this.preloadVideoAd; | 108 | videoAd = this.preloadVideoAd; |
109 | + this.offPreload() | ||
110 | + // this.preloadVideo(adUnitId); | ||
89 | } else { | 111 | } else { |
90 | __LOG__ && console.log("不使用预加载视频") | 112 | __LOG__ && console.log("不使用预加载视频") |
91 | hasVideo = false; | 113 | hasVideo = false; |
92 | - videoAd = wx.createRewardedVideoAd({ | ||
93 | - adUnitId, | ||
94 | - multiton: true | ||
95 | - }); | 114 | + if (typeof my != 'undefined') { |
115 | + try { | ||
116 | + videoAd = AlipayApi.I.createRewardedVideoAd(adUnitId); | ||
117 | + } catch (error) { | ||
118 | + __LOG__ && console.log("不使用预加载视频23:", JSON.stringify(error)) | ||
119 | + } | ||
120 | + } else { | ||
121 | + videoAd = wx.createRewardedVideoAd({ | ||
122 | + adUnitId, | ||
123 | + }); | ||
124 | + } | ||
96 | // this.preloadVideo(adUnitId); | 125 | // this.preloadVideo(adUnitId); |
97 | } | 126 | } |
98 | - this._isMultiton = !hasVideo; | ||
99 | - if (!videoAd) | 127 | + // let videoAd = wx.createRewardedVideoAd({ |
128 | + // adUnitId | ||
129 | + // }); | ||
130 | + if (!videoAd) { | ||
100 | return reject({ ...ShareVideoError.VideoNotOpen }); | 131 | return reject({ ...ShareVideoError.VideoNotOpen }); |
132 | + } | ||
101 | 133 | ||
102 | this._isPlaying = true; | 134 | this._isPlaying = true; |
103 | this._isErrored = false; | 135 | this._isErrored = false; |
@@ -105,6 +137,7 @@ export default class SDKVideo { | @@ -105,6 +137,7 @@ export default class SDKVideo { | ||
105 | this.adUnitId = adUnitId; | 137 | this.adUnitId = adUnitId; |
106 | this.resolve = resolve; | 138 | this.resolve = resolve; |
107 | this.reject = reject; | 139 | this.reject = reject; |
140 | + | ||
108 | this.videoAd = videoAd; | 141 | this.videoAd = videoAd; |
109 | videoAd.onClose(this.handleClose); | 142 | videoAd.onClose(this.handleClose); |
110 | videoAd.onError(this.onError); | 143 | videoAd.onError(this.onError); |
@@ -119,6 +152,14 @@ export default class SDKVideo { | @@ -119,6 +152,14 @@ export default class SDKVideo { | ||
119 | } | 152 | } |
120 | } else { | 153 | } else { |
121 | try { | 154 | try { |
155 | + if (typeof my != 'undefined') { | ||
156 | + await new Promise(resolve => { | ||
157 | + setTimeout(() => { | ||
158 | + resolve(null) | ||
159 | + }, 300); | ||
160 | + | ||
161 | + }); | ||
162 | + } | ||
122 | await videoAd.load() | 163 | await videoAd.load() |
123 | await this.handleLoaded() | 164 | await this.handleLoaded() |
124 | } catch (error) { | 165 | } catch (error) { |
@@ -126,6 +167,7 @@ export default class SDKVideo { | @@ -126,6 +167,7 @@ export default class SDKVideo { | ||
126 | } | 167 | } |
127 | 168 | ||
128 | } | 169 | } |
170 | + this.preloadVideo(adUnitId); | ||
129 | __LOG__ && console.warn('====> PCSDK WxVideo 请求视频adUnitId', adUnitId); | 171 | __LOG__ && console.warn('====> PCSDK WxVideo 请求视频adUnitId', adUnitId); |
130 | }); | 172 | }); |
131 | } | 173 | } |
@@ -139,11 +181,14 @@ export default class SDKVideo { | @@ -139,11 +181,14 @@ export default class SDKVideo { | ||
139 | private async handleLoaded() { | 181 | private async handleLoaded() { |
140 | let that = SDKVideo.I; | 182 | let that = SDKVideo.I; |
141 | try { | 183 | try { |
142 | - // __LOG__ && console.warn("handleLoaded2", that.videoAd, that.videoAd.isReady()); | 184 | + __LOG__ && console.warn("handleLoaded2"); |
143 | LogService.I.adStat(this.videoKey, this.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.show) | 185 | LogService.I.adStat(this.videoKey, this.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.show) |
144 | - | ||
145 | - if (cc.sys.platform === cc.sys.WECHAT_GAME) { | ||
146 | - if (that.videoAd.isReady()) {//抖音没有 isReady | 186 | + TAMgr.Ins.dot('video', { |
187 | + ad_key: this.videoKey, | ||
188 | + type: DOT_AD_STATUS.show | ||
189 | + }) | ||
190 | + if (sys.platform === sys.Platform.WECHAT_GAME && typeof qq == 'undefined') { | ||
191 | + if (that.videoAd.isReady()) {//抖音、qq 没有 isReady | ||
147 | that.show_time = Date.now(); | 192 | that.show_time = Date.now(); |
148 | await that.videoAd.show(); | 193 | await that.videoAd.show(); |
149 | } else { | 194 | } else { |
@@ -173,22 +218,26 @@ export default class SDKVideo { | @@ -173,22 +218,26 @@ export default class SDKVideo { | ||
173 | if (res && res.isEnded || res === undefined) { | 218 | if (res && res.isEnded || res === undefined) { |
174 | // 统计看视频成功 | 219 | // 统计看视频成功 |
175 | LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.complete) | 220 | LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.complete) |
221 | + TAMgr.Ins.dot('video', { | ||
222 | + ad_key: that.videoKey, | ||
223 | + type: DOT_AD_STATUS.complete | ||
224 | + }) | ||
176 | that.resolve && that.resolve({ type: 2 }); | 225 | that.resolve && that.resolve({ type: 2 }); |
177 | } else { | 226 | } else { |
178 | // console.log("视频关闭时间:", t) | 227 | // console.log("视频关闭时间:", t) |
179 | LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.interrupt, t) | 228 | LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.interrupt, t) |
229 | + TAMgr.Ins.dot('video', { | ||
230 | + ad_key: that.videoKey, | ||
231 | + type: DOT_AD_STATUS.interrupt | ||
232 | + }) | ||
180 | that.reject && that.reject({ ...ShareVideoError.VideoQuit }); | 233 | that.reject && that.reject({ ...ShareVideoError.VideoQuit }); |
181 | } | 234 | } |
182 | - that.videoAd.offClose(that.handleClose); | ||
183 | - if (that._isMultiton) { | ||
184 | - that.videoAd.destroy(); | 235 | + if (typeof my != 'undefined') { |
185 | that.videoAd = null; | 236 | that.videoAd = null; |
237 | + } else { | ||
238 | + that.videoAd.offClose(that.handleClose); | ||
186 | } | 239 | } |
187 | - // if (that.preloadVideoAd) { | ||
188 | - // that.preloadVideoAd.destroy(); | ||
189 | - // that.preloadVideoAd = null; | ||
190 | - // } | ||
191 | - that.preloadVideo(that.adUnitId); | 240 | + |
192 | that._isPlaying = false; | 241 | that._isPlaying = false; |
193 | that._isErrored = false; | 242 | that._isErrored = false; |
194 | } | 243 | } |
@@ -197,8 +246,16 @@ export default class SDKVideo { | @@ -197,8 +246,16 @@ export default class SDKVideo { | ||
197 | __LOG__ && console.warn('====> PCSDK WxVideo 加载视频广告失败', err); | 246 | __LOG__ && console.warn('====> PCSDK WxVideo 加载视频广告失败', err); |
198 | let that = SDKVideo.I; | 247 | let that = SDKVideo.I; |
199 | LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.fail) | 248 | LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.fail) |
249 | + TAMgr.Ins.dot('video', { | ||
250 | + ad_key: that.videoKey, | ||
251 | + type: DOT_AD_STATUS.fail | ||
252 | + }) | ||
200 | that.reject && that.reject({ ...ShareVideoError.VideoFail }); | 253 | that.reject && that.reject({ ...ShareVideoError.VideoFail }); |
201 | - that.videoAd && that.videoAd.offClose && that.videoAd.offClose(that.handleClose); | 254 | + if (typeof my != 'undefined') { |
255 | + | ||
256 | + } else { | ||
257 | + that.videoAd && that.videoAd.offClose && that.videoAd.offClose(that.handleClose); | ||
258 | + } | ||
202 | that._isPlaying = false; | 259 | that._isPlaying = false; |
203 | that._isErrored = true; | 260 | that._isErrored = true; |
204 | } | 261 | } |
wxsdk/utils/RandomUtils.ts
@@ -20,7 +20,7 @@ export default class RandomUtils { | @@ -20,7 +20,7 @@ export default class RandomUtils { | ||
20 | static rand(min: number, max: number) { | 20 | static rand(min: number, max: number) { |
21 | min = min || 0; | 21 | min = min || 0; |
22 | max = max || 10000; | 22 | max = max || 10000; |
23 | - return Math.floor(Math.random() * 10000) % (max - min) + min; | 23 | + return Math.floor(Math.random() * 10000) % (max - min) + min; |
24 | } | 24 | } |
25 | 25 | ||
26 | static rang(min: number, max: number) { | 26 | static rang(min: number, max: number) { |
@@ -30,4 +30,5 @@ export default class RandomUtils { | @@ -30,4 +30,5 @@ export default class RandomUtils { | ||
30 | static randFloat(min: number, max: number) { | 30 | static randFloat(min: number, max: number) { |
31 | return parseFloat((Math.random() * (max - min) + min).toFixed(2)); | 31 | return parseFloat((Math.random() * (max - min) + min).toFixed(2)); |
32 | } | 32 | } |
33 | + | ||
33 | } | 34 | } |
wxsdk/wx/WxApi.ts
@@ -371,8 +371,8 @@ export default class WxApi { | @@ -371,8 +371,8 @@ export default class WxApi { | ||
371 | /** | 371 | /** |
372 | * 米大师充值 | 372 | * 米大师充值 |
373 | */ | 373 | */ |
374 | - requestMidasPayment(params: { mode: string; env: number; offerId: string; currencyType: string; platform: string; buyQuantity: number; zoneId: string }): Promise<any> { | ||
375 | - let { mode, env, offerId, currencyType, platform, buyQuantity, zoneId } = params; | 374 | + requestMidasPayment(params: { mode: string; env: number; offerId: string; currencyType: string; platform: string; buyQuantity: number; zoneId: string,outTradeNo:string }): Promise<any> { |
375 | + let { mode, env, offerId, currencyType, platform, buyQuantity, zoneId,outTradeNo } = params; | ||
376 | console.warn('====> PCSDK WxApi requestMidasPayment 支付参数', { | 376 | console.warn('====> PCSDK WxApi requestMidasPayment 支付参数', { |
377 | mode, | 377 | mode, |
378 | env, | 378 | env, |
@@ -380,7 +380,8 @@ export default class WxApi { | @@ -380,7 +380,8 @@ export default class WxApi { | ||
380 | currencyType, | 380 | currencyType, |
381 | platform, | 381 | platform, |
382 | buyQuantity, | 382 | buyQuantity, |
383 | - zoneId | 383 | + zoneId, |
384 | + outTradeNo | ||
384 | }); | 385 | }); |
385 | return new Promise((resolve, reject) => { | 386 | return new Promise((resolve, reject) => { |
386 | wx.requestMidasPayment({ | 387 | wx.requestMidasPayment({ |
@@ -391,6 +392,7 @@ export default class WxApi { | @@ -391,6 +392,7 @@ export default class WxApi { | ||
391 | platform, | 392 | platform, |
392 | buyQuantity, | 393 | buyQuantity, |
393 | zoneId, | 394 | zoneId, |
395 | + outTradeNo, | ||
394 | success: ret => { | 396 | success: ret => { |
395 | if (ret && ret.errMsg === 'requestMidasPayment:ok') | 397 | if (ret && ret.errMsg === 'requestMidasPayment:ok') |
396 | resolve(ret); | 398 | resolve(ret); |
wxsdk/wx/WxBanner.ts
@@ -42,7 +42,7 @@ export default class WxBanner { | @@ -42,7 +42,7 @@ export default class WxBanner { | ||
42 | private queue: Function[] = []; | 42 | private queue: Function[] = []; |
43 | private isEnd: boolean = false; | 43 | private isEnd: boolean = false; |
44 | 44 | ||
45 | - create(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) { | 45 | + create(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean ,isCreate?:boolean}) { |
46 | this.bannerParams = opts || {}; | 46 | this.bannerParams = opts || {}; |
47 | if (opts && opts.bannerWidth) { | 47 | if (opts && opts.bannerWidth) { |
48 | this.bannerWidth = opts.bannerWidth; | 48 | this.bannerWidth = opts.bannerWidth; |
@@ -74,10 +74,15 @@ export default class WxBanner { | @@ -74,10 +74,15 @@ export default class WxBanner { | ||
74 | // this.bannerAd = wx.createGameBanner({ adUnitId, style: { left: style.left, top: this.bannerHeight } }); | 74 | // this.bannerAd = wx.createGameBanner({ adUnitId, style: { left: style.left, top: this.bannerHeight } }); |
75 | // else | 75 | // else |
76 | if (this.bannerAd) { | 76 | if (this.bannerAd) { |
77 | - if (!opts || (opts && !opts.isOff)) { | ||
78 | - this.show(false); | 77 | + if(opts && opts.isCreate){ |
78 | + //重新创建 | ||
79 | + console.log("重新创建banner") | ||
80 | + }else{ | ||
81 | + if (!opts || (opts && !opts.isOff)) { | ||
82 | + this.show(false); | ||
83 | + } | ||
84 | + return | ||
79 | } | 85 | } |
80 | - return | ||
81 | } | 86 | } |
82 | this.bannerAd = wx.createBannerAd({ adUnitId, style, adIntervals: this.bannerParams.adIntervals }); | 87 | this.bannerAd = wx.createBannerAd({ adUnitId, style, adIntervals: this.bannerParams.adIntervals }); |
83 | LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.request) | 88 | LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.request) |
wxsdk/wx/WxInit.ts
@@ -23,7 +23,7 @@ export default class WxInit { | @@ -23,7 +23,7 @@ export default class WxInit { | ||
23 | init() { | 23 | init() { |
24 | let { platform } = WxSystem.I.SystemData; | 24 | let { platform } = WxSystem.I.SystemData; |
25 | let launchData = WxLaunch.I.LaunchData; | 25 | let launchData = WxLaunch.I.LaunchData; |
26 | - console.log("启动信息", launchData); | 26 | + console.log("启动信息", JSON.stringify(launchData)); |
27 | let { query, scene, referrerInfo } = launchData; | 27 | let { query, scene, referrerInfo } = launchData; |
28 | let { | 28 | let { |
29 | invite_type, | 29 | invite_type, |
@@ -41,6 +41,7 @@ export default class WxInit { | @@ -41,6 +41,7 @@ export default class WxInit { | ||
41 | // 抖音投放相关信息 | 41 | // 抖音投放相关信息 |
42 | clue_token, | 42 | clue_token, |
43 | ad_id, | 43 | ad_id, |
44 | + promotion_id, | ||
44 | creative_id, | 45 | creative_id, |
45 | advertister_id, | 46 | advertister_id, |
46 | request_id | 47 | request_id |
@@ -58,6 +59,10 @@ export default class WxInit { | @@ -58,6 +59,10 @@ export default class WxInit { | ||
58 | if (ad_id) { | 59 | if (ad_id) { |
59 | fromChannel = ad_id; | 60 | fromChannel = ad_id; |
60 | } | 61 | } |
62 | + // 设置抖音投放转化跟踪 v2 | ||
63 | + if(promotion_id){ | ||
64 | + fromChannel = promotion_id; | ||
65 | + } | ||
61 | 66 | ||
62 | //定向分享统计 | 67 | //定向分享统计 |
63 | if (shareMessageToFriendScene && shareMessageToFriendScene >= 0 && shareMessageToFriendScene <= 50) { | 68 | if (shareMessageToFriendScene && shareMessageToFriendScene >= 0 && shareMessageToFriendScene <= 50) { |
wxsdk/wx/WxLogin.ts
@@ -8,6 +8,7 @@ import LogService from "../service/LogService"; | @@ -8,6 +8,7 @@ import LogService from "../service/LogService"; | ||
8 | import { DOT_SHARE_TYPE } from "../base/SDKEnum"; | 8 | import { DOT_SHARE_TYPE } from "../base/SDKEnum"; |
9 | import ShareVideoService from "../service/ShareVideoService"; | 9 | import ShareVideoService from "../service/ShareVideoService"; |
10 | import OnlineService from "../service/OnlineService"; | 10 | import OnlineService from "../service/OnlineService"; |
11 | +import AlipayApi from "../alipay/AlipayApi"; | ||
11 | 12 | ||
12 | export default class WxLogin { | 13 | export default class WxLogin { |
13 | /** | 14 | /** |
@@ -17,16 +18,32 @@ export default class WxLogin { | @@ -17,16 +18,32 @@ export default class WxLogin { | ||
17 | * tip2:必须先调用wxLogin才能使用getUserInfo | 18 | * tip2:必须先调用wxLogin才能使用getUserInfo |
18 | */ | 19 | */ |
19 | async login(isAuthorize: boolean): Promise<any> { | 20 | async login(isAuthorize: boolean): Promise<any> { |
20 | - return new Promise(async (resolve, reject) => { | ||
21 | - let code = await WxApi.I.login(); | ||
22 | - if (isAuthorize) { | ||
23 | - WxApi.I.getUserinfo() | ||
24 | - .then((ret: any) => this.authedlogin(ret, code, resolve, reject)) | ||
25 | - .catch((err: any) => this.weakLogin(err, code, resolve, reject)); | ||
26 | - } else { | ||
27 | - this.weakLogin({ errCode: 1, msg: '默认未授权登录' }, code, resolve, reject) | ||
28 | - } | ||
29 | - }); | 21 | + if (typeof my !== 'undefined') { |
22 | + return new Promise(async (resolve, reject) => { | ||
23 | + console.log("-----login4-------") | ||
24 | + let code = await AlipayApi.I.login(); | ||
25 | + console.log("-----login5-------") | ||
26 | + console.log(code) | ||
27 | + if (isAuthorize) { | ||
28 | + AlipayApi.I.getUserinfo() | ||
29 | + .then((ret: any) => this.authedlogin(ret, code, resolve, reject)) | ||
30 | + .catch((err: any) => this.weakLogin(err, code, resolve, reject)); | ||
31 | + } else { | ||
32 | + this.weakLogin({ errCode: 1, msg: '默认未授权登录' }, code, resolve, reject) | ||
33 | + } | ||
34 | + }); | ||
35 | + } else { | ||
36 | + return new Promise(async (resolve, reject) => { | ||
37 | + let code = await WxApi.I.login(); | ||
38 | + if (isAuthorize) { | ||
39 | + WxApi.I.getUserinfo() | ||
40 | + .then((ret: any) => this.authedlogin(ret, code, resolve, reject)) | ||
41 | + .catch((err: any) => this.weakLogin(err, code, resolve, reject)); | ||
42 | + } else { | ||
43 | + this.weakLogin({ errCode: 1, msg: '默认未授权登录' }, code, resolve, reject) | ||
44 | + } | ||
45 | + }); | ||
46 | + } | ||
30 | } | 47 | } |
31 | private isFirst: boolean | 48 | private isFirst: boolean |
32 | 49 | ||
@@ -91,6 +108,8 @@ export default class WxLogin { | @@ -91,6 +108,8 @@ export default class WxLogin { | ||
91 | */ | 108 | */ |
92 | private handleLogin(data: any, resolve: any, isAuthorize: boolean) { | 109 | private handleLogin(data: any, resolve: any, isAuthorize: boolean) { |
93 | // console.log("登录请求结果data", data) | 110 | // console.log("登录请求结果data", data) |
111 | + | ||
112 | + console.log("-----login5-------") | ||
94 | if (data) { | 113 | if (data) { |
95 | // 设置登录信息 | 114 | // 设置登录信息 |
96 | if (data.data) { | 115 | if (data.data) { |
@@ -119,7 +138,10 @@ export default class WxLogin { | @@ -119,7 +138,10 @@ export default class WxLogin { | ||
119 | } catch (error) { | 138 | } catch (error) { |
120 | console.log("handleExpire_error", error) | 139 | console.log("handleExpire_error", error) |
121 | } | 140 | } |
122 | - ShareVideoService.I.forward() | 141 | + // 支付宝没有 |
142 | + if(typeof my == 'undefined'){ | ||
143 | + ShareVideoService.I.forward() | ||
144 | + } | ||
123 | } | 145 | } |
124 | } | 146 | } |
125 | resolve(data) | 147 | resolve(data) |
wxsdk/wx/WxPay.ts
@@ -23,7 +23,8 @@ export default class WxPay { | @@ -23,7 +23,8 @@ export default class WxPay { | ||
23 | offerId: OfferId, | 23 | offerId: OfferId, |
24 | currencyType: CurrencyType, | 24 | currencyType: CurrencyType, |
25 | buyQuantity: params.money / 10, | 25 | buyQuantity: params.money / 10, |
26 | - zoneId: ZoneId | 26 | + zoneId: ZoneId, |
27 | + outTradeNo:params.orderid | ||
27 | }; | 28 | }; |
28 | let extend = ""; | 29 | let extend = ""; |
29 | for (let key in opts) { | 30 | for (let key in opts) { |
@@ -90,7 +91,7 @@ export default class WxPay { | @@ -90,7 +91,7 @@ export default class WxPay { | ||
90 | } | 91 | } |
91 | 92 | ||
92 | private handlePayError(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts, err: any, reject: any) { | 93 | private handlePayError(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts, err: any, reject: any) { |
93 | - console.log("支付失败", JSON.stringify(err)); | 94 | + console.log("handlePayError支付失败", JSON.stringify(err)); |
94 | let type = 2; | 95 | let type = 2; |
95 | if (err.errCode + '' == '1') { | 96 | if (err.errCode + '' == '1') { |
96 | type = 3; | 97 | type = 3; |
wxsdk/wx/WxSystem.ts
@@ -42,14 +42,14 @@ export default class WxSystem { | @@ -42,14 +42,14 @@ export default class WxSystem { | ||
42 | } | 42 | } |
43 | 43 | ||
44 | get SDKVersion() { | 44 | get SDKVersion() { |
45 | - return this.data.SDKVersion; | 45 | + return this.data.SDKVersion || this.data.version; |
46 | } | 46 | } |
47 | 47 | ||
48 | - get brand(){ | 48 | + get brand() { |
49 | return this.data.brand; | 49 | return this.data.brand; |
50 | } | 50 | } |
51 | 51 | ||
52 | - get model(){ | 52 | + get model() { |
53 | return this.data.model; | 53 | return this.data.model; |
54 | } | 54 | } |
55 | 55 |