小程序只在 10.1.60 及以上版本基線中提供支持。
前置條件
您已經接入工程到 mPaaS。更多信息,請參見以下內容:
添加 SDK
根據您采用的接入方式,請選擇相應的添加方式。
使用 mPaaS Xcode Extension。此方式適用于采用了 基于 mPaaS 框架接入 或 基于已有工程且使用 mPaaS 插件接入 的接入方式。
單擊 Xcode 菜單項 Editor > mPaaS > 編輯工程,打開編輯工程頁面。
選擇 小程序,保存后單擊 開始編輯,即可完成添加。
使用 cocoapods-mPaaS 插件。 此方式適用于采用了 基于已有工程且使用 CocoaPods 接入 的接入方式。
在 Podfile 文件中,使用
mPaaS_pod "mPaaS_TinyApp"
添加小程序組件依賴。在命令行中執行
pod install
即可完成接入。
說明如果有更多接入相關問題,歡迎搜索群號 32843812 加入釘釘群進行咨詢交流。該釘釘群已添加 mPaaS 公有云答疑小助手,能夠快速回答常見接入問題。更多關于使用公有云答疑小助手的信息,請參見 公有云答疑小助手。
使用 SDK
本文將結合 小程序官方 Demo 來介紹小程序的使用。
小程序的整個使用過程主要分為以下三步:
1. 初始化配置
在配置工程時,您需要:
初始化容器
配置小程序
如果您的 App 生命周期并沒有交給 mPaaS 框架托管,您還需進行非框架托管配置(若版本 ≥ 10.1.68.25,推薦使用 10.1.68.25 及以上版本非框架托管配置)。
1.1 初始化容器
容器初始化操作包括啟動容器、定制容器和更新小程序包。
1.1.1 啟動容器
為了使用 Nebula 容器,您需要在程序啟動完成后調用 SDK 接口,對容器進行初始化。必須在
DTFrameworkInterface
的- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中進行初始化。- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 初始化容器 [MPNebulaAdapterInterface initNebula]; }
若您需要使用 預置小程序包、自定義 JSAPI 和 Plugin 等功能,請將上方代碼中的
initNebula
替換為下方代碼中的initNebulaWith
接口,傳入對應參數對容器進行初始化。presetApplistPath
:自定義的預置小程序包的包信息路徑。appPackagePath
:自定義的預置小程序包的包路徑。pluginsJsapisPath
:自定義 JSAPI 和 Plugin 文件的存儲路徑。- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 初始化容器 NSString *presetApplistPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"MPCustomPresetApps.bundle/h5_json.json"] ofType:nil]; NSString *appPackagePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"MPCustomPresetApps.bundle"] ofType:nil]; NSString *pluginsJsapisPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Poseidon-UserDefine-Extra-Config.plist"] ofType:nil]; [MPNebulaAdapterInterface initNebulaWithCustomPresetApplistPath:presetApplistPath customPresetAppPackagePath:appPackagePath customPluginsJsapisPath:pluginsJsapisPath]; }
說明initNebula
和initNebulaWithCustomPresetApplistPath
是兩個并列的方法,請勿同時調用。
配置小程序包請求時間間隔:mPaaS 支持配置小程序包的請求時間間隔,可全局配置或單個配置。
全局配置:您可以在初始化容器時通過如下代碼設置?程序包的更新頻率。
[MPNebulaAdapterInterface shareInstance].nebulaUpdateReqRate = 7200;
其中
7200
是設置全局更新間隔的值,7200
為默認值,代表間隔時長,單位為秒,您可修改此值來設置您的全局小程序包請求間隔,范圍為 0 ~ 86400 秒(即 0 ~ 24 小時,0 代表無請求間隔限制)。單個配置:即只對當前小程序包配置。可在控制臺中前往 新增小程序包 > 擴展信息 中填入
{"asyncReqRate":"1800"}
來設置請求時間間隔。詳情參見 創建小程序包 中的 擴展信息。
1.1.2 定制容器
如有需要,您可以通過設置 MPNebulaAdapterInterface
的屬性值來定制容器配置。必須在 DTFrameworkInterface
的 - (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中設置,否則會被容器默認配置覆蓋。
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 定制容器
[MPNebulaAdapterInterface shareInstance].nebulaVeiwControllerClass = [MPH5WebViewController class];
[MPNebulaAdapterInterface shareInstance].nebulaNeedVerify = NO;
[MPNebulaAdapterInterface shareInstance].nebulaUserAgent = @"mPaaS/Portal";
}
屬性含義如下:
名稱 | 含義 | 備注 |
nebulaVeiwControllerClass | H5 頁面的基類 | 默認為 H5WebViewController。若需指定所有 H5 頁面的基類,可直接設置此接口。注意:基類必須繼承自 H5WebViewController。 |
nebulaWebViewClass | 設置 WebView 的基類 | 基線版本大于 10.1.60 時,默認為 H5WKWebView。自定義的 WebView 必須繼承 H5WKWebView?;€版本等于 10.1.60 時,不支持自定義。 |
nebulaUseWKArbitrary | 設置是否使用 WKWebView 加載小程序包頁面 | 基線版本大于 10.1.60 時,默認為 YES?;€版本等于 10.1.60 時,默認為 NO。 |
nebulaUserAgent | 設置應用的 UserAgent | 設置的 UserAgent 會作為后綴添加到容器默認的 UA 上。 |
nebulaNeedVerify | 是否驗簽,默認為 YES | 若 配置小程序包 時未上傳私鑰文件,此值需設為 NO,否則小程序包加載失敗。 |
nebulaPublicKeyPath | 小程序包驗簽的公鑰 | 與 配置小程序包 時上傳的私鑰對應的公鑰。 |
nebulaCommonResourceAppList | 公共資源包的 appId 列表 | - |
errorHtmlPath | 當 H5 頁面加載失敗時展示的 HTML 錯誤頁路徑 | 默認讀取 |
configDelegate | 設置自定義開關 delegate | 提供全局修改容器默認開關值的能力。 |
1.1.3 更新小程序包
啟動完成后,全量請求所有小程序包信息,檢查服務端是否有更新包。為了不影響應用啟動速度,建議在 (void)application:(UIApplication \*)application afterDidFinishLaunchingWithOptions:(NSDictionary \*)launchOptions
之后調用。
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 定制容器
[MPNebulaAdapterInterface shareInstance].nebulaVeiwControllerClass = [MPH5WebViewController class];
[MPNebulaAdapterInterface shareInstance].nebulaNeedVerify = NO;
[MPNebulaAdapterInterface shareInstance].nebulaUserAgent = @"mPaaS/Portal";
[MPNebulaAdapterInterface shareInstance].nebulaCommonResourceAppList = @[@"77777777"];
// 全量更新小程序包
[[MPNebulaAdapterInterface shareInstance] requestAllNebulaApps:^(NSDictionary *data, NSError *error) {
NSLog(@"");
}];
}
初始化完成后,效果如下:在當前工程 TARGETS 的 General > Embedded Binaries 中添加 FalconLooks
庫。
配置動態庫在 10.1.68.15(含)及以上版本基線中已經取消,無需配置。
您可在 Xcode Extension 中單擊 mPaaS > 編輯工程 > 編輯模塊,在 工程模塊信息 右側 查看基線版本號。
1.2 非框架托管配置(10.1.68.25 及以上版本)
本節介紹非框架托管應用初始化 mPaaS 框架的簡易方法。
只需在應用的
window
及navigationController
創建完成后,調用以下方法即可,不再需要創建bootloader
、隱藏框架window
等操作。支持不繼承
DFNavigationController
。若 App 有多個導航欄,且需要在不同導航欄中打開不同離線包,在切換導航欄后需重新設置容器的導航欄。
1.3 非框架托管配置
若您 App 的生命周期并沒有交給 mPaaS 框架托管,而是指定為您自己定義的 delegate,那么您還需額外配置進行非框架托管。
若您使用的基線版本 ≥ 10.1.68.25,推薦使用上方的非框架托管配置(10.1.68.25 及以上版本)。
1.3.1 啟動 mPaaS 框架
在當前應用的 didFinishLaunchingWithOptions
方法中調用 [[DTFrameworkInterface sharedInstance] manualInitMpaasFrameworkWithApplication:application launchOptions:launchOptions];
來啟動 mPaaS 框架。
啟動框架必須在當前應用 window
和 navigationController
初始化完成后調用,否則無法生效。
1.3.2 創建應用啟動器
創建 DTBootLoader
的子類,重寫 createWindow
和 createNavigationController
方法,返回當前應用自己的 window
和 navigationControlle
。
設置
window
:當前應用的keyWindow
。設置
navigationController
:加載小程序所在的navigationController
,必須繼承DFNavigationController
。若當前應用
keyWindow
的rootviewcontroller
是一個navigationController
,設置為該類即可;若當前應用
keyWindow
的rootviewcontroller
是一個tabBarViewController
,取加載小程序所在標簽(tab)的navigationController
。
在 DTBootPhase
的 category 中重寫 setupNavigationController
方法,指定小程序加載的 navigationController
。1.3.3 指定應用啟動器
在 DTFrameworkInterface
的 category 中重寫方法,指定當前應用自己的 bootloader
,并隱藏 mPaaS 框架默認的 window
和 launcher
應用。
2. 發布小程序
啟動小程序之前,您需要先通過 mPaaS 控制臺發布該小程序。
2.1 進入小程序后臺
登錄 mPaaS 控制臺,進入目標應用后,從左側導航欄進入 小程序 > 小程序發布 頁面。
2.2 配置虛擬域名
如果您是第一次使用,請先在 小程序 > 小程序發布 > 配置管理 中配置虛擬域名。虛擬域名可以為任意域名,建議使用您的企業域名,如 example.com
。
一定要使用自己注冊的域名。
2.3 創建小程序
進入 mPaaS 控制臺,完成以下步驟:
單擊左側導航欄的 小程序 > 小程序發布。
在打開的小程序包列表頁,單擊 新建。
在 新建小程序 窗口,填寫小程序的 ID 和小程序名稱,單擊 確定。其中,小程序 ID 為任意 16 位數字,例如
2018080616290001
。在小程序 App 列表下,找到新增的小程序,單擊 添加。
在基本信息欄,完成以下配置:
版本:填寫小程序包的版本號,例如
1.0.0.0
。客戶端范圍:選擇小程序 App 對應的 iOS 客戶端最低版本和最高版本。在這個范圍內的客戶端 App 可以啟動對應的小程序,否則無法啟動。這里最低版本可以填寫
0.0.0
,最高版本可以不填,代表客戶端所有版本都可以啟動這個小程序。說明這里的版本號指當前客戶端 App 的版本號,請參考工程
Info.plist
中的Product Version
字段。圖標:單擊 選擇文件 上傳小程序包的圖標。第一次創建小程序時必需上傳圖標。示例圖標如下:
文件:上傳小程序包資源文件,文件格式為 .zip。我們為您準備了一個 mPaaS 示例小程序(點此下載),您可以直接上傳。
在配置信息欄,完成以下配置:
主入口 URL:必填,小程序包的首頁,例如
/index.html#page/tabBar/component/index
。其他配置保持默認即可。
勾選 已確認以上信息準確,提交后不再修改。
單擊 提交。
2.4 發布小程序
進入 mPaaS 控制臺,完成以下步驟:
單擊左側導航欄的 小程序 > 小程序發布 > 小程序正式包管理。
在打開的小程序包列表頁中,選擇您要發布的小程序包與版本,單擊 創建發布。
在創建發布任務欄,完成以下配置:
發布類型:選擇 正式 發布類型。
發布描述:選填。
單擊 確定 完成發布創建。
3. 啟動小程序
完成上述步驟之后,進入對應的頁面時,調用框架提供的 startTinyAppWithId
接口方法加載小程序。
[MPNebulaAdapterInterface startTinyAppWithId:appId params:nil];
若打開小程序時需要傳遞參數,可以通過 param
參數進行設置。其中 param
包含 page
和 query
兩個字段:
page: 用來指定打開特定頁面的路徑。
query:用來傳入自定義的參數。多個鍵值對以
&
進行拼接。
NSDictionary *param = @{@"page":@"pages/card/index", @"query":@"own=1&sign=1&code=2452473"};
[MPNebulaAdapterInterface startTinyAppWithId:appId params:dic];