广告bug

[复制链接]
1921 |12
夜光森林 发表于 2023-2-23 17:23:52 来自手机 | 显示全部楼层 |阅读模式
节接入广告后,手机测试的时候有弹窗提示,点击确认之后不播放广告
回复

使用道具 举报

空伊伊 发表于 2023-2-23 17:24:19 | 显示全部楼层
排查一下这些原因呢:
1.是否在创作者中心关联了广告
2.播放广告前是否等待广告准备就绪了
回复

使用道具 举报

叽里咕噜小胡桃 发表于 2023-2-23 17:24:56 | 显示全部楼层
可以贴一下具体的代码么?以及创作者中心是否已经关联了那两个广告
回复

使用道具 举报

夜光森林楼主 发表于 2023-2-23 17:27:09 来自手机 | 显示全部楼层
叽里咕噜小胡桃 发表于 2023-2-23 17:24
可以贴一下具体的代码么?以及创作者中心是否已经关联了那两个广告

用的论坛的开箱即用
回复

使用道具 举报

夜光森林楼主 发表于 2023-2-23 17:27:33 来自手机 | 显示全部楼层
空伊伊 发表于 2023-2-23 17:24
排查一下这些原因呢:
1.是否在创作者中心关联了广告
2.播放广告前是否等待广告准备就绪了

老师,关联了,怎么知道有没有准备就绪
回复

使用道具 举报

叽里咕噜小胡桃 发表于 2023-2-23 17:29:08 | 显示全部楼层
夜光森林 发表于 2023-2-23 17:27
用的论坛的开箱即用

有具体的项目可以发出来么?或者先用空文件试试这个开箱即用?
回复

使用道具 举报

夜光森林楼主 发表于 2023-2-23 17:30:53 来自手机 | 显示全部楼层
叽里咕噜小胡桃 发表于 2023-2-23 17:29
有具体的项目可以发出来么?或者先用空文件试试这个开箱即用?

好的  晚一会我试试在空白项目测试一下
回复

使用道具 举报

空伊伊 发表于 2023-2-23 17:56:04 | 显示全部楼层
夜光森林 发表于 2023-2-23 17:27
老师,关联了,怎么知道有没有准备就绪

AdsService.isReady()调用这个API
回复

使用道具 举报

夜光森林楼主 发表于 2023-2-23 20:06:57 | 显示全部楼层
class newnewUI extends UI.UIBehavior {

    public _BGP: UI.Image = null;
    public _BGT: UI.Image = null;
    public _XBtn: UI.StaleButton = null;
    public _TitleBtn: UI.StaleButton = null;
    public _YesBtn: UI.StaleButton = null;
    public _NoBtn: UI.StaleButton = null;
    public _Tips: UI.TextBlock = null;


