jyj-components 1.0.8 → 1.0.10

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/README.md CHANGED
@@ -11,6 +11,7 @@
11
11
  - [插屏广告](#2-插屏广告-ad-interstitial)
12
12
  - [激励视频广告](#3-激励视频广告-ad-rewarded-video)
13
13
  - [开屏广告](#4-开屏广告-ad-splash)
14
+ - [h5广告](#h5页面广告)
14
15
  - [注意事项](#注意事项)
15
16
  - [常见问题](#常见问题)
16
17
 
@@ -451,101 +451,22 @@ Component({
451
451
  wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)
452
452
  },
453
453
  lifetimes: {
454
- attached: function () {
455
- var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
456
- var _this = this;
454
+ attached: function attached() {
455
+ var _this = this;
457
456
 
458
- var canUse;
459
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
460
- while (1) {
461
- switch (_context3.prev = _context3.next) {
462
- case 0:
463
- this.calculateAdBannerTop();
464
-
465
- canUse = this.canUseCoverAdAPI();
466
-
467
-
468
- setTimeout(function () {
469
- wx.getShowSplashAdStatus({
470
- success: function () {
471
- var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(res) {
472
- return regeneratorRuntime.wrap(function _callee$(_context) {
473
- while (1) {
474
- switch (_context.prev = _context.next) {
475
- case 0:
476
- if (!(res.status === 'fail' || res.status === 'unknown')) {
477
- _context.next = 6;
478
- break;
479
- }
480
-
481
- _context.next = 3;
482
- return adBase.initAds.call(_this);
483
-
484
- case 3:
485
- _this.startCountDown();
486
- _context.next = 7;
487
- break;
488
-
489
- case 6:
490
- _this.jump();
491
-
492
- case 7:
493
- case 'end':
494
- return _context.stop();
495
- }
496
- }
497
- }, _callee, _this);
498
- }));
499
-
500
- function success(_x) {
501
- return _ref2.apply(this, arguments);
502
- }
503
-
504
- return success;
505
- }(),
506
- fail: function () {
507
- var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(err) {
508
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
509
- while (1) {
510
- switch (_context2.prev = _context2.next) {
511
- case 0:
512
- _context2.next = 2;
513
- return adBase.initAds.call(_this);
514
-
515
- case 2:
516
- _this.startCountDown();
517
-
518
- case 3:
519
- case 'end':
520
- return _context2.stop();
521
- }
522
- }
523
- }, _callee2, _this);
524
- }));
525
-
526
- function fail(_x2) {
527
- return _ref3.apply(this, arguments);
528
- }
529
-
530
- return fail;
531
- }()
532
- });
533
- }, 100);
534
-
535
- case 3:
536
- case 'end':
537
- return _context3.stop();
538
- }
539
- }
540
- }, _callee3, this);
541
- }));
457
+ this.finished = false;
458
+ this.countdownStarted = false;
459
+ this.isDetached = false;
460
+ this.calculateAdBannerTop();
542
461
 
543
- function attached() {
544
- return _ref.apply(this, arguments);
545
- }
546
-
547
- return attached;
548
- }()
462
+ this.statusTimer = setTimeout(function () {
463
+ _this.checkSplashAdStatus();
464
+ }, 100);
465
+ },
466
+ detached: function detached() {
467
+ this.isDetached = true;
468
+ this.clearTimers();
469
+ }
549
470
  },
