123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- import { Vec2, Node } from "cc";
- import { authorizeParams, getUserInfoParams, loadParams, loginParams, MiniGameApiBase, ModalParams, recordedGameScreenParams, toastParams } from "./MiniGameApiBase";
- import { GameCfg } from "../Config/GameCfg";
- export interface OppoVideoAd {
- // 通过 load 方法主动预加载广告内容。
- // 此外,在显示广告出现问题时也可以尝试主动 load 一次。
- // 该方法返回一个 Promise,如果广告已经自动拉取成功,调用该方法返回一个 resolved Promise;
- load: () => Promise<any>;
- // 广告创建后默认是隐藏的,可以通过该方法显示广告。 该方法返回一个 Promise 对象。当广告组件正常获取素材时,该 Promise 对象会是一个 resolved Promise。当广告组件发生错误时,会是一个 rejected Promise,参数与error事件监听器获得的参数相同。
- show: () => Promise<any>;
- //绑定 load 事件的监听器,用户在手动调用 load 方法后,广告组件会预先加载。 广告组件成功拉取广告素材时会触发load事件的监听器。
- //确保监听此事件时,开发者主动调用过 load 方法。
- onLoad: (listener: Function) => void;
- // 解除绑定 load 事件的监听器。
- offLoad: (listener: Function) => void;
- //绑定 error 事件的监听器。 广告组件拉取广告素材和其他情况下如果发生错误,会触发error事件的监听器。监听器会获得一个包含errCode和errMsg属性的对象参数。
- // errCode 详情
- onError: (listener: (error: any) => void) => void;
- // 解除绑定 error 事件的监听器。
- offError: (listener: Function) => void;
- // 绑定 close 事件的监听器。 当用户点击了 Video 广告上的关闭按钮时,会触发close事件的监听器。监听器会获得一个包含isEnded属性的对象参数,表征用户是否完整观看了视频。
- onClose: (listener: (res: { isEnded: boolean }) => void) => void;
- //解除绑定 close 事件的监听器。
- offClose: (listener: Function) => void;
- //
- destroy();
- }
- const oppo: any = window['qg'];
- export default class OppoApi extends MiniGameApiBase {
- checkScene(successCB?: Function, errorCB?: Function) {
- throw new Error("Method not implemented.");
- }
- navigateToScene(successCB?: Function, errorCB?: Function) {
- throw new Error("Method not implemented.");
- }
- getStorageSync(key?: string) {
- throw new Error("Method not implemented.");
- }
- removeStorage(key?: string) {
- throw new Error("Method not implemented.");
- }
- getDeviceInfo() {
- throw new Error("Method not implemented.");
- }
- setUnlockAllTime(time: number) {
- throw new Error("Method not implemented.");
- }
- getUnlockAllTime(call: Function) {
- throw new Error("Method not implemented.");
- }
- setUnitState(state?: string) {
- throw new Error("Method not implemented.");
- }
- reportAnalytics(eventName: string, data?: { [key: string]: string | number | boolean; }) {
- throw new Error("Method not implemented.");
- }
- setSoundInfo(sound?: boolean, music?: boolean) {
- throw new Error("Method not implemented.");
- }
- protected m_AppId: string = "";
- protected m_Secret: string = "";
- protected m_VideoAdIdIndex: number = 0;
- protected m_VideoAdIdList: string[] = [];
- protected m_BannerAdIdIndex: number = 0;
- protected m_BannerAdId: string[] = [];
- protected m_InsertAdIdIndex: number = 0;
- protected m_InsertAdId: string[] = [];
- protected m_videoAd: OppoVideoAd = undefined;
- protected m_BannerAd: any = undefined;
- validAppId(): void {
- if (GameCfg.SYSTEM_LOG) console.log("oppo-api-validAppId");
- }
- ready(): void {
- if (GameCfg.SYSTEM_LOG) console.log("oppo-api-ready");
- }
- getUserInfo(params: getUserInfoParams): void {
- oppo.getUserInfo(params);
- }
- showToast(params: toastParams): void {
- oppo.showToast(params);
- }
- showLoading(params: loadParams): void {
- oppo.showLoading(params);
- }
- hideLoading(): void {
- oppo.hideLoading();
- }
- showModal(params: ModalParams): void {
- }
- authorize(params: authorizeParams): void {
- params.success && params.success();
- }
- login(params: loginParams): void {
- oppo.login(params);
- }
- getVideoAdId(): string {
- const id: string = this.m_VideoAdIdList[this.m_VideoAdIdIndex];
- this.m_VideoAdIdIndex++;
- if (this.m_VideoAdIdIndex >= this.m_VideoAdIdList.length) {
- this.m_VideoAdIdIndex = 0;
- }
- return id;
- }
- loadAndShowVideoAd(successCB: () => void, errorCB: (error: any) => void, completeCB?: () => void, reportAnalyticsExplain?: string): void {
- if (this.m_videoAd == null) {
- this.m_videoAd = oppo.createRewardedVideoAd({ adUnitId: this.getVideoAdId() });
- }
- let onClose = (res) => {
- if (res && res.isEnded) {
- // 给予奖励
- successCB();
- // O1HD.getManagers().soundMgr.setSoundEnabled(true);
- } else {
- //
- errorCB('视频中途退出');
- // O1HD.getManagers().soundMgr.setSoundEnabled(true);
- }
- this.m_videoAd.offClose(onClose);
- completeCB && completeCB();
- };
- //
- this.m_videoAd.load().then(() => { //加载视频广告完成
- this.m_videoAd.show().then(() => { //播放视频广告完成
- this.m_videoAd.onClose(onClose);
- // O1HD.getManagers().soundMgr.setSoundEnabled(true);
- // O1HD.getManagers().soundMgr.playMusic("BGM1");
- }).catch((err) => { //播放视频广告错误
- errorCB('视频显示错误 :' + JSON.stringify(err));
- this.m_videoAd.offClose(onClose);
- completeCB && completeCB();
- })
- }).catch((err) => { //加载视频广告错误
- errorCB('视频加载错误 :' + JSON.stringify(err));
- this.m_videoAd.offClose(onClose);
- completeCB && completeCB();
- });
- }
- getInsertAdId(): string {
- const id: string = this.m_InsertAdId[this.m_InsertAdIdIndex];
- this.m_InsertAdIdIndex++;
- if (this.m_InsertAdIdIndex >= this.m_InsertAdId.length) {
- this.m_InsertAdIdIndex = 0;
- }
- return id;
- }
- showInsertAd(onAdClose: () => void, onFailed: () => void): void {
- console.log("加抖音 插屏 广告");
- const adId = this.getInsertAdId();
- let insertAd = oppo.createInterstitialAd({
- adUnitId: adId,
- });
- insertAd.load();
- insertAd.onLoad(() => {
- console.warn('插屏广告 加载完成');
- insertAd.show().catch((err) => {
- console.warn('插屏广告 显示失败 :' + JSON.stringify(err));
- insertAd.destroy();
- insertAd = null;
- if (onFailed) {
- onFailed();
- }
- });
- });
- insertAd.onError((err) => {
- console.warn('插屏广告 加载失败' + JSON.stringify(err));
- insertAd.destroy();
- insertAd = null;
- if (onFailed) {
- onFailed();
- }
- });
- insertAd.onClose(() => {
- console.warn('插屏广告 关闭');
- if (insertAd != null) {
- insertAd.destroy();
- insertAd = null;
- }
- if (onAdClose) {
- onAdClose();
- }
- });
- }
- protected bannerSuccese: boolean = false;
- getBannerAdId(): string {
- const id: string = this.m_BannerAdId[this.m_BannerAdIdIndex];
- this.m_BannerAdIdIndex++;
- if (this.m_BannerAdIdIndex >= this.m_BannerAdId.length) {
- this.m_BannerAdIdIndex = 0;
- }
- return id;
- }
- showBannerAD(node: Node, successCB?: () => void, errorCB?: (error: any) => void, onCloseCB?: () => void,
- setBannerPos?: ({ screenWidth, screenHeight }: { screenWidth: any; screenHeight: any; }) => Vec2): void {
- const { screenWidth, screenHeight } = oppo.getSystemInfoSync();
- let pos: Vec2 = setBannerPos && setBannerPos({ screenWidth, screenHeight }) || new Vec2(0, 0);
- var targetBannerAdWidth = 200;
- if (this.m_BannerAd && !this.bannerSuccese) {
- this.m_BannerAd.destroy()
- this.m_BannerAd = null
- }
- if (this.m_BannerAd) {
- this.m_BannerAd.show()
- .then(() => {
- successCB && successCB();
- console.log("---------------------Banner广告直接显示成功");
- })
- .catch((err) => {
- errorCB && errorCB(err);
- console.log("---------------------Banner广告直接显示组件出现问题", JSON.stringify(err));
- });
- return
- }
- this.bannerSuccese = true
- if (this.m_BannerAd == null) {
- this.m_BannerAd = oppo.createBannerAd({
- adUnitId: this.getBannerAdId(),
- adIntervals: 30,
- style: {
- // width: targetBannerAdWidth,
- // top: screenHeight - (targetBannerAdWidth / 16) * 9, // 根据系统约定尺寸计算出广告高度
- left: pos.x,
- top: pos.y,
- }
- });//创建
- }
- this.m_BannerAd.onResize(size => {
- console.log(size.width, size.height, "banner长宽");
- // this.m_BannerAd.style.top = size.height;//screenHeight - size.height;
- // this.m_BannerAd.style.left = size.width;//(screenWidth - size.width) / 2;
- // setBannerPosition && setBannerPosition({ x: this.m_BannerAd.style.left, y: this.m_BannerAd.style.top },
- // { width: size.width, height: size.height });
- });
- this.m_BannerAd.onLoad(() => {
- if (node == null || !node.active || !node.isValid) {
- console.log("---------------------------------------------------------");
- return
- }
- this.bannerSuccese = false;
- this.m_BannerAd
- .show()
- .then(() => {
- console.log("---------------------Banner广告显示成功");
- this.m_BannerAd.onHide(() => {
- console.log('oppo-banner 广告隐藏');
- onCloseCB && onCloseCB();
- });
- })
- .catch((err) => {
- console.log("---------------------Banner广告组件显示出现问题", JSON.stringify(err));
- });
- });
- this.m_BannerAd.onError((e) => {
- this.bannerSuccese = false
- console.log("---------------------Banner广告加载错误,错误原因:", JSON.stringify(e))
- });
- }
- hideBanner() {
- // if (this.m_BannerAd != null) {
- // this.m_BannerAd.hide();
- // }
- }
- recordedGameScreenStart(params: recordedGameScreenParams, onStart?: (res: any) => void): void {
- console.log("oppo-api-recordedGameScreenStart");
- onStart && onStart(null);
- }
- recordedGameScreenStop() {
- console.log("oppo-api-recordedGameScreenStop");
- return true;
- }
- shareRecordedGameScreen(successCb?: () => void, failCb?: (e?: any) => void): void {
- console.log("oppo-api-shareRecordedGameScreen");
- successCb && successCb();
- }
- isHaveRecordedGameScreen(): boolean {
- return true;
- }
- }
|