前置条件
创建应用并下载配置文件,详情请参考 扫码测试适配。
添加 H5 小游戏 SDK 前,请确保已经接入工程到 mPaaS。详情请参考 将 mPaaS 添加到您的项目中。
添加 SDK
选择基线
H5 小游戏支持定制基线版本。请参照 选择合适的基线 指南,添加 cp_change_114400936 基线以完成配置。

安装组件
在 app 的 build.gradle 中安装 nebula 组件依赖。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.so'])
// 基线
implementation platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
// nebula组件
implementation 'com.mpaas.android:nebula'
...
}配置
在项目的 assets 下添加 config 目录,并在 config 目录下添加 custom_config.json 配置文件。

文件内容如下:
[
{
"key": "h5_support_litegame",
"value": "YES"
}
]初始化 mPaaS
在使用 mPaaS 框架前需要进行一些初始化操作对 Application 对象进行改造。由于是否使用热修复功能会采取不同的初始化内容,因此本文将根据是否使用热修复功能分别向您介绍相应的初始化操作。
不使用热修复功能
不使用 热修复 功能时,只需在 Application 中添加如下代码:
@Override
public void onCreate() {
super.onCreate();
MP.init(
this,
MPInitParam.obtain().setCallback(new MPInitParam.MPCallback() {
@Override
public void onInit() {
Log.d("TAG", "mPaaS Init finish");
}
})
);
}如果您集成使用 Kotlin 的话,可以使用 mPaaS 提供的 mPaaS KTX,详情参考 mPaaS Kotlin 扩展。
如果您需要继续使用 QuinoxlessFramework 初始化方式,您的调用不会受到任何影响,代码和业务不需要做任何更改。
请不要在使用 MP.init 方法前过滤进程,除主进程外,在 tools 和 push 子进程中也需要执行初始化代码。
使用热修复功能
使用 热修复 功能时,需要完成以下操作。
操作步骤
使 Application 对象重新继承
QuinoxlessApplicationLike,并注意将此类防混淆。此处以 “MyApplication”为例。@Keep public class MyApplication extends QuinoxlessApplicationLike implements Application.ActivityLifecycleCallbacks { private static final String TAG = "MyApplication"; @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); Log.i(TAG, "attacheBaseContext"); } @Override public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate"); registerActivityLifecycleCallbacks(this); } @Override public void onMPaaSFrameworkInitFinished() { LoggerFactory.getTraceLogger().info(TAG, getProcessName()); } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { Log.i(TAG, "onActivityCreated"); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { }}在
AndroidManifest.xml文件中将 Application 对象指向 mPaaS 提供的Application对象。 将生成的 “MyApplication” 类添加到 key 为mpaas.quinoxless.extern.application的meta-data中。示例如下:<application android:name="com.alipay.mobile.framework.quinoxless.QuinoxlessApplication" > <meta-data android:name="mpaas.quinoxless.extern.application" android:value="com.mpaas.demo.MyApplication" /> </application>引入 Apache HTTP 客户端。
在使用 RPC 或者热修复功能的时候,需要调用到 Apache HTTP 客户端相关的功能。只需在
AndroidManifest.xml加入如下代码。更多信息,请参见 使用 Apache HTTP 客户端。<uses-library android:name="org.apache.http.legacy" android:required="false"/>
打开 H5 游戏
H5 游戏支持 在线链接游戏 和 离线包游戏。
在线链接游戏
MPNebula.startUrl("xxx"); // xxx为在线游戏的链接可以通过启动参数控制游戏页面的标题栏、全屏等效果。更多内容请参考 启动参数。
离线包游戏
离线包形式主要优化游戏在线资源加载耗时,提升体验。更多内容请参考离线包简介。
打开离线包游戏
MPNebula.startApp("xxx"); // xxx为离线包id离线包的发布管理
请参考 H5 离线包管理。
账号授权
游戏需要依赖 App 的账号,需要 App 注入用户 openId/userId。在 mPaaS 初始化完成后需设置如下内容。
H5Utils.setProvider(H5OpenUserInfoProvider.class.getName(), new H5OpenUserInfoProvider() {
/**
*
* @param gameId 游戏h5链接或者离线id
* @param page 页面信息
* @param callback 回调
*/
@Override
public void onGetOpenUserInfo(String gameId, H5Page page, OpenUserCallback callback) {
Map<String, String> openUserInfo = new HashMap();
openUserInfo.put("openId", "xxxx"); // 用户id,必须
openUserInfo.put("userName", "xxxx"); // 用户昵称,非必须
if (callback != null) {
callback.onCallback(openUserInfo);
}
}
});IAA 游戏广告
方式一
穿山甲广告类型(内部唤起穿山甲,外部提供广告位即可):mPaaS 初始化完成后设置。
H5Utils.setProvider(H5AdCodeProvider.class.getName(), new H5AdCodeProvider() {
/**
*
* @param gameId 游戏id: 游戏的在线链接或者离线id
* @param page 游戏页面对象
* @param adType 广告类型:0 激励视频广告; 1 banner广告; 2 插屏/全屏广告。 目前只有激励视频类型
* @param callback 广告code回调
*/
@Override
public void onGetAdCode(String gameId, H5Page page, int adType, GameAdInfoCallback callback) {
Map<String, String> adInfo = new HashMap();
if (adType == 0) { // h5游戏只有激励视频的情况
adInfo.put("code", "xxx"); // 添加广告位信息
} else {
}
if (callback != null) {
callback.onCallback(adInfo);
}
}
});方式二
其他广告类型(外部唤起激励视频广告,并在下发奖励时给回调): mPaaS 初始化完成之后设置。
H5Utils.setProvider(H5AdShowProvider.class.getName(), new H5AdShowProvider() {
/**
*
* @param gameId 游戏id: 游戏的在线链接或者离线id
* @param page 游戏页面对象
* @param type 广告类型:0 激励视频广告; 1 banner广告; 2 插屏/全屏广告。 目前只有激励视频类型
* @param gameAdShowCallback 广告展示相关回调
*/
@Override
public void showAd(String gameId, H5Page page, int type, GameAdShowCallback gameAdShowCallback) {
// 自行展示激励视频弹窗广告,并做相应回调
}
});广告展示回调 GameAdShowCallback:
public interface GameAdShowCallback {
/**
* 广告展示回调
*/
void onShow();
/**
* 广告关闭回调
*/
void onClose();
/**
* 广告奖励下发回调
*/
void onReward();
/**
* 广告出错回调
*/
void onError(String code, String message);
}