简介

快游戏是一种基于行业标准的新型免安装应用,其标准由主流手机厂商组成的快应用联盟联合制定,开发后可分发到支持行业标准的手机设备上。为了提升开发快游戏的效率和体验,华为推出了包括但不限于以下的服务:

您将建立什么

在本篇Codelab中,您将在一个已有的对战游戏上实现华为帐号登录功能,并在游戏失败后实现通过观看激励视频复活角色的功能。

您将会学到什么

硬件要求

软件要求

需要的知识点

基础游戏简介

下载基础游戏Demo
基础游戏未接入华为帐号能力,玩家仅以游客的身份进入游戏。

在游戏过程中,玩家可以发出"躲避"或"进攻"技能。

若玩家中了飞镖,则游戏失败。基础游戏未接入激励视频广告能力,游戏失败后无法通过观看激励视频复活角色。

游戏工程模块

操作准备

接入华为帐号能力与激励视频广告能力前,需要完成以下准备工作:

  1. 在AppGallery Connect创建项目并添加快游戏。
  2. 生成签名证书指纹。
  3. 在AppGallery Connect添加证书指纹。
详细操作步骤请参考快游戏开发准备公共步骤来完成。
  1. 登录AppGallery Connect,点击"我的项目",在项目列表中选择要打开API开关的项目及项目下的快游戏。
  2. 选择"项目设置 > API管理 ",打开"华为帐号"、"游戏服务"右侧的开关。

接入华为帐号能力

本篇Codelab是在基础游戏上接入华为帐号能力,启动游戏后需要先登录华为帐号,登录成功后页面顶部出现欢迎横幅,且直接跳转到游戏页面。

接入激励视频广告能力

在游戏失败页面增加"观看广告复活"按钮。若游戏失败,点击按钮即可触发激励视频广告能力,玩家通过观看激励视频复活角色。

