egret白鹭游戏引擎打包成头条小程序

最近公司需要将之前的项目发个版本到头条小程序,这个项目是5.2.33版本的,然后白鹭支持头条小程序的版本需要是5.3.8,所以需要把版本升级到5.3.8

1、首先打开项目,我用的ide还是egret wing,在终端上输入egret upgrade --egretversion 后面再加上版本号,升级的前提需要先下载要升级到的引擎。

 点击回车就自动升级,由于版本更替,可能会出现之前项目有些地方报错,这是因为白鹭新的api不支持了,目前我遇到的就是dragonBones这个类库和旧的版本不太一样,有的方法已经不用了,

这里大家根据自己的项目,报错找对应解决办法,情况各不一样。

2、升级完成之后,保证项目可以正常运行,我们就可以试着去Egret Launcher上发布头条小程序了,找到字节跳动小游戏,需要先下载小游戏工具包,根据提示操作就可以了。

接着会出现上面的窗口,这里我们做测试版本的话,AppID随便填就可以了,项目名称也是一样,填写完成之后,先点击发布。

如果是升级的项目百分百会出现这个错误提示

 因为项目是升级过来的,升级过程中只是换了egret api和发布平台对应的接口类,所以在scripts文件夹中没有plugins这个文件夹,打包的时候找不到,

要解决这个问题,需要用升级到的引擎,(比如我的是5.3.8)创建一个新项目,再把新项目里的plugins文件放到要打包的项目中。

这时候我们的项目就可以发布了

 这里我们选择Release,发布之后我们用  字节跳动开发者工具打开 ttgame的那个文件。一般情况下

 选择编译,就可以编译你的项目了。

3、上面的步骤是可以在头条上玩了,光玩还不够,咱们的目的不是这,还是需要恰饭的。

下面就要对接一下字节跳动的广告了,字节跳动小游戏上有三种广告,分别为banner 激励视频 插屏这三种,需要接入前提是申请了流量主,有了流量主就有这三个广告接入id

这里接过微信小游戏的同学都知道。

这个放上  字节跳动小游戏开发能力 字节跳动小游戏api 链接

最好写一个字节跳动管理类,在类里面定义和调动头条的api方法

例如打开插屏广告

    //插屏广告
    public OpenScreen(id: any) {const screenAd = tt.createInterstitialAd({
            adUnitId: id
        });
        screenAd.onLoad(() => {
            console.log('插屏 广告加载成功');
            screenAd.show().catch((err) => {
                console.error(err);
            })
                .catch((err) => {
                    console.log("广告组件出现问题", err);
                });
        });

        screenAd.onError(err => {
            console.log('插屏 广告加载失败' + err);
        });
        screenAd.onClose(res => {
            console.log('插屏 广告关闭')
        });
    }         

打开banner广告