    protected onAwake() {
        //设置能否每帧触发onUpdate
        this.canUpdate = false;
        this.layer = UI.UILayerDialog;
        let _windowsSize = Util.WindowUtil.getViewportSize();

        console.log("this.uiWidgetBase.guid " + this.uiWidgetBase.guid);

        Gameplay.getCurrentPlayer().character.moveEnable = false;

        this._BGP = UI.Image.newObject(this.uiWidgetBase.rootContent, "BGP");
        this._BGT = UI.Image.newObject(this.uiWidgetBase.rootContent, "BGT");
        this._XBtn = UI.StaleButton.newObject(this.uiWidgetBase.rootContent, "XBtn");
        this._TitleBtn = UI.StaleButton.newObject(this.uiWidgetBase.rootContent, "TitleBtn");
        this._YesBtn = UI.StaleButton.newObject(this.uiWidgetBase.rootContent, "YesBtn");
        this._NoBtn = UI.StaleButton.newObject(this.uiWidgetBase.rootContent, "NoBtn");
        this._Tips = UI.TextBlock.newObject(this.uiWidgetBase.rootContent, "Tips");


        // 背景图片
        this._BGP.imageGuid = "117894";
        this._BGP.size = _windowsSize.clone().multiply(0.5);
        this._BGP.position = _windowsSize.clone().multiply(0.25);
        this._BGP.imageColor = new LinearColor(0.6, 1, 1);
        this._BGT.zOrder += 1;


        // 背景图片抬头图片
        this._BGT.imageGuid = "117894";
        this._BGT.size = _windowsSize.clone().multiply(0.5);
        this._BGT.size = new Vector2(this._BGT.size.x, this._BGT.size.y * 0.13);
        this._BGT.position = _windowsSize.clone().multiply(0.25);
        this._BGT.imageColor = new LinearColor(1, 0.6, 1);
        this._BGT.zOrder += 2;

        // 提示文本
        this._Tips.textHorizontalLayout = 0;
        this._Tips.fontSize = 36;
        this._Tips.fontColor = new LinearColor(0, 0, 0);
        this._Tips.size = _windowsSize.clone().multiply(0.4);
        this._Tips.position = _windowsSize.clone().multiply(0.5);
        this._Tips.position = new Vector2(this._Tips.position.x * 0.6, this._BGT.position.y + this._BGT.size.y * 1.5)

        // 弹窗提示的标题,用btn是因为它自动居中
        this._TitleBtn.size = this._BGT.size;
        this._TitleBtn.position = this._BGT.position;
        this._TitleBtn.normalImageDrawType = 0;
        this._TitleBtn.enable = false;
        this._TitleBtn.zOrder += 3;

        // 关闭的按钮
        this._XBtn.text = "×";
        this._XBtn.size = _windowsSize.clone().multiply(0.5);
        this._XBtn.size = new Vector2(this._XBtn.size.x * 0.1, this._XBtn.size.y * 0.1);
        this._XBtn.position = _windowsSize.clone().multiply(0.25);
        this._XBtn.position = new Vector2(this._XBtn.position.x + this._BGT.size.x - this._XBtn.size.x - 0.5 * (this._BGT.size.y - this._XBtn.size.y), this._XBtn.position.y + 0.5 * (this._BGT.size.y - this._XBtn.size.y));
        this._XBtn.normalImageColor = new LinearColor(1, 0.1, 0.1);
        this._XBtn.pressedImagColor = new LinearColor(1, 0.4, 0.4);
        this._XBtn.zOrder += 4;

        // 确定的按钮
        this._YesBtn.size = _windowsSize.clone().multiply(0.5);
        this._YesBtn.size = new Vector2(this._YesBtn.size.x * 0.2, this._YesBtn.size.y * 0.15);
        this._YesBtn.position = new Vector2(_windowsSize.x * 0.5 + this._YesBtn.size.x * 0.2, _windowsSize.y * 0.75 - this._YesBtn.size.y * 1.5);
        this._YesBtn.normalImageColor = new LinearColor(0.1, 1, 0.1);
        this._YesBtn.pressedImagColor = new LinearColor(0.4, 1, 0.4);
        this._YesBtn.zOrder += 4;

        // 取消的按钮
        this._NoBtn.size = _windowsSize.clone().multiply(0.5);
        this._NoBtn.size = new Vector2(this._NoBtn.size.x * 0.2, this._NoBtn.size.y * 0.15);
        this._NoBtn.position = new Vector2(_windowsSize.x * 0.5 - this._NoBtn.size.x * 1.2, _windowsSize.y * 0.75 - this._NoBtn.size.y * 1.5);
        this._NoBtn.normalImageColor = new LinearColor(1, 0.1, 0.1);
        this._NoBtn.pressedImagColor = new LinearColor(1, 0.4, 0.4);
        this._NoBtn.zOrder += 4;


        // 给按钮注册点击事件
        this.initButtons();

    }
    protected initButtons() {
        //按钮添加点击事件,点击后销毁UI,并让角色能再移动      
        this._XBtn.onClicked.add(() => {
            this.destroyUI();
        })
        this._YesBtn.onClicked.add(() => {
            this.destroyUI();
        })
        this._NoBtn.onClicked.add(() => {
            this.destroyUI();
        })

    }

    // 销毁UI,让角色能再移动
    protected destroyUI() {
        Gameplay.getCurrentPlayer().character.moveEnable = true;
        this.destroy();
    }
}



@Core.Class
export default class AdsChangeCloth extends Core.Script {

    public static instance: AdsChangeCloth;

    @Core.Property({ displayName: "换装的GUID", tooltip: "在工程内容/角色/里选择要换装的角色,右键复制工程内容ID", group: "换装配置" })
    public CharGUID: string = "";
    @Core.Property({ displayName: "弹窗提示的标题", group: "弹窗UI配置" })
    public Title: string = "温馨提示";
    @Core.Property({ displayName: "提示文本", group: "弹窗UI配置" })
    public TipsText: string = "是否要看视频获取换装?";
    @Core.Property({ displayName: "确定文本", group: "弹窗UI配置" })
    public BtnYesText: string = "确定";
    @Core.Property({ displayName: "取消文本", group: "弹窗UI配置" })
    public BtnNoText: string = "取消";

    public getTitle(): string {
        return this.Title;
    }

    /** 当脚本被实例后,会在第一帧更新前调用此函数 */
    protected onStart(): void {
        AdsChangeCloth.instance = this;

        if (SystemUtil.isClient()) {
            if (this.gameObject instanceof Gameplay.Trigger) {
                let trr = this.gameObject as Gameplay.Trigger;
                trr.onEnter.add((char: Gameplay.Character) => {
                    // 如果进触发器的是咱自己
                    if (char == Gameplay.getCurrentPlayer().character) {
                        let _newUI = UI.UIManager.instance.create(newnewUI);
                        _newUI._TitleBtn.text = this.Title + "";
                        _newUI._NoBtn.text = this.BtnNoText + "";
                        _newUI._YesBtn.text = this.BtnYesText + "";
                        _newUI._Tips.text = this.TipsText + "";
                        UI.UIManager.instance.showUI(_newUI);
                        _newUI._YesBtn.onClicked.add(() => {
                           
                            this.AdsForChangeCloth();

                        })
                    }
                    else {
                        // 其他人进去的
                        console.log("有个撒贝进去了,跟咱没关系");
                    }
                })
            }
            else {
                console.warn("[AdsChangeCloth] 这个脚本只支持挂载在触发器下");
            }
        }
    }

