123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877 |
- "use strict";
- cc._RF.push(module, '1da79n1bmJN5qrv/yL2wYbA', 'FBAdManager');
- // common-plugin/Scripts/FaceBookSdk/FBAdManager.ts
- "use strict";
- // fb文档 https://developers.facebook.com/docs/games/instant-games/sdk/fbinstant6.3
- // 使用的话,直接看广告管理器 FBAdManager
- /*
- 使用步骤
- * 1. addXXXXAd() 添加相应的广告,以及预加载的数量(默认为3)
- * 1.1. 插屏 addInterstitial
- * 1.2. 激励视频 addRewardedVideo
- * 1.3. banner addBanner
- * 2. loadAll() 预加载所有广告实例
- * 3. isXXXReady() 检查是否可以播放
- * 3.1. 插屏 isInterstitialAdReady
- * 3.2. 激励视频 isRewardedVideoReady
- * 3.3. banner isBannerReady
- * 4. showXXXAsync() 播放广告,并检查播放状态
- * 4.1. 插屏 showInterstitialAd
- * 4.2. 激励视频 showRewardedVideo
- * 4.3. banner showBannerAsync
- * 5. hideXXXAsync() 隐藏广告(banner专属)
- * 5.1. 插屏 不需要
- * 5.2. 激励视频 不需要
- * 5.3. banner hideBannerAsync
- * 其他:
- * 6. 判断是否支持特定api
- * 6.1 判断是否支持banner广告
- //
- */
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- var __generator = (this && this.__generator) || function (thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var Utils_1 = require("../Utils");
- var FB_MAX_AD_INSTANCE = 3; // FB允许的最多广告实例数量
- var FB_INIT_AD_COUNT = 3; // 预加载的广告实例数量
- var FB_BANNER_REFRESH_INTERVAL = 30 + 10; // FB: Banner广告有播放间隔限制 30 seconds (由于网络原因,需要多加一点时间)
- var FB_INTERSTITIAL_REFRESH_INTERVAL = 30 + 10; // FB: 插屏广告有播放间隔限制
- var FB_REWARDED_VIDEO_REFRESH_INTERVAL = 0; // FB: 激励视频没有播放间隔限制
- var FB_MAX_BANNER_ERROR = 1; // banner加载连续出现N次错误后,终止加载
- var FB_MAX_INTERSTITIAL_ERROR = 3; // 插屏加载连续出现N次错误后,终止加载
- var FB_MAX_REWARDED_VIDEO_ERROR = 3; // 激励视频加载连续出现N次错误后,终止加载
- var FB_AUTO_LOAD_ON_PLAY = true; // 插屏、激励视频是否在播放完毕后自动加载
- var FB_AUTO_RELOAD_DELAY = 1; // 自动重新加载时,延迟加载等待的时间
- var FB_AD_DELAY_FOR_FIRST_BANNER = 0; // 首个banner广告延迟N秒显示
- var FB_AD_DELAY_FOR_FIRST_INTERSTITIAL = 30; // 首个插屏广告需要延迟30秒播放(避免游戏前30秒就播放广告)
- var FB_AD_DELAY_FOR_FIRST_REWARDED_VIDEO = 0; // 首个激励视频广告延迟N秒显示
- var FB_AD_TYPE;
- (function (FB_AD_TYPE) {
- FB_AD_TYPE[FB_AD_TYPE["INTERSTITIAL"] = 0] = "INTERSTITIAL";
- FB_AD_TYPE[FB_AD_TYPE["REWARDED_VIDEO"] = 1] = "REWARDED_VIDEO";
- FB_AD_TYPE[FB_AD_TYPE["BANNER"] = 2] = "BANNER";
- })(FB_AD_TYPE || (FB_AD_TYPE = {}));
- var FB_AD_STATE;
- (function (FB_AD_STATE) {
- FB_AD_STATE[FB_AD_STATE["NONE"] = 0] = "NONE";
- FB_AD_STATE[FB_AD_STATE["NEW"] = 1] = "NEW";
- FB_AD_STATE[FB_AD_STATE["LOADING"] = 2] = "LOADING";
- FB_AD_STATE[FB_AD_STATE["LOADED"] = 3] = "LOADED";
- FB_AD_STATE[FB_AD_STATE["PLAYING"] = 4] = "PLAYING";
- })(FB_AD_STATE || (FB_AD_STATE = {}));
- function getStateName(state) {
- var str = "NONE";
- switch (state) {
- case FB_AD_STATE.NEW:
- str = "NEW";
- break;
- case FB_AD_STATE.LOADING:
- str = "LOADING";
- break;
- case FB_AD_STATE.LOADED:
- str = "LOADED";
- break;
- case FB_AD_STATE.PLAYING:
- str = "PLAYING";
- break;
- }
- return str;
- }
- function waitTimeSecond(timeoutSecond, callback) {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- return [2 /*return*/, new Promise(function (resolve, reject) {
- setTimeout(function () {
- if (callback) {
- callback();
- }
- resolve();
- }, timeoutSecond * 1000);
- })];
- });
- });
- }
- var ErrorTooManyAdInstance = {
- code: "EXCEED_MAX_AD_INSTANCE",
- message: "广告对象不允许超过 " + FB_MAX_AD_INSTANCE
- };
- var ErrorNoReadyAdInstance = {
- code: "NO_READY_AD_INSTANCE",
- message: "没有加载完毕的广告,或者广告播放太频繁"
- };
- var ErrorNotReadyForLoad = {
- code: "NOT_READY_FOR_LOAD",
- message: "当前状态不允许再次加载"
- };
- var ErrorAdIsLoading = {
- code: "AD_IS_LOADING",
- message: "广告正在加载"
- };
- var ErrorNotReadyForPlay = {
- code: "NOT_READY_FOR_PLAYING",
- message: "没有可以播放的广告"
- };
- var ErrorAdIsPlaying = {
- code: "AD_IS_PLAYING",
- message: "广告正在播放"
- };
- var ErrorNoBannerAdInstance = {
- code: "NO_BANNER_AD",
- message: "没有添加Banner广告"
- };
- var ErrorApiNotSupport = {
- code: "API_NOT_SUPPORT",
- message: "广告接口不支持"
- };
- var ErrorTooFastShow = {
- code: "TOO_FAST_SHOW",
- message: "广告播放太频繁"
- };
- var ErrorNotPlaying = {
- code: "NOT_PLAYING",
- message: "广告没有播放"
- };
- var ErrorTooManyErrors = {
- code: "TOO_MANY_ERRORS",
- message: "太多错误, 停止操作"
- };
- var FB_API_BANNER = "loadBannerAdAsync";
- var FB_ERROR_CODE_RATE_LIMITED = "RATE_LIMITED";
- var FB_ERROR_CLIENT_UNSUPPORTED_OPERATION = "CLIENT_UNSUPPORTED_OPERATION";
- var FB_ERROR_ADS_NO_FILL = "ADS_NO_FILL";
- function getOption(opt, key, defaultValue) {
- if (opt && typeof (opt[key]) != "undefined") {
- return opt[key];
- }
- return defaultValue;
- }
- // 广告计时器
- var AdTimer = /** @class */ (function () {
- function AdTimer(interval, delay) {
- this._lastShowTime = 0; // 上次显示时间
- this._refreshInterval = 0; // 刷新间隔, <=0 表示无限制
- this._refreshInterval = interval > 0 ? interval : 0;
- this._lastShowTime = 0;
- if (delay > 0) {
- this._lastShowTime = Date.now() + delay * 1000 - this._refreshInterval * 1000;
- }
- }
- AdTimer.prototype.isReadyToRefresh = function () {
- return this.getNextRefreshInterval() <= 0;
- };
- AdTimer.prototype.getNextRefreshInterval = function () {
- var refreshInterval = 0;
- if (this._refreshInterval > 0 && this._lastShowTime > 0) {
- var currentTime = Date.now();
- refreshInterval = this._refreshInterval - (currentTime - this._lastShowTime) / 1000;
- }
- return refreshInterval;
- };
- AdTimer.prototype.updateLastShowTime = function () {
- this._lastShowTime = Date.now();
- };
- return AdTimer;
- }());
- var FBAdUnitBase = /** @class */ (function () {
- function FBAdUnitBase(id, type, sharedTimer, opt) {
- // protected _lastShowTime:number = 0; // 上次显示时间
- // protected _refreshInterval:number = 0; // 刷新间隔, <=0 表示无限制
- this._maxLoadError = 0;
- this._errorCounter = 0;
- this._fatalError = false;
- this._sharedTimer = null;
- this._adId = id;
- this._state = FB_AD_STATE.NONE;
- this._type = type;
- this._sharedTimer = sharedTimer;
- this._fatalError = false;
- Utils_1.utils.showLog(!!sharedTimer, "sharedTimer is invalid", sharedTimer);
- // this._refreshInterval = getOption(opt, "refreshInterval", 0);
- this._maxLoadError = getOption(opt, "maxLoadError", 0);
- // const delayForFirstAd = getOption(opt, "delayForFirstAd", 0);
- // if(delayForFirstAd > 0) {
- // this._lastShowTime = Date.now() + delayForFirstAd * 1000 - this._refreshInterval * 1000;
- // }else{
- // this._lastShowTime = 0;
- // }
- }
- FBAdUnitBase.prototype.getStateName = function () {
- return getStateName(this._state);
- };
- FBAdUnitBase.prototype.getAdTypeName = function () {
- if (this._type == FB_AD_TYPE.INTERSTITIAL) {
- return "插屏广告";
- }
- if (this._type == FB_AD_TYPE.REWARDED_VIDEO) {
- return "激励视频广告";
- }
- if (this._type == FB_AD_TYPE.BANNER) {
- return "Banner";
- }
- return "UNKNOWN";
- };
- FBAdUnitBase.prototype.getInfo = function () {
- return "[" + this.getAdTypeName() + ":" + this._adId + ":" + this.getStateName() + "]";
- };
- FBAdUnitBase.prototype.isReadyToRefresh = function () {
- // return this.getNextRefreshInterval() <= 0;
- return this._sharedTimer.isReadyToRefresh();
- };
- FBAdUnitBase.prototype.getNextRefreshInterval = function () {
- return this._sharedTimer.getNextRefreshInterval();
- };
- FBAdUnitBase.prototype.updateLastShowTime = function () {
- this._sharedTimer.updateLastShowTime();
- };
- FBAdUnitBase.prototype.increaseErrorCounter = function () {
- this._errorCounter++;
- };
- FBAdUnitBase.prototype.resetErrorCounter = function () {
- this._errorCounter = 0;
- };
- FBAdUnitBase.prototype.setFatalError = function () {
- this._fatalError = true;
- };
- FBAdUnitBase.prototype.isErrorTooMany = function () {
- return this._fatalError || (this._maxLoadError > 0 && this._errorCounter >= this._maxLoadError);
- };
- return FBAdUnitBase;
- }());
- // 有状态的广告对象
- var FBStatefulAdUnit = /** @class */ (function (_super) {
- __extends(FBStatefulAdUnit, _super);
- function FBStatefulAdUnit(id, type, sharedTimer, opt) {
- var _this = _super.call(this, id, type, sharedTimer, opt) || this;
- _this._adInstance = null;
- _this._autoLoadOnPlay = getOption(opt, "autoLoadOnPlay", false);
- return _this;
- }
- // 预加载广告
- FBStatefulAdUnit.prototype.loadAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var _a, e_1, delayTime;
- return __generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- if (!(this._adInstance == null)) return [3 /*break*/, 4];
- if (!(this._state == FB_AD_STATE.NONE)) return [3 /*break*/, 2];
- // 只能创建一次
- this._state = FB_AD_STATE.NEW;
- Utils_1.utils.showLog("获取广告对象: " + this.getInfo());
- _a = this;
- return [4 /*yield*/, this.createAdInstanceAsync(this._adId)];
- case 1:
- _a._adInstance = _b.sent();
- return [3 /*break*/, 3];
- case 2:
- // 已经在创建对象了 (new-ing)
- Utils_1.utils.showLog("当前状态未满足加载条件, 正在获取广告对象: " + this.getInfo());
- return [2 /*return*/];
- case 3: return [3 /*break*/, 4];
- case 4:
- // [2] 检查是否满足预加载条件
- if (this._state != FB_AD_STATE.NEW) {
- // 只有 NEW 状态才能进行加载
- Utils_1.utils.showLog("当前状态未满足加载条件: " + this.getInfo());
- if (this._state == FB_AD_STATE.LOADING) {
- Utils_1.utils.showLog("广告正在加载中,不要重复加载" + this.getInfo());
- throw ErrorAdIsLoading;
- }
- else {
- throw ErrorNotReadyForLoad;
- }
- }
- if (this.isErrorTooMany()) {
- Utils_1.utils.showLog("太多错误,停止加载: " + this.getInfo());
- throw ErrorTooManyErrors;
- }
- _b.label = 5;
- case 5:
- _b.trys.push([5, 7, , 8]);
- // [3] 加载广告
- // 设置为加载中
- this._state = FB_AD_STATE.LOADING;
- Utils_1.utils.showLog("开始加载广告: " + this.getInfo());
- return [4 /*yield*/, this._adInstance.loadAsync()];
- case 6:
- _b.sent();
- // [4] 成功加载
- this._state = FB_AD_STATE.LOADED;
- this.resetErrorCounter();
- Utils_1.utils.showLog("广告加载成功: " + this.getInfo());
- return [2 /*return*/, true];
- case 7:
- e_1 = _b.sent();
- // [5] 加载失败
- // 异常能正常进入promise的catch分支
- // 加载失败,不需要重置 adInstance
- // this._adInstance = null;
- // 状态回退到加载前
- Utils_1.utils.showLog("广告加载失败: " + this.getInfo(), e_1);
- if (e_1.code == FB_ERROR_ADS_NO_FILL) {
- // 遇到 NOT FILL错误,就不能再继续加载了
- Utils_1.utils.showLog("广告无法填充,不再继续请求: " + this.getInfo());
- this.setFatalError();
- }
- else {
- this.increaseErrorCounter();
- this._state = FB_AD_STATE.NEW;
- delayTime = 10 * this._errorCounter + FB_AUTO_RELOAD_DELAY;
- Utils_1.utils.showLog("延迟" + delayTime + "秒后, 自动重新加载: " + this.getInfo());
- waitTimeSecond(delayTime, this.loadAsync.bind(this));
- }
- throw e_1;
- case 8: return [2 /*return*/];
- }
- });
- });
- };
- // 广告是否加载完毕
- FBStatefulAdUnit.prototype.isReady = function () {
- return this._adInstance != null && this._state == FB_AD_STATE.LOADED;
- };
- // 播放广告
- FBStatefulAdUnit.prototype.showAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var e_2;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- // [1.1] 判断是否满足播放条件
- if (!this.isReady()) {
- Utils_1.utils.showLog("当前状态未满足播放条件: " + this.getInfo());
- if (this._state == FB_AD_STATE.PLAYING) {
- throw ErrorAdIsPlaying;
- }
- else {
- throw ErrorNotReadyForPlay;
- }
- }
- // [1.2] 是否满足播放间隔
- if (!this.isReadyToRefresh()) {
- Utils_1.utils.showLog("播放太频繁,还需间隔" + this.getNextRefreshInterval() + " 秒: " + this.getInfo());
- throw ErrorTooFastShow;
- }
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 4]);
- // [2] 播放广告
- // 设置为播放中
- this._state = FB_AD_STATE.PLAYING;
- Utils_1.utils.showLog("开始播放广告: " + this.getInfo());
- return [4 /*yield*/, this._adInstance.showAsync()];
- case 2:
- _a.sent();
- Utils_1.utils.showLog("播放广告完毕: " + this.getInfo());
- // [3] 播放完毕后重置广告对象
- this._adInstance = null;
- this._state = FB_AD_STATE.NONE;
- this.updateLastShowTime();
- // [4] 播完自动加载
- if (this._autoLoadOnPlay) {
- // TODO: 应该适当延迟
- Utils_1.utils.showLog("延迟" + FB_AUTO_RELOAD_DELAY + "秒后, 自动重新加载: " + this.getInfo());
- waitTimeSecond(FB_AUTO_RELOAD_DELAY, this.loadAsync.bind(this));
- }
- return [2 /*return*/, true];
- case 3:
- e_2 = _a.sent();
- // [5] 播放完毕后重置广告对象
- Utils_1.utils.showLog("播放广告失败: " + this.getInfo(), e_2);
- if (e_2.code == FB_ERROR_CODE_RATE_LIMITED) {
- // 播放太频繁,可忽略
- // 状态回退
- this._state = FB_AD_STATE.LOADED;
- }
- else {
- this._adInstance = null;
- this._state = FB_AD_STATE.NONE;
- // [6] 失败自动重新加载
- if (this._autoLoadOnPlay) {
- Utils_1.utils.showLog("延迟" + FB_AUTO_RELOAD_DELAY + "秒后, 自动重新加载: " + this.getInfo());
- waitTimeSecond(FB_AUTO_RELOAD_DELAY, this.loadAsync.bind(this));
- }
- }
- throw e_2;
- case 4: return [2 /*return*/];
- }
- });
- });
- };
- return FBStatefulAdUnit;
- }(FBAdUnitBase));
- // 插屏广告
- var FBInterstitialUnit = /** @class */ (function (_super) {
- __extends(FBInterstitialUnit, _super);
- function FBInterstitialUnit(id, sharedTimer, opt) {
- return _super.call(this, id, FB_AD_TYPE.INTERSTITIAL, sharedTimer, opt) || this;
- }
- FBInterstitialUnit.prototype.createAdInstanceAsync = function (adId) {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 /*yield*/, FBInstant.getInterstitialAdAsync(this._adId)];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- return FBInterstitialUnit;
- }(FBStatefulAdUnit));
- // 激励视频广告
- var FBRewardedVideoUnit = /** @class */ (function (_super) {
- __extends(FBRewardedVideoUnit, _super);
- function FBRewardedVideoUnit(id, sharedTimer, opt) {
- return _super.call(this, id, FB_AD_TYPE.REWARDED_VIDEO, sharedTimer, opt) || this;
- }
- FBRewardedVideoUnit.prototype.createAdInstanceAsync = function (adId) {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 /*yield*/, FBInstant.getRewardedVideoAsync(this._adId)];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- return FBRewardedVideoUnit;
- }(FBStatefulAdUnit));
- // 横幅广告
- var FBBannerUnit = /** @class */ (function (_super) {
- __extends(FBBannerUnit, _super);
- function FBBannerUnit(id, sharedTimer, opt) {
- return _super.call(this, id, FB_AD_TYPE.BANNER, sharedTimer, opt) || this;
- }
- // 显示Banner广告, 注意可以调用多次
- FBBannerUnit.prototype.showAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var e_3;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!this.isReadyToRefresh()) {
- Utils_1.utils.showLog("播放太频繁,还需间隔" + this.getNextRefreshInterval() + " 秒: " + this.getInfo());
- throw ErrorTooFastShow;
- }
- if (this.isErrorTooMany()) {
- Utils_1.utils.showLog("太多错误,停止加载: " + this.getInfo());
- throw ErrorTooManyErrors;
- }
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 4]);
- this._state = FB_AD_STATE.PLAYING;
- Utils_1.utils.showLog("开始显示广告: " + this.getInfo());
- return [4 /*yield*/, FBInstant.loadBannerAdAsync(this._adId)];
- case 2:
- _a.sent();
- Utils_1.utils.showLog("显示广告成功: " + this.getInfo());
- // 更新刷新时间
- this.updateLastShowTime();
- this.resetErrorCounter();
- return [3 /*break*/, 4];
- case 3:
- e_3 = _a.sent();
- Utils_1.utils.showLog("显示广告失败: " + this.getInfo(), e_3);
- if (e_3.code == FB_ERROR_CODE_RATE_LIMITED) {
- // 播放太频繁,可忽略
- // 不用重置,保留
- }
- else if (e_3.code == FB_ERROR_ADS_NO_FILL) {
- // 遇到 NOT FILL错误,就不能再继续加载了
- Utils_1.utils.showLog("广告无法填充,不再继续请求: " + this.getInfo());
- this.setFatalError();
- }
- else {
- this.increaseErrorCounter();
- }
- throw e_3;
- case 4: return [2 /*return*/];
- }
- });
- });
- };
- FBBannerUnit.prototype.hideAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var e_4;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this._state != FB_AD_STATE.PLAYING) {
- Utils_1.utils.showLog("广告没有在播放中: " + this.getInfo());
- throw ErrorNotPlaying;
- }
- _a.label = 1;
- case 1:
- _a.trys.push([1, 3, , 4]);
- Utils_1.utils.showLog("隐藏广告: " + this.getInfo());
- // TODO: 重复隐藏广告不会报错
- return [4 /*yield*/, FBInstant.hideBannerAdAsync()];
- case 2:
- // TODO: 重复隐藏广告不会报错
- _a.sent();
- this._state = FB_AD_STATE.NONE;
- return [3 /*break*/, 4];
- case 3:
- e_4 = _a.sent();
- Utils_1.utils.showLog("隐藏广告失败: " + this.getInfo(), e_4);
- // 隐藏失败不做任何操作
- // this._state = FB_AD_STATE.NONE;
- throw e_4;
- case 4: return [2 /*return*/];
- }
- });
- });
- };
- return FBBannerUnit;
- }(FBAdUnitBase));
- var FBAdManager = /** @class */ (function () {
- function FBAdManager() {
- }
- FBAdManager.getVersion = function () {
- return "1.0.2";
- };
- // 1.1 添加插屏广告
- // 返回已经添加的插屏广告总数
- FBAdManager.addInterstitial = function (id, count) {
- if (count === void 0) { count = FB_INIT_AD_COUNT; }
- if (this._interstitialTimer == null) {
- this._interstitialTimer = new AdTimer(this.defaultInterstitialTimerOption.refreshInterval, this.defaultInterstitialTimerOption.delayForFirstAd);
- }
- for (var i = 0; i < count; i++) {
- if (this._interstitialAds.length >= FB_MAX_AD_INSTANCE) {
- Utils_1.utils.showLog("添加插屏广告失败, 超出限制: " + this._interstitialAds.length, id);
- throw ErrorTooManyAdInstance;
- }
- var adUnit = new FBInterstitialUnit(id, this._interstitialTimer, this.defaultInterstitialOption);
- this._interstitialAds.push(adUnit);
- Utils_1.utils.showLog("添加插屏广告: " + id, "count: " + this._interstitialAds.length);
- }
- return this._interstitialAds.length;
- };
- // 1.2. 添加激励视频广告
- // 返回已经添加的激励视频总数
- FBAdManager.addRewardedVideo = function (id, count) {
- if (count === void 0) { count = FB_INIT_AD_COUNT; }
- if (this._rewardedVideoTimer == null) {
- this._rewardedVideoTimer = new AdTimer(this.defaultRewardedVideoTimerOption.refreshInterval, this.defaultRewardedVideoTimerOption.delayForFirstAd);
- }
- for (var i = 0; i < count; i++) {
- if (this._rewardedVideos.length >= FB_MAX_AD_INSTANCE) {
- Utils_1.utils.showLog("添加激励视频广告失败, 超出限制: " + this._rewardedVideos.length, id);
- throw ErrorTooManyAdInstance;
- }
- var adUnit = new FBRewardedVideoUnit(id, this._rewardedVideoTimer, this.defaultRewardedVideoOption);
- this._rewardedVideos.push(adUnit);
- Utils_1.utils.showLog("添加激励视频广告: " + id, "count: " + this._rewardedVideos.length);
- }
- return this._rewardedVideos.length;
- };
- // 1.3. 添加Banner广告
- FBAdManager.addBanner = function (id) {
- if (this._bannerTimer == null) {
- this._bannerTimer = new AdTimer(this.defaultBannerTimerOption.refreshInterval, this.defaultBannerTimerOption.delayForFirstAd);
- }
- var adUnit = new FBBannerUnit(id, this._bannerTimer, this.defaultBannerOption);
- this._banners.push(adUnit);
- Utils_1.utils.showLog("添加Banner广告: " + id, "count: " + this._banners.length);
- return adUnit;
- };
- // 2. 初始化和预加载
- // Deprecated 此方法用于保持兼容, 建议使用 loadAllAsync
- FBAdManager.loadAll = function () {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- Utils_1.utils.showLog("初始化广告队列");
- return [4 /*yield*/, this.loadAllAsync()];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- // 异步顺序预加载所有广告
- FBAdManager.loadAllAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var i, adUnit, e_5, i, adUnit, e_6;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- Utils_1.utils.showLog("FBAdManager Version: " + this.getVersion());
- Utils_1.utils.showLog("初始化广告队列");
- i = 0;
- _a.label = 1;
- case 1:
- if (!(i < this._rewardedVideos.length)) return [3 /*break*/, 7];
- adUnit = this._rewardedVideos[i];
- if (!(i > 0)) return [3 /*break*/, 3];
- return [4 /*yield*/, waitTimeSecond(0.1)];
- case 2:
- _a.sent();
- _a.label = 3;
- case 3:
- _a.trys.push([3, 5, , 6]);
- return [4 /*yield*/, adUnit.loadAsync()];
- case 4:
- _a.sent();
- return [3 /*break*/, 6];
- case 5:
- e_5 = _a.sent();
- return [3 /*break*/, 6];
- case 6:
- i++;
- return [3 /*break*/, 1];
- case 7:
- i = 0;
- _a.label = 8;
- case 8:
- if (!(i < this._interstitialAds.length)) return [3 /*break*/, 14];
- adUnit = this._interstitialAds[i];
- if (!(i > 0)) return [3 /*break*/, 10];
- return [4 /*yield*/, waitTimeSecond(0.1)];
- case 9:
- _a.sent();
- _a.label = 10;
- case 10:
- _a.trys.push([10, 12, , 13]);
- return [4 /*yield*/, adUnit.loadAsync()];
- case 11:
- _a.sent();
- return [3 /*break*/, 13];
- case 12:
- e_6 = _a.sent();
- return [3 /*break*/, 13];
- case 13:
- i++;
- return [3 /*break*/, 8];
- case 14: return [2 /*return*/];
- }
- });
- });
- };
- FBAdManager._isAdReady = function (type) {
- var adUnits = (type == FB_AD_TYPE.INTERSTITIAL) ? this._interstitialAds : this._rewardedVideos;
- var isReady = false;
- for (var i = 0; i < adUnits.length; i++) {
- var adUnit = adUnits[i];
- if (adUnit.isReady() && adUnit.isReadyToRefresh()) {
- isReady = true;
- break;
- }
- }
- return isReady;
- };
- FBAdManager._showAsync = function (type) {
- var adUnits = (type == FB_AD_TYPE.INTERSTITIAL) ? this._interstitialAds : this._rewardedVideos;
- var readyUnit = null;
- for (var i = 0; i < adUnits.length; i++) {
- var adUnit = adUnits[i];
- if (adUnit.isReady() && adUnit.isReadyToRefresh()) {
- readyUnit = adUnit;
- break;
- }
- }
- if (readyUnit != null) {
- return readyUnit.showAsync();
- }
- throw ErrorNoReadyAdInstance;
- };
- FBAdManager._getAdTimer = function (type) {
- if (type == FB_AD_TYPE.INTERSTITIAL) {
- return this._interstitialTimer;
- }
- if (type == FB_AD_TYPE.REWARDED_VIDEO) {
- return this._rewardedVideoTimer;
- }
- return this._bannerTimer;
- };
- // 3.1. 判断是否可以播放插屏广告
- FBAdManager.isInterstitialAdReady = function () {
- return this._isAdReady(FB_AD_TYPE.INTERSTITIAL);
- };
- // 4.1. 播放插屏广告
- FBAdManager.showInterstitialAd = function () {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 /*yield*/, this._showAsync(FB_AD_TYPE.INTERSTITIAL)];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- // 3.2. 判断是否可以播放激励视频广告
- FBAdManager.isRewardedVideoReady = function () {
- return this._isAdReady(FB_AD_TYPE.REWARDED_VIDEO);
- };
- // 4.2. 播放激励视频广告
- FBAdManager.showRewardedVideo = function () {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0: return [4 /*yield*/, this._showAsync(FB_AD_TYPE.REWARDED_VIDEO)];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- // 6. 检查是否支持对应API
- FBAdManager.checkApiSupport = function (api) {
- if (FBInstant.getSupportedAPIs().indexOf(api) >= 0) {
- return true;
- }
- else {
- return false;
- }
- };
- // 6.1. 是否支持banner
- FBAdManager.isBannerSupport = function () {
- if (typeof this._bannerSupport == "undefined") {
- this._bannerSupport = this.checkApiSupport(FB_API_BANNER);
- }
- return this._bannerSupport;
- };
- // 3.3. banner广告是否可以刷新或者重新加载
- FBAdManager.isBannerReady = function () {
- if (this._banners.length <= 0) {
- throw ErrorNoBannerAdInstance;
- }
- var adUnit = this._banners[0];
- return adUnit.isReadyToRefresh();
- };
- // 4.3. 播放默认banner广告
- FBAdManager.showBannerAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var adUnit;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!this.isBannerSupport()) {
- throw ErrorApiNotSupport;
- }
- if (this._banners.length <= 0) {
- throw ErrorNoBannerAdInstance;
- }
- adUnit = this._banners[0];
- return [4 /*yield*/, adUnit.showAsync()];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- // 5.3. 隐藏默认banner广告
- FBAdManager.hideBannerAsync = function () {
- return __awaiter(this, void 0, void 0, function () {
- var adUnit;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!this.isBannerSupport()) {
- throw ErrorApiNotSupport;
- }
- if (this._banners.length <= 0) {
- throw ErrorNoBannerAdInstance;
- }
- adUnit = this._banners[0];
- return [4 /*yield*/, adUnit.hideAsync()];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
- };
- FBAdManager._interstitialAds = [];
- FBAdManager._rewardedVideos = [];
- FBAdManager._banners = [];
- FBAdManager._interstitialTimer = null;
- FBAdManager._rewardedVideoTimer = null;
- FBAdManager._bannerTimer = null;
- FBAdManager._bannerSupport = undefined;
- // 插屏广告默认参数
- FBAdManager.defaultInterstitialOption = {
- autoLoadOnPlay: FB_AUTO_LOAD_ON_PLAY,
- maxLoadError: FB_MAX_INTERSTITIAL_ERROR,
- };
- // 激励视频默认参数
- FBAdManager.defaultRewardedVideoOption = {
- autoLoadOnPlay: FB_AUTO_LOAD_ON_PLAY,
- maxLoadError: FB_MAX_REWARDED_VIDEO_ERROR,
- };
- // banner默认参数
- FBAdManager.defaultBannerOption = {
- autoLoadOnPlay: FB_AUTO_LOAD_ON_PLAY,
- maxLoadError: FB_MAX_BANNER_ERROR,
- };
- // 插屏广告计时器默认参数
- FBAdManager.defaultInterstitialTimerOption = {
- refreshInterval: FB_INTERSTITIAL_REFRESH_INTERVAL,
- delayForFirstAd: FB_AD_DELAY_FOR_FIRST_INTERSTITIAL
- };
- // 激励视频计时器默认参数
- FBAdManager.defaultRewardedVideoTimerOption = {
- refreshInterval: FB_REWARDED_VIDEO_REFRESH_INTERVAL,
- delayForFirstAd: FB_AD_DELAY_FOR_FIRST_REWARDED_VIDEO
- };
- // banner计时器默认参数
- FBAdManager.defaultBannerTimerOption = {
- refreshInterval: FB_BANNER_REFRESH_INTERVAL,
- delayForFirstAd: FB_AD_DELAY_FOR_FIRST_BANNER
- };
- return FBAdManager;
- }());
- exports.default = FBAdManager;
- cc._RF.pop();
|