public OpenBanner(id: string, _left = 0, _top = 1200, _width = 350, open: Function = null) {
        let systemData = tt.getSystemInfoSync();
        if (!systemData) { return };
_left
= (systemData['windowWidth'] - 350) / 2; _top = systemData['windowHeight'] - 120; var aplha = 1;//document.documentElement.clientWidth / 720; const bannerAd = tt.createBannerAd({ adUnitId: id,//banner id style: { left: _left,//左边位置 top: _top,//上边往下位置 width: _width * aplha,//宽度 height: 50 } }); bannerAd.onLoad(() => { console.log('banner 广告加载成功') bannerAd.style.width = _width * aplha;//随时设置banner宽 bannerAd.show(); if (open != null) open(); }) bannerAd.onError(err => { console.log('banner 广告加载失败' + err); }); if (bannerAd != null) this.BannerArr.push(bannerAd); this.CurBanner = bannerAd; }


 

   //关闭当前Banner
    public CloseCurBanner() {

        console.error("关闭当前banner");
        for (var i in this.BannerArr) {
            if (this.BannerArr[i] != null)
                this.BannerArr[i].destroy();
        }
    }

    //清空Banner
    public ClearBanner() {

        console.error("关闭所有banner了");
        for (var i in this.BannerArr) {
            if (this.BannerArr[i] != null)
                this.BannerArr[i].destroy();
        }
    }

打开激励广告

public safeclose: Function = null;
    public unsafeclose: Function = null;
    public scope: any = null;
    //打开激励广告
    public OpenAD(id: string, safeclose: Function = null, unsafeclose: Function = null, scope = null) {
        if (DEBUG) {
            if (safeclose) {
                safeclose.apply(scope);
            }
            return;
        }const videoAd = tt.createRewardedVideoAd({ adUnitId: id });
        this.safeclose = safeclose;
        this.unsafeclose = unsafeclose;
        this.scope = scope;

        videoAd.show().catch(() => {
            // 失败重试
            videoAd.load().then(() => videoAd.show())
                .catch(err => {
                    console.log('激励视频 广告显示失败')
                })
        });

        videoAd.onError(err => {
            console.error("打开广告失败" + err);
        });

        videoAd.onClose(res => {
            if (res && res.isEnded) {
                // 正常播放结束,可以下发游戏奖励
                console.error("正常关闭广告了");
                if (this.safeclose != null)
                    this.safeclose.apply(this.scope);
                videoAd.offClose();
            } else {
                // 播放中途退出,不下发游戏奖励
                console.error("播放中途关闭广告了");
                if (this.unsafeclose != null)
                    this.unsafeclose.apply(this.scope);
                videoAd.offClose();
            }
        });
    }

 4、想要通过头条的审核,还需要了解必须接的功能

 

第一个内容安全检测,这个对于没有输入功能的游戏,可以不接,第二个,算是首要的功能,必须要接,第三个,这个一般来说小游戏没有登陆功能的话,也可以不接

对于分享功能可以参考官方api文档。

   public _videoPath: any = null;
    public recorder = null
    //开始录屏
    public startRecordScreen(time: number = 60) {
if (!this.recorder) this.recorder = tt.getGameRecorderManager();

        this.recorder.start({
            duration: time || 15,
        });
        this.recorder.onStart(res => {
            console.log("开始录屏");
        });
        this.recorder.onPause(res => {
            console.log("录屏暂停");
        });
        this.recorder.onResume(res => {
            console.log("继续录屏");
        });

        this.recorder.onStop(res => {
            console.log("录屏结束" + res.videoPath);
            this._videoPath = res.videoPath;
        });
    }
    //录屏暂停
    public OnPause(){
     if (!this.recorder) return;
        this.recorder.pause();
    }
    //继续录屏
    public OnResume(){
     if (!this.recorder) return;
        this.recorder.resume();
    }
    //结束录屏
    public stopRecordScreen() { 
     if (!this.recorder) return;
        this.recorder.stop();
    }
    //分享视频
    public shareVideoMsg() {
        if (!PlayerData.m_bIsTouTiao) return;
        if (!this._videoPath)return;

        tt.shareAppMessage({
            channel: 'video',
            title: '大乱斗',
            desc: '',
            query: '',
            imageUrl: '',
            templateId: '',
            extra: {
                videoPath: this._videoPath, // 可用录屏得到的视频地址
                videoTopics: ['大乱斗', '抖音小游戏'],
                hashtag_list: ['大乱斗', '抖音小游戏']
            },
            success() {
                TipMsgCenter.getInstance().PopTipMsg("分享成功", 0);
            },
            fail(e) {
                TipMsgCenter.getInstance().PopTipMsg("分享失败", 0);
            }
        })
    }

游戏的审核标准就是看看有没有接录屏功能,并且录屏功能要放在显眼的地方,避免打回头重新审核,这个要夸一下,头条的审核速度是真的快,上午刚提交审核,过一会儿就好了,当然有时肯定人家也忙,2天之内,一定会进行审核的。

posted @ 2020-11-09 20:32  程序🐱  阅读(1029)  评论(6编辑  收藏  举报