快游戏是一种基于行业标准的新型免安装应用,其标准由主流手机厂商组成的快应用联盟联合制定,开发后可分发到支持行业标准的手机设备上。为了提升开发快游戏的效率和体验,华为推出了包括但不限于以下的服务:
在本篇Codelab中,您将在一个已有的对战游戏上实现华为帐号登录功能,并在游戏失败后实现通过观看激励视频复活角色的功能。
下载基础游戏Demo。
基础游戏未接入华为帐号能力,玩家仅以游客的身份进入游戏。
在游戏过程中,玩家可以发出"躲避"或"进攻"技能。
若玩家中了飞镖,则游戏失败。基础游戏未接入激励视频广告能力,游戏失败后无法通过观看激励视频复活角色。
接入华为帐号能力与激励视频广告能力前,需要完成以下准备工作:
本篇Codelab是在基础游戏上接入华为帐号能力,启动游戏后需要先登录华为帐号,登录成功后页面顶部出现欢迎横幅,且直接跳转到游戏页面。
在游戏失败页面增加"观看广告复活"按钮。若游戏失败,点击按钮即可触发激励视频广告能力,玩家通过观看激励视频复活角色。
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.');
}
},
});
}
start(){
this.gamelogin();
}
方法名 | 说明 |
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();
}
}
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();
}
watchAdsVideo() {
// 观看广告
console.log('watchAds');
AdsMgr.getInstance().showRewardedVideoAd();
}
onDestroy() {
Game.isGameOver = false;
// 此处需要销毁广告监听
AdsMgr.getInstance().destroyRewardedVideoAd();
}
恭喜您,您已经成功完成Codelab并学到了:
您可以阅读并了解更多相关的信息。
本篇Codelab中成功接入华为帐号能力与激励视频广告能力后的游戏源码下载地址。