H5 小游戏目前支持 基于 mPaaS 框架接入、基于已有工程且使用 mPaaS 插件接入 和 基于已有工程且使用 CocoaPods 接入 三种接入方式。本文介绍了采用上述方式接入 H5 小游戏和使用 H5 小游戏的过程。
前置条件
您已经接入工程到 mPaaS。更多信息,请参见以下内容:
添加 SDK
H5 小游戏目前已在定制基线 cp_change_56100909 版本中提供支持。根据您采用的接入方式,请选择相应的添加方式。
使用 mPaaS Xcode Extension。
此方式适用于采用了 基于 mPaaS 框架接入 或 基于已有工程且使用 mPaaS 插件接入 的接入方式。
单击 Xcode 菜单项 Editor > mPaaS > 编辑工程,打开编辑工程页面。
选择 Ariver 小程序,保存后单击 开始编辑,即可完成添加。
使用 cocoapods-mPaaS 插件。
此方式适用于采用了 基于已有工程且使用 CocoaPods 接入 的接入方式。
在 Podfile 文件中,指定基线号为
cp_change_56100909,并使用mPaaS_pod "mPaaS_Ariver"添加 H5小游戏组件依赖。执行
pod mpaas update cp_change_56100909命令更新基线。在命令行中执行
pod install即可完成接入。
初始化配置
初始化 mPaaS 框架
如果 App 的生命周期并没有交给 mPaaS 框架托管,而是指定为您自己定义的 delegate(如下图所示),那么还需手动初始化 mPaaS 框架。
mPaaS 框架托管是指 App 的 delegate 设置为 DFClientDelegate,此时无需手动初始化 mPaaS 框架。

在应用的
window及navigationController创建完成后,调用以下方法初始化 mPaaS 框架。
在
DTFrameworkInterface的category中重写shouldInheritDFNavigationController方法并返回NO,支持导航栏控制器可不继承DFNavigationController。
若 App 有多个导航栏,且需要在不同导航栏中打开不同小游戏,在切换导航栏后需重新设置容器的导航栏。

初始化容器
为了正确启动小游戏,需要在 App 启动完成后调用 SDK 接口,对容器进行初始化。必须在 DTFrameworkInterface 的 - (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中进行初始化。
- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 初始化容器
[MPNebulaAdapterInterface initNebula];
}注意事项
在 cp_change_56100909 基线中如果使用 mPaaS 框架的托管模式和隐私弹框的情况下,设置了开关配置代理 [MPNebulaAdapterInterface shareInstance].configDelegate = self;,则需要同时在以下两个方法中进行设置开关代理;如果没有使用到开关代理,请忽略。


游戏配置和启动
账号授权
初始化配置中添加如下内容:
#import <AriverMPNebulaAdapter/MPNebulaGameInterface.h>
- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//初始化容器
[MPNebulaAdapterInterface initNebula];
//开启
[MPNebulaGameInterface shareInstance].shouldSupportGameJsBridge = YES;
//设置回调代理
[MPNebulaGameInterface shareInstance].gameDelegate = self;
}
#pragma mark----MPNebulaAdapterInterfaceGameProtocol
/*
jsapi: getUserInfo 的实现方法
data: h5传给原生的参数
context: h5容器上下文
callback: 原生给h5的回调 @{@"userId":@"xxx",@"name":@"xxx"}
*/
- (void)getUserInfoHandler:(NSDictionary *)data context:(id)context callback:(void (^)(id res))callback
{
NSLog(@"MPJsApi4GameGetUserInfo : %@",data);
if (callback) {
callback(@{@"userId":@"123456",@"name":@"jack"});
}
}
/*
jsapi: showRewardAd 的实现方法
data: h5传给原生的参数
context: h5容器上下文
callback: 原生给h5的回调 @{@"key1":@"value1",@"key2":@"value2"}
*/
- (void)showRewardAdHandler:(NSDictionary *)data context:(id)context callback:(void (^)(id))callback
{
NSLog(@"showRewardAdHandler : %@",data);
}广告
/**
* 从Native调用H5页面JS函数
*
* @param data 函数参数 @{@"detail":@{@"action":@"onAdShow或onAdReward、onAdClosed"}}
* @param webVC H5WebViewController(可以通过(H5WebViewController *)context.currentViewController获取)
* @param callback JS端执行完后回调处理block
*/
- (void)callHandlerData:(id)data webViewController:(UIViewController *)webVC
responseCallback:(void(^)(id resData))responseCallback;
调用传参:@{@"action":@"onAdShow"} 或者 @{@"action":@"onAdClosed"}、 @{@"action":@"onAdReward"}
[[MPNebulaGameInterface shareInstance] callHandlerData:@{@"action":@"onAdShow"} webViewController:self responseCallback:^(id _Nonnull resData) {
}];启动游戏
//在线 H5 游戏:
[[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url":@"https://m.hellobike.com/AppGameCenterH5/latest/pr_outIndex_outHome.html#/outHome"}];
//离线 ID 游戏:
[[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"xxxx"}];