    /**
     * 换装,纯C端,自动同步给其他客户端
     * @param CharGuid 需要换装的guid
     */
    public changeCharByGuid(CharGuid: string) {
        if (SystemUtil.isClient()) {
            Gameplay.asyncGetCurrentPlayer().then((p: Gameplay.Player) => {
                let hv2 = p.character.setAppearance(Gameplay.HumanoidV2);
                hv2.setAppearanceData([CharGuid], () => {
                    p.character.setAppearance(Gameplay.HumanoidV2).appearanceSync();
                    console.log("[AdsChangeCloth] 换装同步完成");
                })
            })
        }
    }

    public AdsForChangeCloth() {
        // 开始准备广告咯
        Service.AdsService.getInstance().isReady(Service.AdsType.Reward, (isReady: boolean) => {
            // 设置一个变量CanGetReward,来决定玩家是否可以获得奖励
            let CanGetReward = false;
            // 如果广告准备好了
            console.log(isReady);
            if (isReady) {
                // 准备往客户端播广告
                Service.AdsService.getInstance().show(Service.AdsType.Reward, (state: Service.AdsState) => {
                    // 播广告过程中每发生一次state改变
                    // 就会回调并走一遍以下的流程
                    // 因此在下面对state进行判断
                    // 展示广告失败的时候回调,一般是网络卡顿,
                    if (state == -1) {
                        // 建议在这里做容错
                        // 例如播放失败时
                        // 维持广告播放按钮
                        // 提示玩家再点一次试试
                    }
                    // 开始展示广告的时候回调,无论是否完成广告播放
                    if (state == 0) {
                        // 这里可以用来“保护”玩家
                        // 顺利开始播放广告后
                        // 玩家客户端处在一个挂起的状态
                        // 如有需要,可在此处加一些保护逻辑
                        // 例如在放广告的时候玩家暂时被传送走
                    }
                    // 用户关闭广告界面的时候回调,无论是否完成广告播放
                    if (state == 1) {
                        // 这里是广告正常播放情况下最后一个状态
                        // 因此在这里进行奖励判断是比较合适的
                        // 建议在这里加上适当的延迟
                        // 以免因放广告时的游戏挂起
                        // 导致后续游戏逻辑失效
                        setTimeout(() => {
                            // 用户关闭广告界面时,已经看完,可以获得奖励
                            if (CanGetReward) {
                                // 关闭界面看完了广告时的逻辑
                                // this.Character.switchToFlying();
                                // 这里就是换装逻辑
                                console.log("[AdsChangeCloth] 换装成功");
                                this.changeCharByGuid(this.CharGUID);
                            }
                            // 用户关闭广告界面时,没有看完,不可以获得奖励
                            else {
                                // 关闭界面没看完广告时的逻辑
                                // this.Character.crouch(true);
                            }
                        }, 1000);
                    }
                    // // 用户点击了跳过广告的时候回调,无论是否完成广告播放
                    // if (state == 2) {
                    //     // 广告快看完的时候
                    //     // 会给一个跳过按钮
                    //     // 点击跳过会有这个回调
                    //     // 一般不用在这加逻辑
                    // }

                    // // 用户点击了广告里面的内容的时候,无论是否完成广告播放
                    // if (state == 3) {
                    //     // 看广告时点击了广告里的内容
                    //     // 会有这个回调
                    //     // 一般不用在这加逻辑
                    // }
                    // 用户播放广告完成了,无论是否点击了关闭广告界面
                    if (state == 4) {
                        // 将是否可以获得奖励变量变成true
                        // 以便在 state == 1 时进行奖励
                        // 尽量不要在这给奖励
                        // 因为回调state=4的时候
                        // 玩家大概率还在放广告阶段
                        CanGetReward = true;
                    }
                })
            }
            else {
                // 广告没准备好,或后台还有广告在放(玩家没放完广告就切回游戏)

            }

        })
    }
}
回复

使用道具 举报

夜光森林楼主 发表于 2023-2-23 20:09:15 | 显示全部楼层
空伊伊 发表于 2023-2-23 17:56
AdsService.isReady()调用这个API

老师,广告显示准备完毕,但是,就是不播放。

更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

72小时热榜
热门版块
快速回复 返回顶部 返回列表