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