接入华为帐号能力

  1. 在Cocos Creator中打开基础游戏,脚本文件"Start.ts"中新增方法gamelogin(),实现华为帐号登录的功能,在该方法下调用控制防沉迷的qg.gameLoginWithReal(object)接口,并分别补充成功回调函数success和失败回调函数fail。
    gamelogin() { qg.gameLoginWithReal({ forceLogin: 1, appid: '100***021', // 需要替换成自己的appid。 success(data) { // 登录成功后,可以存储帐号信息。 Global.openId = data.playerId; Global.nickName = data.displayName; Global.playerIconUrl = data.imageUri; cc.log('openId:' + Global.openId); cc.log('玩家昵称:' + Global.nickName); }, fail(data, code) { cc.log('game login with real fail:' + data + ', code:' + code); // 根据状态码处理游戏的逻辑。 // 状态码为7004或者2012,表示玩家取消登录。 // 此时,建议返回游戏界面,可以让玩家重新进行登录操作。 if (code === 7004 || code === 2012) { cc.log('玩家取消登录,返回游戏界面让玩家重新登录。'); } // 状态码为7021表示玩家取消实名认证。 // 华为帐号是中国大陆的情况下,此时需要禁止玩家进入游戏。 if (code === 7021) { cc.log('The player has canceled identity verification. Forbid the player from entering the game.'); } }, }); }
  2. 成功构建gamelogin()方法后,在生命周期start()中调用。
    start(){ this.gamelogin(); }

接入激励视频广告能力

  1. 在项目工程Script/Model下新增类AdsMgr,实现创建并展示广告组件的功能。类中涉及的方法如下:

    方法名

    说明

    qg.createRewardedVideoAd()

    创建激励视频广告组件。

    rewardedVideoAd.onLoad()

    监听视频广告是否加载成功。

    rewardedVideoAd.onError()

    监听视频广告是否出现错误。

    rewardedVideoAd.onClose()

    监听视频广告是否完成播放。

    rewardedVideoAd.load()

    加载激励视频广告。

    showRewardedVideoAd()

    播放激励视频广告。

    destroyRewardedVideoAd()

    销毁激励视频广告的所有监听方法和实例对象。

    const { ccclass } = cc._decorator; @ccclass export default class AdsMgr { // 预加载操作激励视频,创建视频对象,加载视频load,监听调用onload,监听关闭onclose public static Instance: AdsMgr = null; private rewardedVideoAd; static getInstance() { if (!AdsMgr.Instance) { AdsMgr.Instance = new AdsMgr(); } return AdsMgr.Instance; } loadRewardedVideoAd(callback: () => void) { console.log('加载广告中'); // 创建广告组件 this.rewardedVideoAd = qg.createRewardedVideoAd({ adUnitId: 'testx9dtjwj8hp', success: () => { console.log('ads : createRewardedVideoAd success'); }, fail: (data, code) => { console.log('ads : createRewardedVideoAd fail: ' + data + ',' + code); }, complete: () => { console.log('ads : createRewardedVideoAd complete'); }, }); // 监听调用onload this.rewardedVideoAd.onLoad(() => { console.log('ads :ad loaded.'); }); this.rewardedVideoAd.onError((e) => { cc.error('load ad error:' + JSON.stringify(e)); }); this.rewardedVideoAd.onClose((res) => callback(res)); // 预加载激励视频 this.rewardedVideoAd.load(); } // 由于激励广告要求预加载,可在进入游戏时立即触发上述逻辑。在onLoad触发成功回调时,可以展示视频广告组件。 // 玩家每次点击视频按钮时调用rewardedVideoAd.show()播放广告。在播放期间或者关闭视频前调用rewardedVideoAd.load()请求下一次广告。 showRewardedVideoAd() { this.rewardedVideoAd.show(); this.rewardedVideoAd.load(); } destroyRewardedVideoAd() { this.rewardedVideoAd.offLoad(); this.rewardedVideoAd.offClose(); this.rewardedVideoAd.destroy(); } destroy() { this.destroy(); } }
  2. 在游戏结束场景控制脚本"Game.ts"中新增方法loadRewardedVideoAd(),实现加载并展示激励视频广告的功能,并在生命周期函数start()方法调用。在广告组件关闭回调中判断激励视频是否完成播放,若完成播放将调用relive()方法复活玩家。
    import AdsMgr from '../Model/AdsMgr'; loadRewardedVideoAd() { AdsMgr.getInstance().loadRewardedVideoAd((res) => { if ((res && res.isEnded) || res === undefined) { console.log('播放激励视频结束,给予奖励'); this.scheduleOnce(() => { this.relive(); }, 1.5); } else { console.log('播放没结束,不给予奖励' + res.isEnded); } }); } relive() { this.scheduleOnce(() => { cc.director.loadScene('Game'); }, 1) } start() { // 在start生命周期中新增下面初始化加载激励视频方法,注意不要覆盖已有逻辑 this.loadRewardedVideoAd(); }
  3. 在脚本文件"Game.ts"中,新增watchAdsVideo()方法,调用这个方法后将展示激励视频广告。
    watchAdsVideo() { // 观看广告 console.log('watchAds'); AdsMgr.getInstance().showRewardedVideoAd(); }
  4. 在alert_loser节点下新增按钮组件btn_watchAds,用于存放按钮图片"观看广告复活",并关联新增的watchAdsVideo()方法。操作成功后,若玩家游戏失败点击"观看广告复活"即可通过观看激励视频复活玩家角色。
  5. 生命周期函数onDestroy()方法调用类AdsMgr中的destroyRewardedVideoAd()方法,用以销毁广告组件实例。
    onDestroy() { Game.isGameOver = false; // 此处需要销毁广告监听 AdsMgr.getInstance().destroyRewardedVideoAd(); }
  1. 打开手机的"开发者模式",并使用USB连接手机与电脑。
  2. 在Cocos Creator中选择"项目 > 构建发布",在弹出的窗口中配置发布的相关信息,完成后点击"构建",再点击“运行”即可生成rpk文件。
    • "发布平台"选择"华为快游戏"。
    • "初始场景"选择"Start.fire"。
    • "屏幕方向"选择"横屏"。
  3. 点击"运行",在弹出的"快游戏调试工具"窗口中点击""即可在手机中启动快游戏。
  4. 在游戏登录界面点击"开始游戏"即可成功启用华为帐号能力,并在界面顶部出现欢迎横幅。
  5. 若玩家游戏失败,可点击"观看广告复活"去观看完整的激励视频广告即可复活角色,继续游戏。

恭喜您,您已经成功完成Codelab并学到了:

您可以阅读并了解更多相关的信息。

本篇Codelab中成功接入华为帐号能力与激励视频广告能力后的游戏源码下载地址
Code copied