SDk集成
添加依賴庫
民生小程序SDK以(yǐ)framework的(de)形式提供集成,将FireflyMiniApp.framework
以(yǐ)及其依賴庫添加到(dào)工程;詳細參見
接入iOS
添加SDK需要(yào / yāo)的(de)系統庫,Xcode —> Build Phases —> Link Binary With Libraries 中,添加下圖中的(de)庫
修改編譯選項
在(zài)Xcode中,添加如下編譯設置:Other Link Flags : -ObjC,設置
關閉工程的(de)bigcode選項:Enable Bitcode: NO
權限設置
在(zài)使用攝像頭、麥克風、定位、相冊等功能的(de)時(shí)候,會檢查相應權限。用戶需要(yào / yāo)手動在(zài)項目的(de)info.plist文件中添加相應權限,如下圖所示:
使用定位權限時(shí),除了(le/liǎo)添加響應權限,還需要(yào / yāo)打開後台位置更新:
iOS10 之(zhī)後的(de)系統版本,如果調用相關權限之(zhī)前沒有在(zài)info.plist中添加聲明,可能引起程序崩潰
小程序初始化
查詢配置信息
民生小程序支持web本地(dì / de)話功能,小程序的(de)配置信息是(shì)動态下發的(de),包含小程序離線版的(de)增量更新等内容,首先要(yào / yāo)獲取本地(dì / de)小程序的(de)版本号來(lái)請求小程序的(de)配置信息,調用的(de)api:
API
- (NSString * _Nonnull)offLineMiniappVersionWithMiniAppIdAlias:(NSString * _Nonnull)miniAppIdAlias;
參數
屬性 | 類型 | 默認值 | 必填 |
---|---|---|---|
miniAppIdAlias | NSString | 無 | 必填 |
返回值
返回類型爲(wéi / wèi)NSString
,表示本地(dì / de)小程序版本号,如果沒有小程序離線包信息,返回結果爲(wéi / wèi)空字符串,反之(zhī)有對應本地(dì / de)離線小程序版本号。
示例代碼:
FireflyMiniappManager *manager = [FireflyMiniappManager manager];
NSString *version = [manager offLineMiniappVersionWithMiniAppIdAlias:@"别名"];
設置小程序代理
/**
bridge 代理
*/
@property(nonatomic,weak) id<FireflyMiniappNativeProtocol> _Nullable bridgeDelegate;
/**
小程序管理者代理
*/
@property(nonatomic,weak) id<FireflyMiniappManagerProtocol> _Nullable managerDelegate;
小程序管理類FireflyMiniappManager
有兩個(gè)代理,爲(wéi / wèi)bridgeDelegate
和(hé / huò)managerDelegate
,分别管理前端與native的(de)交互和(hé / huò)小程序與客戶端的(de)交互。
示例代碼:
[FireflyMiniappManager manager].bridgeDelegate = self;
[FireflyMiniappManager manager].managerDelegate = self;
設置小程序配置信息
API
/**
啓動小程序(啓動之(zhī)前設置好小程序的(de)代理)
@param nav 導航控制器
@param completion 小程序啓動完畢
*/
- (void)startMiniappWithNavigationController:(UINavigationController * _Nonnull)nav completion:(CompletionBlcok _Nonnull )completion;
網絡請求下來(lái)配置信息之(zhī)後,問了(le/liǎo)确保容器啓動完畢,在(zài)複制小程序配置信息,需要(yào / yāo)利用回調的(de)ettingDictBlock 傳遞 配置信息 dict
參數
屬性 | 類型 | 默認值 | 必填 |
---|---|---|---|
nav | UINavigationController | 無 | 必填 |
completion | CompletionBlcok | 無 | 必填 |
實例代碼
[[FireflyMiniappManager manager] startMiniappWithNavigationController:self.navigationController completion:^(SettingDictBlcok _Nonnull settingDictBlcok) {
if (settingDictBlcok) {
settingDictBlcok(dict);
}
}];
設置小程序錯誤碼回調
設置錯誤碼回調之(zhī)後當出(chū)現異常時(shí),通過錯誤碼能夠定位問題
API
typedef void(^CompletionBlcok)(SettingDictBlcok _Nonnull settingDictBlcok);
/**
小程序打開異常時(shí)的(de)回調
*/
@property(nonatomic,copy) OpenErrorBlcok _Nullable openErrorBlcok;
回調
typedef void(^OpenErrorBlcok)(FireflyMiniappErrorType type);
typedef NS_ENUM(NSUInteger, FireflyMiniappErrorType) {
FireflyMiniappErrorType_container_web_loadFaild = 100, //網頁加載失敗
FireflyMiniappErrorType_container_UnzipFaild = 101, //解壓縮失敗
FireflyMiniappErrorType_container_ShaVerifyFaild = 102, //sha 值校驗失敗
FireflyMiniappErrorType_Manager_SettingDictError = 200, //配置字典有問題
FireflyMiniappErrorType_Manager_SDKNoSupport = 201, //小程序 SDK 不(bù)支持當前小程序
FireflyMiniappErrorType_Manager_DBQueryError = 202, // 數據庫查詢出(chū)錯
FireflyMiniappErrorType_Manager_OfflineDonwloadError = 203, // 離線包下載出(chū)錯
FireflyMiniappErrorType_Manager_MD5VerfyFailure = 204, // 離線包 md5 校驗失敗
FireflyMiniappErrorType_Error = 300, // 失敗
FireflyMiniappErrorType_GPS_Disable = 400 //定位服務不(bù)可用
};
示例代碼:
manager.openErrorBlcok = ^(FireflyMiniappErrorType type) {
NSLog(@"%lu",type);
};
實現小程序代理
FireflyMiniappManagerProtocol
FireflyMiniappManagerProtocol
協議規定了(le/liǎo)小程序和(hé / huò)客戶端交互的(de)接口,通知客戶端小程序的(de)生命周期、通知客戶端下載離線包資源,需要(yào / yāo)客戶端實現。
小程序關閉
- (void)fireflyMiniappClose
{
NSLog(@"fireflyMiniappClose");
//在(zài)此解除 UrlProtocol 注冊,由于(yú) UrlProtocol 在(zài) iOS 當中是(shì)全局的(de)原因
[[FireflyMiniappManager manager] unRegisterFireflyMiniappUrlProtocol];
}
小程序打開
- (void)fireflyMiniappOpen
{
NSLog(@"fireflyMiniappOpen");
//在(zài)此注冊 UrlProtocol,爲(wéi / wèi)了(le/liǎo)是(shì)攔截 url 進行離線包邏輯,發現本地(dì / de)已有離線包資源會優先加載本地(dì / de)資源
[[FireflyMiniappManager manager] registerFireflyMiniappUrlProtocol];
}
小程序即将push一(yī / yì /yí)個(gè)新的(de)頁面
- (void)fireflyMiniappWillPush:(UIViewController *)controller{
NSLog(@"fireflyMiniappWillPush");
}
開始下載全量離線包
- (void)miniappManager:(FireflyMiniappManager *_Nonnull)manager startDownloadOfflinePackageWithPath:(NSString * _Nonnull)path fulldownloadUrl:(NSString * _Nonnull)fulldownloadUrl miniAppCompletion:(FireflyMiniAppCompletion _Nonnull)miniAppCompletion{
//下載操作,下載路徑爲(wéi / wèi)參數 path,下載完成後通過 miniAppCompletion 回調告知 SDK 下載結果
}
開始下載增量離線包
- (void)miniappManager:(FireflyMiniappManager *_Nonnull)manager startDownloadOfflinePackageWithPath:(NSString * _Nonnull)path patchUrl:(NSString * _Nonnull)patchUrl miniAppCompletion:(FireflyMiniAppCompletion _Nonnull)miniAppCompletion{
//下載操作,下載路徑爲(wéi / wèi)參數 path,下載完成後通過 miniAppCompletion 回調告知 SDK 下載結果
}
FireflyMiniappNativeProtocol
主要(yào / yāo)是(shì)容器和(hé / huò)客戶端的(de)操作。
小程序設置title回調
-(void)miniapp_setNavigationBarTitle:(NSString *_Nonnull)title{
//小程序設置導航欄标題成功回調
}
發送請求的(de)回調
小程序請求轉發到(dào)客戶端,客戶端根據規則從 arg 中取出(chū)對應參數,做對應請求操作。請求成功調用 successCallback 通過參數字典 callbackParams 回調結果給SDK,SDK 再透傳給小程序,請求失敗同理。
-(void)miniapp_requset:(NSDictionary *_Nonnull)arg
successCallback:(FireflyMiniAppBridgeCallback _Nonnull )successCallback
faildCallback:(FireflyMiniAppBridgeCallback _Nonnull)faildCallback{
//請求成功調用 successCallback
//請求失敗調用 faildCallback
}
登錄獲取token回調
小程序做登錄操作,告知客戶端進行登錄操作,将登錄的(de) token 值通過 callback 的(de)參數字典 callbackParams 回調給 SDK,SDK 再透傳給小程序。
-(void)miniapp_loginWith:(FireflyMiniAppBridgeCallback _Nonnull )callback{
callback(@{@"token": @"12313212313132"});
}
小程序關閉的(de)回調
在(zài)小程序頁面點擊關閉按鈕會回調該接口。
-(void)miniapp_navigationCloseThisPage{
}