接入 iOS

更新时间:
复制为 MD 格式

H5 小游戏目前支持 基于 mPaaS 框架接入基于已有工程且使用 mPaaS 插件接入 和 基于已有工程且使用 CocoaPods 接入 三种接入方式。本文介绍了采用上述方式接入 H5 小游戏和使用 H5 小游戏的过程。

前置条件

添加 SDK

H5 小游戏目前已在定制基线 cp_change_56100909 版本中提供支持。根据您采用的接入方式,请选择相应的添加方式。

  • 使用 mPaaS Xcode Extension

    此方式适用于采用了 基于 mPaaS 框架接入基于已有工程且使用 mPaaS 插件接入 的接入方式。

    1. 单击 Xcode 菜单项 Editor > mPaaS > 编辑工程,打开编辑工程页面。

    2. 选择 Ariver 小程序,保存后单击 开始编辑,即可完成添加。

  • 使用 cocoapods-mPaaS 插件

    此方式适用于采用了 基于已有工程且使用 CocoaPods 接入 的接入方式。

    1. 在 Podfile 文件中,指定基线号为 cp_change_56100909,并使用 mPaaS_pod "mPaaS_Ariver" 添加 H5小游戏组件依赖。

    2. 执行 pod mpaas update cp_change_56100909 命令更新基线。

    3. 在命令行中执行 pod install 即可完成接入。

初始化配置

初始化 mPaaS 框架

如果 App 的生命周期并没有交给 mPaaS 框架托管,而是指定为您自己定义的 delegate(如下图所示),那么还需手动初始化 mPaaS 框架。

说明

mPaaS 框架托管是指 App 的 delegate 设置为 DFClientDelegate,此时无需手动初始化 mPaaS 框架。

image.png

  1. 在应用的 windownavigationController 创建完成后,调用以下方法初始化 mPaaS 框架。

    image.png

  2. DTFrameworkInterfacecategory 中重写 shouldInheritDFNavigationController 方法并返回 NO,支持导航栏控制器可不继承 DFNavigationController

    image.png

  3. 若 App 有多个导航栏,且需要在不同导航栏中打开不同小游戏,在切换导航栏后需重新设置容器的导航栏。

    image.png

初始化容器

为了正确启动小游戏,需要在 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;,则需要同时在以下两个方法中进行设置开关代理;如果没有使用到开关代理,请忽略。

image.png

image.png

游戏配置和启动

账号授权

初始化配置中添加如下内容:

#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"}];