550
471
  methods: {
551
472
  checkAndResetDaily: function checkAndResetDaily() {
@@ -574,24 +495,176 @@ Component({
574
495
  },
575
496
  adLoad: function adLoad(e) {
576
497
  adBase.adLoad.call(this, e);
498
+ this.startCountDown();
577
499
  },
578
500
  adError: function adError(e) {
501
+ var failedAd = this.data.currentAd;
502
+ var failedIndex = this.data.currentAdIndex;
503
+ var hasFallback = false;
504
+
505
+ this.resetCountDown();
506
+
507
+ if (failedIndex === 0) {
508
+ this.markWxAdFailed();
509
+ this.loadNextAd();
510
+ hasFallback = this.hasSplashAd() && this.data.currentAd !== failedAd;
511
+ } else {
512
+ hasFallback = this.loadNextAvailableSplashAd(failedIndex + 1);
513
+ }
514
+
515
+ if (hasFallback) {
516
+ return;
517
+ }
518
+
579
519
  adBase.adError.call(this, e);
520
+ this.jump();
580
521
  },
581
522
  adOpenMiniProgram: function adOpenMiniProgram() {
582
523
  adBase.adOpenMiniProgram.call(this);
583
524
  },
584
- startCountDown: function startCountDown() {
525
+ checkSplashAdStatus: function checkSplashAdStatus() {
585
526
  var _this2 = this;
586
527
 
528
+ if (this.isDetached) {
529
+ return;
530
+ }
531
+
532
+ if (!this.canUseCoverAdAPI()) {
533
+ this.loadFallbackSplash();
534
+ return;
535
+ }
536
+
537
+ try {
538
+ wx.getShowSplashAdStatus({
539
+ success: function success(res) {
540
+ if (res.status === 'fail') {
541
+ _this2.loadFallbackSplash();
542
+ } else {
543
+ _this2.jump();
544
+ }
545
+ },
546
+ fail: function fail(err) {
547
+ _this2.loadFallbackSplash(err);
548
+ }
549
+ });
550
+ } catch (err) {
551
+ this.loadFallbackSplash(err);
552
+ }
553
+ },
554
+ loadFallbackSplash: function () {
555
+ var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(err) {
556
+ return regeneratorRuntime.wrap(function _callee$(_context) {
557
+ while (1) {
558
+ switch (_context.prev = _context.next) {
559
+ case 0:
560
+ if (err) {
561
+ this.splashStatusError = err;
562
+ }
563
+
564
+ _context.prev = 1;
565
+ _context.next = 4;
566
+ return adBase.initAds.call(this);
567
+
568
+ case 4:
569
+ _context.next = 13;
570
+ break;
571
+
572
+ case 6:
573
+ _context.prev = 6;
574
+ _context.t0 = _context['catch'](1);
575
+
576
+ if (!this.isDetached) {
577
+ _context.next = 10;
578
+ break;
579
+ }
580
+
581
+ return _context.abrupt('return');
582
+
583
+ case 10:
584
+
585
+ this.triggerEvent('adError', _context.t0);
586
+ this.jump();
587
+ return _context.abrupt('return');
588
+
589
+ case 13:
590
+ if (!this.isDetached) {
591
+ _context.next = 15;
592
+ break;
593
+ }
594
+
595
+ return _context.abrupt('return');
596
+
597
+ case 15:
598
+
599
+ if (!this.hasSplashAd()) {
600
+ this.jump();
601
+ }
602
+
603
+ case 16:
604
+ case 'end':
605
+ return _context.stop();
606
+ }
607
+ }
608
+ }, _callee, this, [[1, 6]]);
609
+ }));
610
+
611
+ function loadFallbackSplash(_x) {
612
+ return _ref.apply(this, arguments);
613
+ }
614
+
615
+ return loadFallbackSplash;
616
+ }(),
617
+ loadNextAvailableSplashAd: function loadNextAvailableSplashAd(startIndex) {
618
+ var ads = this.data.ads || [];
619
+
620
+ for (var i = startIndex; i < ads.length; i++) {
621
+ var ad = ads[i];
622
+ if (ad && ad[this.properties.type] !== undefined) {
623
+ this.setData({
624
+ currentAd: ad,
625
+ currentAdIndex: i,
626
+ currentAdShowCount: 0
627
+ });
628
+ this.saveAdState();
629
+ return true;
630
+ }
631
+ }
632
+
633
+ return false;
634
+ },
635
+ hasSplashAd: function hasSplashAd() {
636
+ var ad = this.data.currentAd || {};
637
+ var splash = ad.splash || {};
638
+ return Boolean(splash.unitId || ad.source === 'custom' && splash.material);
639
+ },
640
+ startCountDown: function startCountDown() {
641
+ var _this3 = this;
642
+
643
+ if (this.countdownStarted || this.finished || this.isDetached) {
644
+ return;
645
+ }
646
+
647
+ this.countdownStarted = true;
587
648
  this.interval = setInterval(function () {
588
- _this2.setData({
589
- countDown: _this2.data.countDown - 1
649
+ var countDown = _this3.data.countDown - 1;
650
+ _this3.setData({
651
+ countDown: countDown
590
652
  });
591
- if (_this2.data.countDown === 0) {
592
- _this2.jump();
653
+ if (countDown <= 0) {
654
+ _this3.jump();
593
655
  }
594
- }, 1100);
656
+ }, 1000);
657
+ },
658
+ resetCountDown: function resetCountDown() {
659
+ if (this.interval) {
660
+ clearInterval(this.interval);
661
+ this.interval = null;
662
+ }
663
+
664
+ this.countdownStarted = false;
665
+ this.setData({
666
+ countDown: 5
667
+ });
595
668
  },
596
669
  calculateAdBannerTop: function calculateAdBannerTop() {
597
670
  try {
@@ -612,7 +685,9 @@ Component({
612
685
  this.setData({
613
686
  adBannerTop: topInRpx
614
687
  });
615
- } catch (err) {}
688
+ } catch (err) {
689
+ this.layoutError = err;
690
+ }
616
691
  },
617
692
  compareVersion: function compareVersion(v1, v2) {
618
693
  var s1 = v1.split('.').map(Number);
@@ -629,15 +704,37 @@ Component({
629
704
  },
630
705
  canUseCoverAdAPI: function canUseCoverAdAPI() {
631
706
  var REQUIRED_VERSION = '3.7.8';
632
- var systemInfo = wx.getSystemInfoSync();
633
- var sdkVersion = systemInfo.SDKVersion;
634
- return this.compareVersion(sdkVersion, REQUIRED_VERSION) >= 0;
707
+
708
+ try {
709
+ var systemInfo = wx.getSystemInfoSync();
710
+ var sdkVersion = systemInfo.SDKVersion || '0.0.0';
711
+ return typeof wx.getShowSplashAdStatus === 'function' && this.compareVersion(sdkVersion, REQUIRED_VERSION) >= 0;
712
+ } catch (err) {
713
+ this.coverAdApiError = err;
714
+ return false;
715
+ }
716
+ },
717
+ clearTimers: function clearTimers() {
718
+ if (this.statusTimer) {
719
+ clearTimeout(this.statusTimer);
720
+ this.statusTimer = null;
721
+ }
722
+
723
+ if (this.interval) {
724
+ clearInterval(this.interval);
725
+ this.interval = null;
726
+ }
635
727
  },
636
728
  jump: function jump() {
729
+ if (this.finished || this.isDetached) {
730
+ return;
731
+ }
732
+
733
+ this.finished = true;
734
+ this.clearTimers();
637
735
  this.setData({
638
736
  splashStatus: false
639
737
  });
640
- clearInterval(this.interval);
641
738
  this.adFinished({ detail: { msg: '开屏广告结束' } });
642
739
  },
643
740
  adFinished: function adFinished(e) {
@@ -645,6 +742,7 @@ Component({
645
742
  },
646
743
  adClose: function adClose(e) {
647
744
  this.triggerEvent('adClose', e || { msg: 'ad close' });
745
+ this.jump();
648
746
  }
649
747
  }
650
748
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/mixins/ad-base.js","webpack:///./src/request.js","webpack:///./src/ad-splash/index.js"],"names":["require","getAds","module","exports","checkAndResetDaily","slotId","properties","type","dateKey","today","Date","toDateString","savedDate","wx","getStorageSync","customAdIndexKey","customAdShowCountKey","setStorageSync","restoreAdState","saveAdState","data","currentAdIndex","currentAdShowCount","isWxAdFailed","wxAdFailed","markWxAdFailed","setData","isAllCustomAdsReachedLimit","ads","length","currentIndex","showCount","lastValidAdIndex","i","undefined","ad","maxShowCount","loadNextAd","wxAd","currentAd","report","actionType","source","adId","id","time","getTime","request","url","method","success","fail","adLoad","e","triggerEvent","msg","detail","adError","adOpenMiniProgram","appId","appid","path","navigateToMiniProgram","err","console","error","initAds","pendingRequests","requestCache","Promise","resolve","requestPromise","reject","res","statusCode","Error","errMsg","complete","adBase","Component","String","value","countDown","splashStatus","adBannerTop","lifetimes","attached","calculateAdBannerTop","canUse","canUseCoverAdAPI","setTimeout","getShowSplashAdStatus","status","call","startCountDown","jump","methods","interval","setInterval","menuRect","getMenuButtonBoundingClientRect","systemInfo","getSystemInfoSync","isCustomNavBar","screenHeight","windowHeight","top","bottom","statusBarHeight","topInRpx","windowWidth","compareVersion","v1","v2","s1","split","map","Number","s2","len","Math","max","n1","n2","REQUIRED_VERSION","sdkVersion","SDKVersion","clearInterval","adFinished","adClose"],"mappings":"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","file":"ad-splash\\index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","const {getAds} = require('../request.js')\r\n\r\nmodule.exports = {\r\n // 检查并重置每日数据\r\n checkAndResetDaily() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const dateKey = `adDate_${slotId}_${type}`\r\n\r\n const today = new Date().toDateString()\r\n const savedDate = wx.getStorageSync(dateKey)\r\n\r\n // 如果日期不同,重置所有数据\r\n if (savedDate !== today) {\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n wx.setStorageSync(dateKey, today)\r\n wx.setStorageSync(customAdIndexKey, 1) // 自有广告从索引1开始\r\n wx.setStorageSync(customAdShowCountKey, 0)\r\n\r\n return true // 表示已重置\r\n }\r\n\r\n return false // 表示未重置\r\n },\r\n\r\n restoreAdState() {\r\n // 检查并重置每日数据\r\n this.checkAndResetDaily()\r\n },\r\n\r\n saveAdState() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n // 只保存自有广告的状态(索引>0)\r\n if (this.data.currentAdIndex > 0) {\r\n wx.setStorageSync(customAdIndexKey, this.data.currentAdIndex)\r\n wx.setStorageSync(customAdShowCountKey, this.data.currentAdShowCount)\r\n }\r\n },\r\n\r\n // 检查微信广告是否失败(只在内存中,不持久化)\r\n isWxAdFailed() {\r\n return this.data.wxAdFailed || false\r\n },\r\n\r\n // 标记微信广告失败(只在内存中,不持久化)\r\n markWxAdFailed() {\r\n this.setData({\r\n wxAdFailed: true\r\n })\r\n },\r\n\r\n // 检查所有自有广告是否都达到上限\r\n isAllCustomAdsReachedLimit() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length <= 1) return true // 只有微信广告或没有广告\r\n\r\n const currentIndex = this.data.currentAdIndex\r\n const showCount = this.data.currentAdShowCount\r\n\r\n // 如果当前不是自有广告,返回false\r\n if (currentIndex === 0) return false\r\n\r\n // 找到最后一个有效的自有广告索引\r\n let lastValidAdIndex = -1\r\n for (let i = ads.length - 1; i >= 1; i--) {\r\n if (ads[i][this.properties.type] !== undefined) {\r\n lastValidAdIndex = i\r\n break\r\n }\r\n }\r\n\r\n // 如果没有有效的自有广告,返回true\r\n if (lastValidAdIndex === -1) return true\r\n\r\n // 如果当前索引已经是最后一个有效广告,且达到展示上限,返回true\r\n if (currentIndex === lastValidAdIndex) {\r\n const ad = ads[currentIndex]\r\n const maxShowCount = ad.showCount || 1\r\n return showCount >= maxShowCount\r\n }\r\n\r\n return false\r\n },\r\n\r\n loadNextAd() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length === 0) return\r\n\r\n // 检查并重置每日数据\r\n this.checkAndResetDaily()\r\n\r\n let currentIndex = this.data.currentAdIndex\r\n let showCount = this.data.currentAdShowCount\r\n\r\n // 如果是微信广告(索引0)且未失败,直接加载微信广告\r\n if (currentIndex === 0 && !this.isWxAdFailed()) {\r\n const wxAd = ads[0]\r\n if (wxAd && wxAd[this.properties.type] !== undefined) {\r\n this.setData({currentAd: wxAd})\r\n return\r\n } else {\r\n // 微信广告没有配置,标记为失败,切换到自有广告\r\n this.markWxAdFailed()\r\n currentIndex = 1\r\n showCount = 0\r\n }\r\n }\r\n\r\n // 如果微信广告失败,从自有广告开始\r\n if (currentIndex === 0 && this.isWxAdFailed()) {\r\n // 从存储中恢复自有广告的状态\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n currentIndex = wx.getStorageSync(customAdIndexKey) || 1\r\n showCount = wx.getStorageSync(customAdShowCountKey) || 0\r\n }\r\n\r\n // 如果没有自有广告,不展示任何广告\r\n if (ads.length <= 1) {\r\n return\r\n }\r\n\r\n // 检查所有自有广告是否都达到上限\r\n if (this.isAllCustomAdsReachedLimit()) {\r\n return\r\n }\r\n\r\n // 处理自有广告的展示次数限制\r\n let ad = ads[currentIndex]\r\n const maxShowCount = ad.showCount || 1\r\n\r\n // 如果当前自有广告达到展示上限,切换到下一个\r\n if (showCount >= maxShowCount) {\r\n currentIndex = currentIndex + 1\r\n showCount = 0\r\n\r\n // 如果超出广告列表范围,说明所有广告都达到上限\r\n if (currentIndex >= ads.length) {\r\n return\r\n }\r\n\r\n ad = ads[currentIndex]\r\n }\r\n\r\n // 检查当前广告是否有配置\r\n if (ad[this.properties.type] === undefined) {\r\n // 没有配置,跳过并尝试下一个\r\n this.setData({\r\n currentAdIndex: currentIndex + 1,\r\n currentAdShowCount: 0\r\n })\r\n this.saveAdState()\r\n this.loadNextAd()\r\n return\r\n }\r\n\r\n // 设置当前广告\r\n this.setData({\r\n currentAd: ad,\r\n currentAdIndex: currentIndex,\r\n currentAdShowCount: showCount\r\n })\r\n this.saveAdState()\r\n },\r\n\r\n report(actionType) {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const source = this.data.currentAd.source\r\n const adId = this.data.currentAd.id\r\n const time = new Date().getTime()\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/report?slotId=${slotId}&type=${type}&source=${source}&actionType=${actionType}&adId=${adId}&time=${time}`,\r\n method: 'GET',\r\n success() {},\r\n fail() {}\r\n })\r\n },\r\n\r\n adLoad(e) {\r\n if (e === 'undefined') {\r\n this.triggerEvent('adClose', {msg: '广告加载成功'})\r\n } else {\r\n this.triggerEvent('adLoad', e.detail || {})\r\n }\r\n this.report('load')\r\n\r\n // 只有自有广告(索引>0)才增加展示计数\r\n if (this.data.currentAdIndex > 0) {\r\n const showCount = this.data.currentAdShowCount\r\n this.setData({\r\n currentAdShowCount: showCount + 1\r\n })\r\n this.saveAdState()\r\n }\r\n },\r\n\r\n adError(e) {\r\n // 如果是微信广告(索引0)失败,标记为失败状态\r\n if (this.data.currentAdIndex === 0) {\r\n this.markWxAdFailed()\r\n }\r\n\r\n if (e === 'undefined') {\r\n this.triggerEvent('adError', {msg: 'ad adError'})\r\n } else {\r\n this.triggerEvent('adError', e)\r\n }\r\n },\r\n\r\n adOpenMiniProgram() {\r\n const ad = this.data.currentAd\r\n const appId = ad[this.properties.type].appid || ''\r\n const path = ad[this.properties.type].path || ''\r\n if (appId) {\r\n wx.navigateToMiniProgram({\r\n appId: appId,\r\n path: path,\r\n success: () => {\r\n this.triggerEvent('adOpenMiniProgram', {appId, path})\r\n },\r\n fail: (err) => {\r\n console.error('跳转小程序失败', err)\r\n }\r\n })\r\n }\r\n this.report('click')\r\n },\r\n\r\n async initAds() {\r\n const slotId = this.properties.slotId\r\n const ads = await getAds(slotId)\r\n this.setData({ads})\r\n\r\n // 每次初始化时,总是从微信广告开始(索引0)\r\n this.setData({\r\n currentAdIndex: 0,\r\n currentAdShowCount: 0\r\n })\r\n\r\n this.loadNextAd()\r\n }\r\n}\r\n","const pendingRequests = {}\r\nconst requestCache = {}\r\n\r\nconst getAds = (slotId) => {\r\n if (requestCache[slotId]) {\r\n return Promise.resolve(requestCache[slotId])\r\n }\r\n\r\n if (pendingRequests[slotId]) {\r\n return pendingRequests[slotId]\r\n }\r\n\r\n const requestPromise = new Promise((resolve, reject) => {\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/getads?slotId=${slotId}`,\r\n method: 'GET',\r\n success: (res) => {\r\n if (res.statusCode === 200 && res.data) {\r\n requestCache[slotId] = res.data.data\r\n resolve(res.data.data)\r\n } else {\r\n reject(new Error(`请求失败: ${res.statusCode} - ${res.errMsg}`))\r\n }\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n },\r\n complete: () => {\r\n delete pendingRequests[slotId]\r\n }\r\n })\r\n })\r\n\r\n pendingRequests[slotId] = requestPromise\r\n return requestPromise\r\n}\r\n\r\nmodule.exports = {\r\n getAds\r\n}\r\n","const adBase = require('../mixins/ad-base.js')\r\n\r\nComponent({\r\n properties: {\r\n slotId: String,\r\n type: {\r\n type: String,\r\n value: 'splash'\r\n }\r\n },\r\n data: {\r\n ads: [],\r\n currentAd: {},\r\n currentAdIndex: 0,\r\n currentAdShowCount: 0,\r\n countDown: 5,\r\n splashStatus: true,\r\n adBannerTop: 60,\r\n wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)\r\n },\r\n lifetimes: {\r\n async attached() {\r\n this.calculateAdBannerTop()\r\n\r\n const canUse = this.canUseCoverAdAPI()\r\n\r\n\r\n setTimeout(() => {\r\n wx.getShowSplashAdStatus({\r\n success: async res => {\r\n if (res.status === 'fail' || res.status === 'unknown') {\r\n await adBase.initAds.call(this)\r\n this.startCountDown()\r\n } else {\r\n this.jump()\r\n }\r\n },\r\n fail: async err => {\r\n await adBase.initAds.call(this)\r\n this.startCountDown()\r\n }\r\n })\r\n\r\n }, 100)\r\n }\r\n },\r\n methods: {\r\n checkAndResetDaily() {\r\n return adBase.checkAndResetDaily.call(this)\r\n },\r\n isWxAdFailed() {\r\n return adBase.isWxAdFailed.call(this)\r\n },\r\n markWxAdFailed() {\r\n adBase.markWxAdFailed.call(this)\r\n },\r\n isAllCustomAdsReachedLimit() {\r\n return adBase.isAllCustomAdsReachedLimit.call(this)\r\n },\r\n restoreAdState() {\r\n adBase.restoreAdState.call(this)\r\n },\r\n saveAdState() {\r\n adBase.saveAdState.call(this)\r\n },\r\n loadNextAd() {\r\n adBase.loadNextAd.call(this)\r\n },\r\n report(actionType) {\r\n adBase.report.call(this, actionType)\r\n },\r\n adLoad(e) {\r\n adBase.adLoad.call(this, e)\r\n },\r\n adError(e) {\r\n adBase.adError.call(this, e)\r\n },\r\n adOpenMiniProgram() {\r\n adBase.adOpenMiniProgram.call(this)\r\n },\r\n startCountDown() {\r\n this.interval = setInterval(() => {\r\n this.setData({\r\n countDown: this.data.countDown - 1\r\n })\r\n if (this.data.countDown === 0) {\r\n this.jump()\r\n }\r\n }, 1100)\r\n },\r\n\r\n calculateAdBannerTop() {\r\n try {\r\n const menuRect = wx.getMenuButtonBoundingClientRect();\r\n const systemInfo = wx.getSystemInfoSync();\r\n\r\n const isCustomNavBar = (systemInfo.screenHeight === systemInfo.windowHeight);\r\n\r\n let top\r\n if (isCustomNavBar) {\r\n top = menuRect.bottom + 10\r\n } else {\r\n top = systemInfo.statusBarHeight + 20\r\n }\r\n\r\n const topInRpx = top * 750 / systemInfo.windowWidth\r\n\r\n this.setData({\r\n adBannerTop: topInRpx\r\n })\r\n } catch (err) {\r\n }\r\n },\r\n\r\n compareVersion(v1, v2) {\r\n const s1 = v1.split('.').map(Number);\r\n const s2 = v2.split('.').map(Number);\r\n const len = Math.max(s1.length, s2.length);\r\n\r\n for (let i = 0; i < len; i++) {\r\n const n1 = s1[i] || 0;\r\n const n2 = s2[i] || 0;\r\n if (n1 > n2) return 1;\r\n if (n1 < n2) return -1;\r\n }\r\n return 0;\r\n },\r\n canUseCoverAdAPI() {\r\n const REQUIRED_VERSION = '3.7.8';\r\n const systemInfo = wx.getSystemInfoSync();\r\n const sdkVersion = systemInfo.SDKVersion;\r\n return this.compareVersion(sdkVersion, REQUIRED_VERSION) >= 0;\r\n },\r\n\r\n jump() {\r\n this.setData({\r\n splashStatus: false\r\n })\r\n clearInterval(this.interval)\r\n this.adFinished({detail: {msg: '开屏广告结束'}})\r\n },\r\n\r\n adFinished(e) {\r\n this.triggerEvent('adFinished', e.detail || {msg: 'ad finished'})\r\n },\r\n\r\n adClose(e) {\r\n this.triggerEvent('adClose', e || {msg: 'ad close'})\r\n }\r\n }\r\n})\r\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/mixins/ad-base.js","webpack:///./src/request.js","webpack:///./src/ad-splash/index.js"],"names":["require","getAds","module","exports","checkAndResetDaily","slotId","properties","type","dateKey","today","Date","toDateString","savedDate","wx","getStorageSync","customAdIndexKey","customAdShowCountKey","setStorageSync","restoreAdState","saveAdState","data","currentAdIndex","currentAdShowCount","isWxAdFailed","wxAdFailed","markWxAdFailed","setData","isAllCustomAdsReachedLimit","ads","length","currentIndex","showCount","lastValidAdIndex","i","undefined","ad","maxShowCount","loadNextAd","wxAd","currentAd","report","actionType","source","adId","id","time","getTime","request","url","method","success","fail","adLoad","e","triggerEvent","msg","detail","adError","adOpenMiniProgram","appId","appid","path","navigateToMiniProgram","err","console","error","initAds","pendingRequests","requestCache","Promise","resolve","requestPromise","reject","res","statusCode","Error","errMsg","complete","adBase","Component","String","value","countDown","splashStatus","adBannerTop","lifetimes","attached","finished","countdownStarted","isDetached","calculateAdBannerTop","statusTimer","setTimeout","checkSplashAdStatus","detached","clearTimers","methods","call","startCountDown","failedAd","failedIndex","hasFallback","resetCountDown","hasSplashAd","loadNextAvailableSplashAd","jump","canUseCoverAdAPI","loadFallbackSplash","getShowSplashAdStatus","status","splashStatusError","startIndex","splash","Boolean","unitId","material","interval","setInterval","clearInterval","menuRect","getMenuButtonBoundingClientRect","systemInfo","getSystemInfoSync","isCustomNavBar","screenHeight","windowHeight","top","bottom","statusBarHeight","topInRpx","windowWidth","layoutError","compareVersion","v1","v2","s1","split","map","Number","s2","len","Math","max","n1","n2","REQUIRED_VERSION","sdkVersion","SDKVersion","coverAdApiError","clearTimeout","adFinished","adClose"],"mappings":"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","file":"ad-splash\\index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","const {getAds} = require('../request.js')\r\n\r\nmodule.exports = {\r\n // 检查并重置每日数据\r\n checkAndResetDaily() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const dateKey = `adDate_${slotId}_${type}`\r\n\r\n const today = new Date().toDateString()\r\n const savedDate = wx.getStorageSync(dateKey)\r\n\r\n // 如果日期不同,重置所有数据\r\n if (savedDate !== today) {\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n wx.setStorageSync(dateKey, today)\r\n wx.setStorageSync(customAdIndexKey, 1) // 自有广告从索引1开始\r\n wx.setStorageSync(customAdShowCountKey, 0)\r\n\r\n return true // 表示已重置\r\n }\r\n\r\n return false // 表示未重置\r\n },\r\n\r\n restoreAdState() {\r\n // 检查并重置每日数据\r\n this.checkAndResetDaily()\r\n },\r\n\r\n saveAdState() {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n // 只保存自有广告的状态(索引>0)\r\n if (this.data.currentAdIndex > 0) {\r\n wx.setStorageSync(customAdIndexKey, this.data.currentAdIndex)\r\n wx.setStorageSync(customAdShowCountKey, this.data.currentAdShowCount)\r\n }\r\n },\r\n\r\n // 检查微信广告是否失败(只在内存中,不持久化)\r\n isWxAdFailed() {\r\n return this.data.wxAdFailed || false\r\n },\r\n\r\n // 标记微信广告失败(只在内存中,不持久化)\r\n markWxAdFailed() {\r\n this.setData({\r\n wxAdFailed: true\r\n })\r\n },\r\n\r\n // 检查所有自有广告是否都达到上限\r\n isAllCustomAdsReachedLimit() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length <= 1) return true // 只有微信广告或没有广告\r\n\r\n const currentIndex = this.data.currentAdIndex\r\n const showCount = this.data.currentAdShowCount\r\n\r\n // 如果当前不是自有广告,返回false\r\n if (currentIndex === 0) return false\r\n\r\n // 找到最后一个有效的自有广告索引\r\n let lastValidAdIndex = -1\r\n for (let i = ads.length - 1; i >= 1; i--) {\r\n if (ads[i][this.properties.type] !== undefined) {\r\n lastValidAdIndex = i\r\n break\r\n }\r\n }\r\n\r\n // 如果没有有效的自有广告,返回true\r\n if (lastValidAdIndex === -1) return true\r\n\r\n // 如果当前索引已经是最后一个有效广告,且达到展示上限,返回true\r\n if (currentIndex === lastValidAdIndex) {\r\n const ad = ads[currentIndex]\r\n const maxShowCount = ad.showCount || 1\r\n return showCount >= maxShowCount\r\n }\r\n\r\n return false\r\n },\r\n\r\n loadNextAd() {\r\n const ads = this.data.ads\r\n if (!ads || ads.length === 0) return\r\n\r\n // 检查并重置每日数据\r\n this.checkAndResetDaily()\r\n\r\n let currentIndex = this.data.currentAdIndex\r\n let showCount = this.data.currentAdShowCount\r\n\r\n // 如果是微信广告(索引0)且未失败,直接加载微信广告\r\n if (currentIndex === 0 && !this.isWxAdFailed()) {\r\n const wxAd = ads[0]\r\n if (wxAd && wxAd[this.properties.type] !== undefined) {\r\n this.setData({currentAd: wxAd})\r\n return\r\n } else {\r\n // 微信广告没有配置,标记为失败,切换到自有广告\r\n this.markWxAdFailed()\r\n currentIndex = 1\r\n showCount = 0\r\n }\r\n }\r\n\r\n // 如果微信广告失败,从自有广告开始\r\n if (currentIndex === 0 && this.isWxAdFailed()) {\r\n // 从存储中恢复自有广告的状态\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const customAdIndexKey = `customAdIndex_${slotId}_${type}`\r\n const customAdShowCountKey = `customAdShowCount_${slotId}_${type}`\r\n\r\n currentIndex = wx.getStorageSync(customAdIndexKey) || 1\r\n showCount = wx.getStorageSync(customAdShowCountKey) || 0\r\n }\r\n\r\n // 如果没有自有广告,不展示任何广告\r\n if (ads.length <= 1) {\r\n return\r\n }\r\n\r\n // 检查所有自有广告是否都达到上限\r\n if (this.isAllCustomAdsReachedLimit()) {\r\n return\r\n }\r\n\r\n // 处理自有广告的展示次数限制\r\n let ad = ads[currentIndex]\r\n const maxShowCount = ad.showCount || 1\r\n\r\n // 如果当前自有广告达到展示上限,切换到下一个\r\n if (showCount >= maxShowCount) {\r\n currentIndex = currentIndex + 1\r\n showCount = 0\r\n\r\n // 如果超出广告列表范围,说明所有广告都达到上限\r\n if (currentIndex >= ads.length) {\r\n return\r\n }\r\n\r\n ad = ads[currentIndex]\r\n }\r\n\r\n // 检查当前广告是否有配置\r\n if (ad[this.properties.type] === undefined) {\r\n // 没有配置,跳过并尝试下一个\r\n this.setData({\r\n currentAdIndex: currentIndex + 1,\r\n currentAdShowCount: 0\r\n })\r\n this.saveAdState()\r\n this.loadNextAd()\r\n return\r\n }\r\n\r\n // 设置当前广告\r\n this.setData({\r\n currentAd: ad,\r\n currentAdIndex: currentIndex,\r\n currentAdShowCount: showCount\r\n })\r\n this.saveAdState()\r\n },\r\n\r\n report(actionType) {\r\n const slotId = this.properties.slotId\r\n const type = this.properties.type\r\n const source = this.data.currentAd.source\r\n const adId = this.data.currentAd.id\r\n const time = new Date().getTime()\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/report?slotId=${slotId}&type=${type}&source=${source}&actionType=${actionType}&adId=${adId}&time=${time}`,\r\n method: 'GET',\r\n success() {},\r\n fail() {}\r\n })\r\n },\r\n\r\n adLoad(e) {\r\n if (e === 'undefined') {\r\n this.triggerEvent('adClose', {msg: '广告加载成功'})\r\n } else {\r\n this.triggerEvent('adLoad', e.detail || {})\r\n }\r\n this.report('load')\r\n\r\n // 只有自有广告(索引>0)才增加展示计数\r\n if (this.data.currentAdIndex > 0) {\r\n const showCount = this.data.currentAdShowCount\r\n this.setData({\r\n currentAdShowCount: showCount + 1\r\n })\r\n this.saveAdState()\r\n }\r\n },\r\n\r\n adError(e) {\r\n // 如果是微信广告(索引0)失败,标记为失败状态\r\n if (this.data.currentAdIndex === 0) {\r\n this.markWxAdFailed()\r\n }\r\n\r\n if (e === 'undefined') {\r\n this.triggerEvent('adError', {msg: 'ad adError'})\r\n } else {\r\n this.triggerEvent('adError', e)\r\n }\r\n },\r\n\r\n adOpenMiniProgram() {\r\n const ad = this.data.currentAd\r\n const appId = ad[this.properties.type].appid || ''\r\n const path = ad[this.properties.type].path || ''\r\n if (appId) {\r\n wx.navigateToMiniProgram({\r\n appId: appId,\r\n path: path,\r\n success: () => {\r\n this.triggerEvent('adOpenMiniProgram', {appId, path})\r\n },\r\n fail: (err) => {\r\n console.error('跳转小程序失败', err)\r\n }\r\n })\r\n }\r\n this.report('click')\r\n },\r\n\r\n async initAds() {\r\n const slotId = this.properties.slotId\r\n const ads = await getAds(slotId)\r\n this.setData({ads})\r\n\r\n // 每次初始化时,总是从微信广告开始(索引0)\r\n this.setData({\r\n currentAdIndex: 0,\r\n currentAdShowCount: 0\r\n })\r\n\r\n this.loadNextAd()\r\n }\r\n}\r\n","const pendingRequests = {}\r\nconst requestCache = {}\r\n\r\nconst getAds = (slotId) => {\r\n if (requestCache[slotId]) {\r\n return Promise.resolve(requestCache[slotId])\r\n }\r\n\r\n if (pendingRequests[slotId]) {\r\n return pendingRequests[slotId]\r\n }\r\n\r\n const requestPromise = new Promise((resolve, reject) => {\r\n wx.request({\r\n url: `https://wxgo.adwke.com/api/miniapp/getads?slotId=${slotId}`,\r\n method: 'GET',\r\n success: (res) => {\r\n if (res.statusCode === 200 && res.data) {\r\n requestCache[slotId] = res.data.data\r\n resolve(res.data.data)\r\n } else {\r\n reject(new Error(`请求失败: ${res.statusCode} - ${res.errMsg}`))\r\n }\r\n },\r\n fail: (err) => {\r\n reject(err)\r\n },\r\n complete: () => {\r\n delete pendingRequests[slotId]\r\n }\r\n })\r\n })\r\n\r\n pendingRequests[slotId] = requestPromise\r\n return requestPromise\r\n}\r\n\r\nmodule.exports = {\r\n getAds\r\n}\r\n","const adBase = require('../mixins/ad-base')\n\nComponent({\n properties: {\n slotId: String,\n type: {\n type: String,\n value: 'splash'\n }\n },\n data: {\n ads: [],\n currentAd: {},\n currentAdIndex: 0,\n currentAdShowCount: 0,\n countDown: 5,\n splashStatus: true,\n adBannerTop: 60,\n wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)\n },\n lifetimes: {\n attached() {\n this.finished = false\n this.countdownStarted = false\n this.isDetached = false\n this.calculateAdBannerTop()\n\n this.statusTimer = setTimeout(() => {\n this.checkSplashAdStatus()\n }, 100)\n },\n detached() {\n this.isDetached = true\n this.clearTimers()\n }\n },\n methods: {\n checkAndResetDaily() {\n return adBase.checkAndResetDaily.call(this)\n },\n isWxAdFailed() {\n return adBase.isWxAdFailed.call(this)\n },\n markWxAdFailed() {\n adBase.markWxAdFailed.call(this)\n },\n isAllCustomAdsReachedLimit() {\n return adBase.isAllCustomAdsReachedLimit.call(this)\n },\n restoreAdState() {\n adBase.restoreAdState.call(this)\n },\n saveAdState() {\n adBase.saveAdState.call(this)\n },\n loadNextAd() {\n adBase.loadNextAd.call(this)\n },\n report(actionType) {\n adBase.report.call(this, actionType)\n },\n adLoad(e) {\n adBase.adLoad.call(this, e)\n this.startCountDown()\n },\n adError(e) {\n const failedAd = this.data.currentAd\n const failedIndex = this.data.currentAdIndex\n let hasFallback = false\n\n this.resetCountDown()\n\n if (failedIndex === 0) {\n this.markWxAdFailed()\n this.loadNextAd()\n hasFallback = this.hasSplashAd() && this.data.currentAd !== failedAd\n } else {\n hasFallback = this.loadNextAvailableSplashAd(failedIndex + 1)\n }\n\n if (hasFallback) {\n return\n }\n\n adBase.adError.call(this, e)\n this.jump()\n },\n adOpenMiniProgram() {\n adBase.adOpenMiniProgram.call(this)\n },\n checkSplashAdStatus() {\n if (this.isDetached) {\n return\n }\n\n if (!this.canUseCoverAdAPI()) {\n this.loadFallbackSplash()\n return\n }\n\n try {\n wx.getShowSplashAdStatus({\n success: res => {\n if (res.status === 'fail') {\n this.loadFallbackSplash()\n } else {\n this.jump()\n }\n },\n fail: err => {\n this.loadFallbackSplash(err)\n }\n })\n } catch (err) {\n this.loadFallbackSplash(err)\n }\n },\n\n async loadFallbackSplash(err) {\n if (err) {\n this.splashStatusError = err\n }\n\n try {\n await adBase.initAds.call(this)\n } catch (error) {\n if (this.isDetached) {\n return\n }\n\n this.triggerEvent('adError', error)\n this.jump()\n return\n }\n\n if (this.isDetached) {\n return\n }\n\n if (!this.hasSplashAd()) {\n this.jump()\n }\n },\n\n loadNextAvailableSplashAd(startIndex) {\n const ads = this.data.ads || []\n\n for (let i = startIndex; i < ads.length; i++) {\n const ad = ads[i]\n if (ad && ad[this.properties.type] !== undefined) {\n this.setData({\n currentAd: ad,\n currentAdIndex: i,\n currentAdShowCount: 0\n })\n this.saveAdState()\n return true\n }\n }\n\n return false\n },\n\n hasSplashAd() {\n const ad = this.data.currentAd || {}\n const splash = ad.splash || {}\n return Boolean(splash.unitId || (ad.source === 'custom' && splash.material))\n },\n\n startCountDown() {\n if (this.countdownStarted || this.finished || this.isDetached) {\n return\n }\n\n this.countdownStarted = true\n this.interval = setInterval(() => {\n const countDown = this.data.countDown - 1\n this.setData({\n countDown\n })\n if (countDown <= 0) {\n this.jump()\n }\n }, 1000)\n },\n\n resetCountDown() {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n\n this.countdownStarted = false\n this.setData({\n countDown: 5\n })\n },\n\n calculateAdBannerTop() {\n try {\n const menuRect = wx.getMenuButtonBoundingClientRect()\n const systemInfo = wx.getSystemInfoSync()\n\n const isCustomNavBar = (systemInfo.screenHeight === systemInfo.windowHeight)\n\n let top\n if (isCustomNavBar) {\n top = menuRect.bottom + 10\n } else {\n top = systemInfo.statusBarHeight + 20\n }\n\n const topInRpx = top * 750 / systemInfo.windowWidth\n\n this.setData({\n adBannerTop: topInRpx\n })\n } catch (err) {\n this.layoutError = err\n }\n },\n\n compareVersion(v1, v2) {\n const s1 = v1.split('.').map(Number)\n const s2 = v2.split('.').map(Number)\n const len = Math.max(s1.length, s2.length)\n\n for (let i = 0; i < len; i++) {\n const n1 = s1[i] || 0\n const n2 = s2[i] || 0\n if (n1 > n2) return 1\n if (n1 < n2) return -1\n }\n return 0\n },\n canUseCoverAdAPI() {\n const REQUIRED_VERSION = '3.7.8'\n\n try {\n const systemInfo = wx.getSystemInfoSync()\n const sdkVersion = systemInfo.SDKVersion || '0.0.0'\n return typeof wx.getShowSplashAdStatus === 'function' &&\n this.compareVersion(sdkVersion, REQUIRED_VERSION) >= 0\n } catch (err) {\n this.coverAdApiError = err\n return false\n }\n },\n\n clearTimers() {\n if (this.statusTimer) {\n clearTimeout(this.statusTimer)\n this.statusTimer = null\n }\n\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n },\n\n jump() {\n if (this.finished || this.isDetached) {\n return\n }\n\n this.finished = true\n this.clearTimers()\n this.setData({\n splashStatus: false\n })\n this.adFinished({detail: {msg: '开屏广告结束'}})\n },\n\n adFinished(e) {\n this.triggerEvent('adFinished', e.detail || {msg: 'ad finished'})\n },\n\n adClose(e) {\n this.triggerEvent('adClose', e || {msg: 'ad close'})\n this.jump()\n }\n }\n})\n"],"sourceRoot":""}
@@ -1,4 +1,4 @@
1
- <view wx:if="{{splashStatus && currentAd.splash.unitId}}" class="splash-container">
1
+ <view wx:if="{{splashStatus && currentAd.splash && currentAd.splash.unitId}}" class="splash-container">
2
2
  <view class="ad-banner-top" style="top: {{adBannerTop}}rpx;">
3
3
  <text class="ad-tag">广告</text>
4
4
  <text class="ad-timer">{{countDown}} 秒</text>
@@ -6,3 +6,13 @@
6
6
  </view>
7
7
  <ad-custom style="width: 100%;height: 100vh;padding-top: 0;" unit-id="{{currentAd.splash.unitId}}" bindload="adLoad" binderror="adError" bindclose="adClose"></ad-custom>
8
8
  </view>
9
+ <view wx:elif="{{splashStatus && currentAd.source==='custom' && currentAd.splash && currentAd.splash.material}}" class="splash-container">
10
+ <view class="ad-banner-top" style="top: {{adBannerTop}}rpx;">
11
+ <text class="ad-tag">广告</text>
12
+ <text class="ad-timer">{{countDown}} 秒</text>
13
+ <view class="skip-btn" bindtap="jump">跳过</view>
14
+ </view>
15
+ <view class="splash-fallback" bindtap="adOpenMiniProgram">
16
+ <image class="splash-fallback-image" src="{{currentAd.splash.material}}" mode="aspectFill" bindload="adLoad" binderror="adError" />
17
+ </view>
18
+ </view>
@@ -1,6 +1,8 @@
1
1
  .splash-container {
2
+ position: relative;
2
3
  width: 100vw;
3
4
  height: 100vh;
5
+ overflow: hidden;
4
6
  }
5
7
 
6
8
  .ad-banner-top {
@@ -28,3 +30,14 @@
28
30
  padding: 5rpx 25rpx;
29
31
  border-radius: 20rpx;
30
32
  }
33
+
34
+ .splash-fallback {
35
+ width: 100%;
36
+ height: 100%;
37
+ }
38
+
39
+ .splash-fallback-image {
40
+ width: 100%;
41
+ height: 100%;
42
+ display: block;
43
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jyj-components",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "微信小程序广告组件库",
5
5
  "main": "miniprogram_dist/index.js",
6
6
  "miniprogram": "miniprogram_dist",
@@ -1,151 +1,284 @@
1
- const adBase = require('../mixins/ad-base.js')
2
-
3
- Component({
4
- properties: {
5
- slotId: String,
6
- type: {
7
- type: String,
8
- value: 'splash'
9
- }
10
- },
11
- data: {
12
- ads: [],
13
- currentAd: {},
14
- currentAdIndex: 0,
15
- currentAdShowCount: 0,
16
- countDown: 5,
17
- splashStatus: true,
18
- adBannerTop: 60,
19
- wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)
20
- },
21
- lifetimes: {
22
- async attached() {
23
- this.calculateAdBannerTop()
24
-
25
- const canUse = this.canUseCoverAdAPI()
26
-
27
-
28
- setTimeout(() => {
29
- wx.getShowSplashAdStatus({
30
- success: async res => {
31
- if (res.status === 'fail' || res.status === 'unknown') {
32
- await adBase.initAds.call(this)
33
- this.startCountDown()
34
- } else {
35
- this.jump()
36
- }
37
- },
38
- fail: async err => {
39
- await adBase.initAds.call(this)
40
- this.startCountDown()
41
- }
42
- })
43
-
44
- }, 100)
45
- }
46
- },
47
- methods: {
48
- checkAndResetDaily() {
49
- return adBase.checkAndResetDaily.call(this)
50
- },
51
- isWxAdFailed() {
52
- return adBase.isWxAdFailed.call(this)
53
- },
54
- markWxAdFailed() {
55
- adBase.markWxAdFailed.call(this)
56
- },
57
- isAllCustomAdsReachedLimit() {
58
- return adBase.isAllCustomAdsReachedLimit.call(this)
59
- },
60
- restoreAdState() {
61
- adBase.restoreAdState.call(this)
62
- },
63
- saveAdState() {
64
- adBase.saveAdState.call(this)
65
- },
66
- loadNextAd() {
67
- adBase.loadNextAd.call(this)
68
- },
69
- report(actionType) {
70
- adBase.report.call(this, actionType)
71
- },
72
- adLoad(e) {
73
- adBase.adLoad.call(this, e)
74
- },
75
- adError(e) {
76
- adBase.adError.call(this, e)
77
- },
78
- adOpenMiniProgram() {
79
- adBase.adOpenMiniProgram.call(this)
80
- },
81
- startCountDown() {
82
- this.interval = setInterval(() => {
83
- this.setData({
84
- countDown: this.data.countDown - 1
85
- })
86
- if (this.data.countDown === 0) {
87
- this.jump()
88
- }
89
- }, 1100)
90
- },
91
-
92
- calculateAdBannerTop() {
93
- try {
94
- const menuRect = wx.getMenuButtonBoundingClientRect();
95
- const systemInfo = wx.getSystemInfoSync();
96
-
97
- const isCustomNavBar = (systemInfo.screenHeight === systemInfo.windowHeight);
98
-
99
- let top
100
- if (isCustomNavBar) {
101
- top = menuRect.bottom + 10
102
- } else {
103
- top = systemInfo.statusBarHeight + 20
104
- }
105
-
106
- const topInRpx = top * 750 / systemInfo.windowWidth
107
-
108
- this.setData({
109
- adBannerTop: topInRpx
110
- })
111
- } catch (err) {
112
- }
113
- },
114
-
115
- compareVersion(v1, v2) {
116
- const s1 = v1.split('.').map(Number);
117
- const s2 = v2.split('.').map(Number);
118
- const len = Math.max(s1.length, s2.length);
119
-
120
- for (let i = 0; i < len; i++) {
121
- const n1 = s1[i] || 0;
122
- const n2 = s2[i] || 0;
123
- if (n1 > n2) return 1;
124
- if (n1 < n2) return -1;
125
- }
126
- return 0;
127
- },
128
- canUseCoverAdAPI() {
129
- const REQUIRED_VERSION = '3.7.8';
130
- const systemInfo = wx.getSystemInfoSync();
131
- const sdkVersion = systemInfo.SDKVersion;
132
- return this.compareVersion(sdkVersion, REQUIRED_VERSION) >= 0;
133
- },
134
-
135
- jump() {
136
- this.setData({
137
- splashStatus: false
138
- })
139
- clearInterval(this.interval)
140
- this.adFinished({detail: {msg: '开屏广告结束'}})
141
- },
142
-
143
- adFinished(e) {
144
- this.triggerEvent('adFinished', e.detail || {msg: 'ad finished'})
145
- },
146
-
147
- adClose(e) {
148
- this.triggerEvent('adClose', e || {msg: 'ad close'})
149
- }
150
- }
151
- })
1
+ const adBase = require('../mixins/ad-base')
2
+
3
+ Component({
4
+ properties: {
5
+ slotId: String,
6
+ type: {
7
+ type: String,
8
+ value: 'splash'
9
+ }
10
+ },
11
+ data: {
12
+ ads: [],
13
+ currentAd: {},
14
+ currentAdIndex: 0,
15
+ currentAdShowCount: 0,
16
+ countDown: 5,
17
+ splashStatus: true,
18
+ adBannerTop: 60,
19
+ wxAdFailed: false // 微信广告失败标记(仅内存,不持久化)
20
+ },
21
+ lifetimes: {
22
+ attached() {
23
+ this.finished = false
24
+ this.countdownStarted = false
25
+ this.isDetached = false
26
+ this.calculateAdBannerTop()
27
+
28
+ this.statusTimer = setTimeout(() => {
29
+ this.checkSplashAdStatus()
30
+ }, 100)
31
+ },
32
+ detached() {
33
+ this.isDetached = true
34
+ this.clearTimers()
35
+ }
36
+ },
37
+ methods: {
38
+ checkAndResetDaily() {
39
+ return adBase.checkAndResetDaily.call(this)
40
+ },
41
+ isWxAdFailed() {
42
+ return adBase.isWxAdFailed.call(this)
43
+ },
44
+ markWxAdFailed() {
45
+ adBase.markWxAdFailed.call(this)
46
+ },
47
+ isAllCustomAdsReachedLimit() {
48
+ return adBase.isAllCustomAdsReachedLimit.call(this)
49
+ },
50
+ restoreAdState() {
51
+ adBase.restoreAdState.call(this)
52
+ },
53
+ saveAdState() {
54
+ adBase.saveAdState.call(this)
55
+ },
56
+ loadNextAd() {
57
+ adBase.loadNextAd.call(this)
58
+ },
59
+ report(actionType) {
60
+ adBase.report.call(this, actionType)
61
+ },
62
+ adLoad(e) {
63
+ adBase.adLoad.call(this, e)
64
+ this.startCountDown()
65
+ },
66
+ adError(e) {
67
+ const failedAd = this.data.currentAd
68
+ const failedIndex = this.data.currentAdIndex
69
+ let hasFallback = false
70
+
71
+ this.resetCountDown()
72
+
73
+ if (failedIndex === 0) {
74
+ this.markWxAdFailed()
75
+ this.loadNextAd()
76
+ hasFallback = this.hasSplashAd() && this.data.currentAd !== failedAd
77
+ } else {
78
+ hasFallback = this.loadNextAvailableSplashAd(failedIndex + 1)
79
+ }
80
+
81
+ if (hasFallback) {
82
+ return
83
+ }
84
+
85
+ adBase.adError.call(this, e)
86
+ this.jump()
87
+ },
88
+ adOpenMiniProgram() {
89
+ adBase.adOpenMiniProgram.call(this)
90
+ },
91
+ checkSplashAdStatus() {
92
+ if (this.isDetached) {
93
+ return
94
+ }
95
+
96
+ if (!this.canUseCoverAdAPI()) {
97
+ this.loadFallbackSplash()
98
+ return
99
+ }
100
+
101
+ try {
102
+ wx.getShowSplashAdStatus({
103
+ success: res => {
104
+ if (res.status === 'fail') {
105
+ this.loadFallbackSplash()
106
+ } else {
107
+ this.jump()
108
+ }
109
+ },
110
+ fail: err => {
111
+ this.loadFallbackSplash(err)
112
+ }
113
+ })
114
+ } catch (err) {
115
+ this.loadFallbackSplash(err)
116
+ }
117
+ },
118
+
119
+ async loadFallbackSplash(err) {
120
+ if (err) {
121
+ this.splashStatusError = err
122
+ }
123
+
124
+ try {
125
+ await adBase.initAds.call(this)
126
+ } catch (error) {
127
+ if (this.isDetached) {
128
+ return
129
+ }
130
+
131
+ this.triggerEvent('adError', error)
132
+ this.jump()
133
+ return
134
+ }
135
+
136
+ if (this.isDetached) {
137
+ return
138
+ }
139
+
140
+ if (!this.hasSplashAd()) {
141
+ this.jump()
142
+ }
143
+ },
144
+
145
+ loadNextAvailableSplashAd(startIndex) {
146
+ const ads = this.data.ads || []
147
+
148
+ for (let i = startIndex; i < ads.length; i++) {
149
+ const ad = ads[i]
150
+ if (ad && ad[this.properties.type] !== undefined) {
151
+ this.setData({
152
+ currentAd: ad,
153
+ currentAdIndex: i,
154
+ currentAdShowCount: 0
155
+ })
156
+ this.saveAdState()
157
+ return true
158
+ }
159
+ }
160
+
161
+ return false
162
+ },
163
+
164
+ hasSplashAd() {
165
+ const ad = this.data.currentAd || {}
166
+ const splash = ad.splash || {}
167
+ return Boolean(splash.unitId || (ad.source === 'custom' && splash.material))
168
+ },
169
+
170
+ startCountDown() {
171
+ if (this.countdownStarted || this.finished || this.isDetached) {
172
+ return
173
+ }
174
+
175
+ this.countdownStarted = true
176
+ this.interval = setInterval(() => {
177
+ const countDown = this.data.countDown - 1
178
+ this.setData({
179
+ countDown
180
+ })
181
+ if (countDown <= 0) {
182
+ this.jump()
183
+ }
184
+ }, 1000)
185
+ },
186
+
187
+ resetCountDown() {
188
+ if (this.interval) {
189
+ clearInterval(this.interval)
190
+ this.interval = null
191
+ }
192
+
193
+ this.countdownStarted = false
194
+ this.setData({
195
+ countDown: 5
196
+ })
197
+ },
198
+
199
+ calculateAdBannerTop() {
200
+ try {
201
+ const menuRect = wx.getMenuButtonBoundingClientRect()
202
+ const systemInfo = wx.getSystemInfoSync()
203
+
204
+ const isCustomNavBar = (systemInfo.screenHeight === systemInfo.windowHeight)
205
+
206
+ let top
207
+ if (isCustomNavBar) {
208
+ top = menuRect.bottom + 10
209
+ } else {
210
+ top = systemInfo.statusBarHeight + 20
211
+ }
212
+
213
+ const topInRpx = top * 750 / systemInfo.windowWidth
214
+
215
+ this.setData({
216
+ adBannerTop: topInRpx
217
+ })
218
+ } catch (err) {
219
+ this.layoutError = err
220
+ }
221
+ },
222
+
223
+ compareVersion(v1, v2) {
224
+ const s1 = v1.split('.').map(Number)
225
+ const s2 = v2.split('.').map(Number)
226
+ const len = Math.max(s1.length, s2.length)
227
+
228
+ for (let i = 0; i < len; i++) {
229
+ const n1 = s1[i] || 0
230
+ const n2 = s2[i] || 0
231
+ if (n1 > n2) return 1
232
+ if (n1 < n2) return -1
233
+ }
234
+ return 0
235
+ },
236
+ canUseCoverAdAPI() {
237
+ const REQUIRED_VERSION = '3.7.8'
238
+
239
+ try {
240
+ const systemInfo = wx.getSystemInfoSync()
241
+ const sdkVersion = systemInfo.SDKVersion || '0.0.0'
242
+ return typeof wx.getShowSplashAdStatus === 'function' &&
243
+ this.compareVersion(sdkVersion, REQUIRED_VERSION) >= 0
244
+ } catch (err) {
245
+ this.coverAdApiError = err
246
+ return false
247
+ }
248
+ },
249
+
250
+ clearTimers() {
251
+ if (this.statusTimer) {
252
+ clearTimeout(this.statusTimer)
253
+ this.statusTimer = null
254
+ }
255
+
256
+ if (this.interval) {
257
+ clearInterval(this.interval)
258
+ this.interval = null
259
+ }
260
+ },
261
+
262
+ jump() {
263
+ if (this.finished || this.isDetached) {
264
+ return
265
+ }
266
+
267
+ this.finished = true
268
+ this.clearTimers()
269
+ this.setData({
270
+ splashStatus: false
271
+ })
272
+ this.adFinished({detail: {msg: '开屏广告结束'}})
273
+ },
274
+
275
+ adFinished(e) {
276
+ this.triggerEvent('adFinished', e.detail || {msg: 'ad finished'})
277
+ },
278
+
279
+ adClose(e) {
280
+ this.triggerEvent('adClose', e || {msg: 'ad close'})
281
+ this.jump()
282
+ }
283
+ }
284
+ })
@@ -1,4 +1,4 @@
1
- <view wx:if="{{splashStatus && currentAd.splash.unitId}}" class="splash-container">
1
+ <view wx:if="{{splashStatus && currentAd.splash && currentAd.splash.unitId}}" class="splash-container">
2
2
  <view class="ad-banner-top" style="top: {{adBannerTop}}rpx;">
3
3
  <text class="ad-tag">广告</text>
4
4
  <text class="ad-timer">{{countDown}} 秒</text>
@@ -6,3 +6,13 @@
6
6
  </view>
7
7
  <ad-custom style="width: 100%;height: 100vh;padding-top: 0;" unit-id="{{currentAd.splash.unitId}}" bindload="adLoad" binderror="adError" bindclose="adClose"></ad-custom>
8
8
  </view>
9
+ <view wx:elif="{{splashStatus && currentAd.source==='custom' && currentAd.splash && currentAd.splash.material}}" class="splash-container">
10
+ <view class="ad-banner-top" style="top: {{adBannerTop}}rpx;">
11
+ <text class="ad-tag">广告</text>
12
+ <text class="ad-timer">{{countDown}} 秒</text>
13
+ <view class="skip-btn" bindtap="jump">跳过</view>
14
+ </view>
15
+ <view class="splash-fallback" bindtap="adOpenMiniProgram">
16
+ <image class="splash-fallback-image" src="{{currentAd.splash.material}}" mode="aspectFill" bindload="adLoad" binderror="adError" />
17
+ </view>
18
+ </view>
@@ -1,6 +1,8 @@
1
1
  .splash-container {
2
+ position: relative;
2
3
  width: 100vw;
3
4
  height: 100vh;
5
+ overflow: hidden;
4
6
  }
5
7
 
6
8
  .ad-banner-top {
@@ -28,3 +30,14 @@
28
30
  padding: 5rpx 25rpx;
29
31
  border-radius: 20rpx;
30
32
  }
33
+
34
+ .splash-fallback {
35
+ width: 100%;
36
+ height: 100%;
37
+ }
38
+
39
+ .splash-fallback-image {
40
+ width: 100%;
41
+ height: 100%;
42
+ display: block;
43
+ }