@quicktvui/tv-ad-unlock 1.0.7 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +2 -0
- package/dist/index.css.map +1 -0
- package/dist/index.js +553 -5
- package/dist/index.js.map +1 -1
- package/package.json +16 -11
- package/dist/TVAdUnlockView.css +0 -61
- package/dist/TVAdUnlockView.d.ts +0 -2
- package/dist/TVAdUnlockView.d.ts.map +0 -1
- package/dist/TVAdUnlockView.js +0 -183
- package/dist/TVAdUnlockView.js.map +0 -1
- package/dist/plugin.js +0 -34
- package/dist/plugin.js.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/useTVAdNavigator.js +0 -82
- package/dist/useTVAdNavigator.js.map +0 -1
- package/dist/useTVAdUnlock.js +0 -255
- package/dist/useTVAdUnlock.js.map +0 -1
- /package/{src → dist}/assets/invalid-code.webp +0 -0
- /package/{src → dist}/assets/scanned-code.webp +0 -0
package/package.json
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quicktvui/tv-ad-unlock",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "TV广告解锁组件 - 用于QuickTVUI框架的电视端广告解锁功能",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"dist"
|
|
9
|
-
"src/assets"
|
|
8
|
+
"dist"
|
|
10
9
|
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "pnpm run build:js && pnpm run build:dts",
|
|
12
|
+
"build:js": "rollup -c rollup.config.mjs",
|
|
13
|
+
"build:dts": "tsc -p tsconfig.build.json --emitDeclarationOnly --outDir dist",
|
|
14
|
+
"prepublishOnly": "pnpm run build"
|
|
15
|
+
},
|
|
11
16
|
"keywords": [
|
|
12
17
|
"quicktvui",
|
|
13
18
|
"tv",
|
|
@@ -23,11 +28,14 @@
|
|
|
23
28
|
"vue": "^3.0.0"
|
|
24
29
|
},
|
|
25
30
|
"devDependencies": {
|
|
26
|
-
"@rollup/plugin-
|
|
27
|
-
"@
|
|
28
|
-
"rollup": "^
|
|
31
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
32
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
33
|
+
"@rollup/plugin-url": "^8.0.0",
|
|
34
|
+
"@vue/compiler-sfc": "^3.4.0",
|
|
35
|
+
"rollup": "^4.0.0",
|
|
36
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
37
|
+
"rollup-plugin-esbuild": "^6.0.0",
|
|
29
38
|
"rollup-plugin-postcss": "^4.0.2",
|
|
30
|
-
"rollup-plugin-typescript2": "^0.37.0",
|
|
31
39
|
"rollup-plugin-vue": "^6.0.0",
|
|
32
40
|
"typescript": "^5.0.0",
|
|
33
41
|
"vue": "^3.0.0"
|
|
@@ -35,8 +43,5 @@
|
|
|
35
43
|
"repository": {
|
|
36
44
|
"type": "git",
|
|
37
45
|
"url": ""
|
|
38
|
-
},
|
|
39
|
-
"scripts": {
|
|
40
|
-
"build": "tsc && rollup -c rollup.config.mjs"
|
|
41
46
|
}
|
|
42
|
-
}
|
|
47
|
+
}
|
package/dist/TVAdUnlockView.css
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
.ad-container[data-v-72decd47] {
|
|
3
|
-
width: 1920px;
|
|
4
|
-
height: 1080px;
|
|
5
|
-
background-color: rgba(0, 0, 0, 0.7);
|
|
6
|
-
display: flex;
|
|
7
|
-
justify-content: center;
|
|
8
|
-
align-items: center;
|
|
9
|
-
}
|
|
10
|
-
.content[data-v-72decd47] {
|
|
11
|
-
width: 892px;
|
|
12
|
-
height: 646px;
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
align-items: center;
|
|
16
|
-
justify-content: center;
|
|
17
|
-
}
|
|
18
|
-
.content-bg[data-v-72decd47] {
|
|
19
|
-
position: absolute;
|
|
20
|
-
width: 892px;
|
|
21
|
-
height: 646px;
|
|
22
|
-
background-color: #FBE6C4;
|
|
23
|
-
border-radius: 30px;
|
|
24
|
-
border-width: 1px;
|
|
25
|
-
border-color: #979797;
|
|
26
|
-
}
|
|
27
|
-
.title[data-v-72decd47] {
|
|
28
|
-
font-weight: 500;
|
|
29
|
-
font-size: 46px;
|
|
30
|
-
color: #000000;
|
|
31
|
-
}
|
|
32
|
-
.sub-title[data-v-72decd47] {
|
|
33
|
-
margin-top: 32px;
|
|
34
|
-
font-weight: 400;
|
|
35
|
-
font-size: 30px;
|
|
36
|
-
color: rgba(0, 0, 0, 0.65);
|
|
37
|
-
}
|
|
38
|
-
.qrcode-container[data-v-72decd47] {
|
|
39
|
-
margin-top: 32px;
|
|
40
|
-
width: 300px;
|
|
41
|
-
height: 300px;
|
|
42
|
-
border-radius: 30px;
|
|
43
|
-
background-color: #FFFFFF;
|
|
44
|
-
display: flex;
|
|
45
|
-
justify-content: center;
|
|
46
|
-
align-items: center;
|
|
47
|
-
}
|
|
48
|
-
.qrcode[data-v-72decd47] {
|
|
49
|
-
position: absolute;
|
|
50
|
-
width: 260px;
|
|
51
|
-
height: 260px;
|
|
52
|
-
border-radius: 30px;
|
|
53
|
-
background-color: #FFFFFF;
|
|
54
|
-
}
|
|
55
|
-
.invalid-code[data-v-72decd47] {
|
|
56
|
-
position: absolute;
|
|
57
|
-
width: 300px;
|
|
58
|
-
height: 300px;
|
|
59
|
-
border-radius: 30px;
|
|
60
|
-
background-color: transparent;
|
|
61
|
-
}
|
package/dist/TVAdUnlockView.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TVAdUnlockView.d.ts","sourceRoot":"","sources":["../src/TVAdUnlockView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/TVAdUnlockView.js
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { defineComponent, inject, ref, computed, resolveComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, unref, createBlock, createCommentVNode } from 'vue';
|
|
2
|
-
import { useESToast, useESLocalStorage, useESRuntime, ESKeyCode } from '@extscreen/es3-core';
|
|
3
|
-
import { useESRouter } from '@extscreen/es3-router';
|
|
4
|
-
import { TV_AD_UNLOCK_KEY } from './plugin';
|
|
5
|
-
import { createStorageKeys, useTVAdUnlockStorage, useTVAdUnlock } from './useTVAdUnlock';
|
|
6
|
-
|
|
7
|
-
const _hoisted_1 = { class: "ad-container" };
|
|
8
|
-
const _hoisted_2 = { class: "content" };
|
|
9
|
-
const _hoisted_3 = { class: "title" };
|
|
10
|
-
const _hoisted_4 = { class: "sub-title" };
|
|
11
|
-
const _hoisted_5 = { class: "qrcode-container" };
|
|
12
|
-
const _hoisted_6 = ["src"];
|
|
13
|
-
const _hoisted_7 = ["src"];
|
|
14
|
-
var script = /*@__PURE__*/ defineComponent({
|
|
15
|
-
__name: 'TVAdUnlockView',
|
|
16
|
-
setup(__props, { expose: __expose }) {
|
|
17
|
-
const pluginContext = inject(TV_AD_UNLOCK_KEY);
|
|
18
|
-
const { requestManager, pageConfig: rawPageConfig, trackEvent } = pluginContext;
|
|
19
|
-
const toast = useESToast();
|
|
20
|
-
const storage = useESLocalStorage();
|
|
21
|
-
const router = useESRouter();
|
|
22
|
-
const runtime = useESRuntime();
|
|
23
|
-
const dnum = runtime.getRuntimeDeviceId();
|
|
24
|
-
const packageName = runtime.getESAppName?.() ?? 'unknown';
|
|
25
|
-
const keys = createStorageKeys(packageName);
|
|
26
|
-
const adStorage = useTVAdUnlockStorage(storage, keys);
|
|
27
|
-
const routeOverrides = ref({});
|
|
28
|
-
const routeRuleParams = ref({
|
|
29
|
-
creditsPerAd: 5,
|
|
30
|
-
permanentUnlockAfterTotalAds: 10
|
|
31
|
-
});
|
|
32
|
-
const pageConfig = computed(() => ({
|
|
33
|
-
...rawPageConfig,
|
|
34
|
-
...routeOverrides.value
|
|
35
|
-
}));
|
|
36
|
-
const payParams = ref({
|
|
37
|
-
assetId: '',
|
|
38
|
-
assetName: '',
|
|
39
|
-
fromId: '',
|
|
40
|
-
fromName: ''
|
|
41
|
-
});
|
|
42
|
-
async function handleUnlockSuccess() {
|
|
43
|
-
await adStorage.setTodayUnlocked();
|
|
44
|
-
await adStorage.addCredits(routeRuleParams.value.creditsPerAd);
|
|
45
|
-
const totalAds = await adStorage.incrementTotalAdsWatched();
|
|
46
|
-
await adStorage.incrementTodayAdCount();
|
|
47
|
-
if (totalAds >= routeRuleParams.value.permanentUnlockAfterTotalAds) {
|
|
48
|
-
await adStorage.setPermanentUnlocked();
|
|
49
|
-
}
|
|
50
|
-
trackEvent?.({ type: 'page', name: 'unlock_success' });
|
|
51
|
-
toast.showToast('解锁成功!');
|
|
52
|
-
router.back();
|
|
53
|
-
}
|
|
54
|
-
const { adQrCode, isInvalid, qrCodeState, isLoading, isShowConfirmToast, getAdQrCode, stopPollTvADStatusTimer, stopInvalidTimer, reset } = useTVAdUnlock({
|
|
55
|
-
packageName,
|
|
56
|
-
superRequestBaseUrl: '',
|
|
57
|
-
invalidTimeout: 300000,
|
|
58
|
-
pollInterval: 1000
|
|
59
|
-
}, keys, requestManager, {
|
|
60
|
-
onUnlockSuccess: () => handleUnlockSuccess(),
|
|
61
|
-
onUnlockFailed: (error) => {
|
|
62
|
-
trackEvent?.({ type: 'click', name: 'unlock_failed' });
|
|
63
|
-
},
|
|
64
|
-
onQrCodeInvalid: () => {
|
|
65
|
-
trackEvent?.({ type: 'click', name: 'qr_code_invalid' });
|
|
66
|
-
},
|
|
67
|
-
onQrCodeScanned: () => {
|
|
68
|
-
trackEvent?.({ type: 'click', name: 'qr_code_scanned' });
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
function onKeyDown(event) {
|
|
72
|
-
switch (event.keyCode) {
|
|
73
|
-
case ESKeyCode.ES_KEYCODE_DPAD_CENTER:
|
|
74
|
-
case ESKeyCode.ES_KEYCODE_ENTER:
|
|
75
|
-
if (isInvalid.value || qrCodeState.value === 1) {
|
|
76
|
-
const cfg = pageConfig.value;
|
|
77
|
-
getAdQrCode(dnum, cfg.scanTitle, cfg.scanContent, cfg.scanToast);
|
|
78
|
-
}
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function onESCreate(params) {
|
|
83
|
-
payParams.value = {
|
|
84
|
-
assetId: params.assetId || '',
|
|
85
|
-
assetName: params.assetName || '',
|
|
86
|
-
fromId: params.fromId || '',
|
|
87
|
-
fromName: params.fromName || ''
|
|
88
|
-
};
|
|
89
|
-
if (params.creditsPerAd) {
|
|
90
|
-
routeRuleParams.value.creditsPerAd = parseInt(params.creditsPerAd) || 5;
|
|
91
|
-
}
|
|
92
|
-
if (params.permanentUnlockAfterTotalAds) {
|
|
93
|
-
routeRuleParams.value.permanentUnlockAfterTotalAds = parseInt(params.permanentUnlockAfterTotalAds) || 10;
|
|
94
|
-
}
|
|
95
|
-
const extra = {};
|
|
96
|
-
if (params.title)
|
|
97
|
-
extra.title = params.title;
|
|
98
|
-
if (params.subTitle)
|
|
99
|
-
extra.subTitle = params.subTitle;
|
|
100
|
-
if (params.scanTitle)
|
|
101
|
-
extra.scanTitle = params.scanTitle;
|
|
102
|
-
if (params.scanContent)
|
|
103
|
-
extra.scanContent = params.scanContent;
|
|
104
|
-
if (params.scanToast)
|
|
105
|
-
extra.scanToast = params.scanToast;
|
|
106
|
-
if (params.invalidCodeImage)
|
|
107
|
-
extra.invalidCodeImage = params.invalidCodeImage;
|
|
108
|
-
if (params.scannedCodeImage)
|
|
109
|
-
extra.scannedCodeImage = params.scannedCodeImage;
|
|
110
|
-
routeOverrides.value = extra;
|
|
111
|
-
trackEvent?.({
|
|
112
|
-
type: 'page',
|
|
113
|
-
name: 'ad_page_show',
|
|
114
|
-
assetId: payParams.value.assetId,
|
|
115
|
-
assetName: payParams.value.assetName,
|
|
116
|
-
fromId: payParams.value.fromId,
|
|
117
|
-
fromName: payParams.value.fromName
|
|
118
|
-
});
|
|
119
|
-
const cfg = pageConfig.value;
|
|
120
|
-
getAdQrCode(dnum, cfg.scanTitle, cfg.scanContent, cfg.scanToast);
|
|
121
|
-
}
|
|
122
|
-
function onBackPressed() {
|
|
123
|
-
if (!isShowConfirmToast.value && qrCodeState.value === 1) {
|
|
124
|
-
toast.showToast('广告播放中,请不要关闭弹窗');
|
|
125
|
-
isShowConfirmToast.value = true;
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
stopPollTvADStatusTimer();
|
|
130
|
-
stopInvalidTimer();
|
|
131
|
-
router.back();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function onESDestroy() {
|
|
135
|
-
stopPollTvADStatusTimer();
|
|
136
|
-
stopInvalidTimer();
|
|
137
|
-
}
|
|
138
|
-
__expose({
|
|
139
|
-
onESCreate,
|
|
140
|
-
onKeyDown,
|
|
141
|
-
onBackPressed,
|
|
142
|
-
onESDestroy
|
|
143
|
-
});
|
|
144
|
-
return (_ctx, _cache) => {
|
|
145
|
-
const _component_qt_qr_code = resolveComponent("qt-qr-code");
|
|
146
|
-
return (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
147
|
-
createElementVNode("div", _hoisted_2, [
|
|
148
|
-
_cache[0] || (_cache[0] = createElementVNode("div", { class: "content-bg" }, null, -1 /* CACHED */)),
|
|
149
|
-
createElementVNode("span", _hoisted_3, toDisplayString(pageConfig.value.title), 1 /* TEXT */),
|
|
150
|
-
createElementVNode("span", _hoisted_4, toDisplayString(pageConfig.value.subTitle), 1 /* TEXT */),
|
|
151
|
-
createElementVNode("div", _hoisted_5, [
|
|
152
|
-
(unref(adQrCode) && !unref(isInvalid) && unref(qrCodeState) !== 1)
|
|
153
|
-
? (openBlock(), createBlock(_component_qt_qr_code, {
|
|
154
|
-
key: 0,
|
|
155
|
-
class: "qrcode",
|
|
156
|
-
content: unref(adQrCode)
|
|
157
|
-
}, null, 8 /* PROPS */, ["content"]))
|
|
158
|
-
: createCommentVNode("v-if", true),
|
|
159
|
-
(unref(isInvalid))
|
|
160
|
-
? (openBlock(), createElementBlock("img", {
|
|
161
|
-
key: 1,
|
|
162
|
-
class: "invalid-code",
|
|
163
|
-
src: pageConfig.value.invalidCodeImage
|
|
164
|
-
}, null, 8 /* PROPS */, _hoisted_6))
|
|
165
|
-
: createCommentVNode("v-if", true),
|
|
166
|
-
(unref(qrCodeState) === 1)
|
|
167
|
-
? (openBlock(), createElementBlock("img", {
|
|
168
|
-
key: 2,
|
|
169
|
-
class: "invalid-code",
|
|
170
|
-
src: pageConfig.value.scannedCodeImage
|
|
171
|
-
}, null, 8 /* PROPS */, _hoisted_7))
|
|
172
|
-
: createCommentVNode("v-if", true)
|
|
173
|
-
])
|
|
174
|
-
])
|
|
175
|
-
]));
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
script.__scopeId = "data-v-72decd47";
|
|
181
|
-
script.__file = "src/TVAdUnlockView.vue";
|
|
182
|
-
|
|
183
|
-
export { script as default };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TVAdUnlockView.js","sourceRoot":"","sources":["../src/TVAdUnlockView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/plugin.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { ESRouteType } from '@extscreen/es3-router';
|
|
2
|
-
import TVAdUnlockView from './TVAdUnlockView';
|
|
3
|
-
export const TV_AD_UNLOCK_KEY = Symbol('tvAdUnlock');
|
|
4
|
-
const DEFAULT_PAGE_CONFIG = {
|
|
5
|
-
title: '观看30秒广告 当日解锁',
|
|
6
|
-
subTitle: '手机打开【微信】扫码',
|
|
7
|
-
scanTitle: '观看奖励',
|
|
8
|
-
scanContent: '观看广告后可获得奖励',
|
|
9
|
-
scanToast: '奖励已获得,请前往电视端观看',
|
|
10
|
-
invalidCodeImage: '',
|
|
11
|
-
scannedCodeImage: ''
|
|
12
|
-
};
|
|
13
|
-
export const tvAdUnlockPlugin = {
|
|
14
|
-
install(app, options) {
|
|
15
|
-
const pageConfig = {
|
|
16
|
-
...DEFAULT_PAGE_CONFIG,
|
|
17
|
-
...options.pageConfig
|
|
18
|
-
};
|
|
19
|
-
app.provide(TV_AD_UNLOCK_KEY, {
|
|
20
|
-
requestManager: options.requestManager,
|
|
21
|
-
trackEvent: options.trackEvent,
|
|
22
|
-
pageConfig
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
export function createTVAdRoute() {
|
|
27
|
-
return {
|
|
28
|
-
path: '/ad',
|
|
29
|
-
name: 'ad',
|
|
30
|
-
component: TVAdUnlockView,
|
|
31
|
-
type: ESRouteType.ES_ROUTE_TYPE_DIALOG
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAMnD,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAA2C,MAAM,CAAC,YAAY,CAAC,CAAA;AAE5F,MAAM,mBAAmB,GAAmC;IAC1D,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,gBAAgB;IAC3B,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE;CACrB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,CAAC,GAAQ,EAAE,OAAgC;QAChD,MAAM,UAAU,GAAmC;YACjD,GAAG,mBAAmB;YACtB,GAAG,OAAO,CAAC,UAAU;SACtB,CAAA;QAED,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,WAAW,CAAC,oBAAoB;KACvC,CAAA;AACH,CAAC"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/useTVAdNavigator.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { useESRouter } from '@extscreen/es3-router';
|
|
2
|
-
import { useESLocalStorage } from '@extscreen/es3-core';
|
|
3
|
-
import { createStorageKeys, useTVAdUnlockStorage } from './useTVAdUnlock';
|
|
4
|
-
const DEFAULT_RULES = {
|
|
5
|
-
initialCredits: 5,
|
|
6
|
-
creditsPerAd: 5,
|
|
7
|
-
dailyUnlockEnabled: true,
|
|
8
|
-
permanentUnlockAfterTotalAds: 10
|
|
9
|
-
};
|
|
10
|
-
export function useTVAdNavigator(config) {
|
|
11
|
-
const router = useESRouter();
|
|
12
|
-
const storage = useESLocalStorage();
|
|
13
|
-
const keys = createStorageKeys(config.packageName);
|
|
14
|
-
const adStorage = useTVAdUnlockStorage(storage, keys, config.initialCredits ?? DEFAULT_RULES.initialCredits);
|
|
15
|
-
const rules = {
|
|
16
|
-
initialCredits: config.initialCredits ?? DEFAULT_RULES.initialCredits,
|
|
17
|
-
creditsPerAd: config.creditsPerAd ?? DEFAULT_RULES.creditsPerAd,
|
|
18
|
-
dailyUnlockEnabled: config.dailyUnlockEnabled ?? DEFAULT_RULES.dailyUnlockEnabled,
|
|
19
|
-
permanentUnlockAfterTotalAds: config.permanentUnlockAfterTotalAds ?? DEFAULT_RULES.permanentUnlockAfterTotalAds
|
|
20
|
-
};
|
|
21
|
-
async function consume(amount) {
|
|
22
|
-
const consumed = await adStorage.consumeCredits(amount);
|
|
23
|
-
return { success: consumed > 0, consumed };
|
|
24
|
-
}
|
|
25
|
-
async function consumeAll() {
|
|
26
|
-
return adStorage.consumeAllCredits();
|
|
27
|
-
}
|
|
28
|
-
async function consumeAndNavigate(params) {
|
|
29
|
-
await adStorage.checkDailyReset();
|
|
30
|
-
// 规则①:永久解锁 → 放行
|
|
31
|
-
if (rules.permanentUnlockAfterTotalAds > 0) {
|
|
32
|
-
const permanent = await adStorage.isPermanentlyUnlocked();
|
|
33
|
-
if (permanent)
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
// 规则②:今日已解锁 → 放行
|
|
37
|
-
if (rules.dailyUnlockEnabled) {
|
|
38
|
-
const today = await adStorage.isTodayUnlocked();
|
|
39
|
-
if (today)
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
// 规则③:信用点 > 0 → 扣 1 分,放行
|
|
43
|
-
const credits = await adStorage.getCredits();
|
|
44
|
-
if (credits > 0) {
|
|
45
|
-
await adStorage.consumeCredits(1);
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
// 规则④:兜底 → 弹广告
|
|
49
|
-
router.push({
|
|
50
|
-
name: 'ad',
|
|
51
|
-
params: {
|
|
52
|
-
creditsPerAd: String(rules.creditsPerAd),
|
|
53
|
-
permanentUnlockAfterTotalAds: String(rules.permanentUnlockAfterTotalAds)
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
async function getCredits() {
|
|
59
|
-
return adStorage.getCredits();
|
|
60
|
-
}
|
|
61
|
-
async function isPermanentlyUnlocked() {
|
|
62
|
-
if (rules.permanentUnlockAfterTotalAds <= 0)
|
|
63
|
-
return false;
|
|
64
|
-
return adStorage.isPermanentlyUnlocked();
|
|
65
|
-
}
|
|
66
|
-
async function getTodayAdCount() {
|
|
67
|
-
return adStorage.getTodayAdCount();
|
|
68
|
-
}
|
|
69
|
-
async function addCredits(amount) {
|
|
70
|
-
return adStorage.addCredits(amount);
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
consume,
|
|
74
|
-
consumeAll,
|
|
75
|
-
consumeAndNavigate,
|
|
76
|
-
getCredits,
|
|
77
|
-
isPermanentlyUnlocked,
|
|
78
|
-
getTodayAdCount,
|
|
79
|
-
addCredits
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=useTVAdNavigator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTVAdNavigator.js","sourceRoot":"","sources":["../src/useTVAdNavigator.ts"],"names":[],"mappings":"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"}
|