SDk集成

添加依赖库

民生小程序SDK以framework的形式提供集成,将FireflyMiniApp.framework以及其依赖库添加到工程;详细参见 接入iOS

添加SDK需要的系统库,Xcode —> Build Phases —> Link Binary With Libraries 中,添加下图中的库

修改编译选项

在Xcode中,添加如下编译设置:Other Link Flags : -ObjC,设置

关闭工程的bigcode选项:Enable Bitcode: NO

权限设置

在使用摄像头、麦克风、定位、相册等功能的时候,会检查相应权限。用户需要手动在项目的info.plist文件中添加相应权限,如下图所示:

使用定位权限时,除了添加响应权限,还需要打开后台位置更新:

iOS10 之后的系统版本,如果调用相关权限之前没有在info.plist中添加声明,可能引起程序崩溃

小程序初始化

查询配置信息

民生小程序支持web本地话功能,小程序的配置信息是动态下发的,包含小程序离线版的增量更新等内容,首先要获取本地小程序的版本号来请求小程序的配置信息,调用的api:

API

- (NSString * _Nonnull)offLineMiniappVersionWithMiniAppIdAlias:(NSString * _Nonnull)miniAppIdAlias;
				

参数

属性 类型 默认值 必填
miniAppIdAlias NSString 必填

返回值

返回类型为NSString,表示本地小程序版本号,如果没有小程序离线包信息,返回结果为空字符串,反之有对应本地离线小程序版本号。

示例代码:

FireflyMiniappManager *manager = [FireflyMiniappManager manager];
NSString *version = [manager offLineMiniappVersionWithMiniAppIdAlias:@"别名"];

设置小程序代理

/**
 bridge 代理
 */
@property(nonatomic,weak) id<FireflyMiniappNativeProtocol> _Nullable bridgeDelegate;

/**
 小程序管理者代理
 */
@property(nonatomic,weak) id<FireflyMiniappManagerProtocol> _Nullable managerDelegate;

小程序管理类FireflyMiniappManager有两个代理,为bridgeDelegatemanagerDelegate,分别管理前端与native的交互和小程序与客户端的交互。

示例代码:

[FireflyMiniappManager manager].bridgeDelegate = self;
[FireflyMiniappManager manager].managerDelegate = self;

设置小程序配置信息

API

/**
 启动小程序(启动之前设置好小程序的代理)
 @param nav 导航控制器
 @param completion 小程序启动完毕
 */
- (void)startMiniappWithNavigationController:(UINavigationController * _Nonnull)nav completion:(CompletionBlcok _Nonnull )completion;

网络请求下来配置信息之后,问了确保容器启动完毕,在复制小程序配置信息,需要利用回调的ettingDictBlock 传递 配置信息 dict

参数

属性 类型 默认值 必填
nav UINavigationController 必填
completion CompletionBlcok 必填

实例代码

[[FireflyMiniappManager manager] startMiniappWithNavigationController:self.navigationController completion:^(SettingDictBlcok  _Nonnull settingDictBlcok) {
        if (settingDictBlcok) {
            settingDictBlcok(dict);
        }
    }];

设置小程序错误码回调

设置错误码回调之后当出现异常时,通过错误码能够定位问题

API

typedef void(^CompletionBlcok)(SettingDictBlcok _Nonnull settingDictBlcok);
/**
 小程序打开异常时的回调
 */
@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 不支持当前小程序
    FireflyMiniappErrorType_Manager_DBQueryError = 202,         // 数据库查询出错
    FireflyMiniappErrorType_Manager_OfflineDonwloadError = 203, // 离线包下载出错
    FireflyMiniappErrorType_Manager_MD5VerfyFailure = 204,      // 离线包 md5 校验失败
    FireflyMiniappErrorType_Error = 300,                        // 失败
    FireflyMiniappErrorType_GPS_Disable = 400                   //定位服务不可用
};

示例代码:

 manager.openErrorBlcok = ^(FireflyMiniappErrorType type) {
     NSLog(@"%lu",type);
 };

实现小程序代理

FireflyMiniappManagerProtocol

FireflyMiniappManagerProtocol协议规定了小程序和客户端交互的接口,通知客户端小程序的生命周期、通知客户端下载离线包资源,需要客户端实现。

小程序关闭

- (void)fireflyMiniappClose
{
    NSLog(@"fireflyMiniappClose");
      //在此解除 UrlProtocol 注册,由于 UrlProtocol 在 iOS 当中是全局的原因
    [[FireflyMiniappManager manager] unRegisterFireflyMiniappUrlProtocol];
}

小程序打开

- (void)fireflyMiniappOpen
{
    NSLog(@"fireflyMiniappOpen");
    //在此注册 UrlProtocol,为了是拦截 url 进行离线包逻辑,发现本地已有离线包资源会优先加载本地资源
    [[FireflyMiniappManager manager] registerFireflyMiniappUrlProtocol];
}

小程序即将push一个新的页面

- (void)fireflyMiniappWillPush:(UIViewController *)controller{
    NSLog(@"fireflyMiniappWillPush");
}

开始下载全量离线包

- (void)miniappManager:(FireflyMiniappManager *_Nonnull)manager startDownloadOfflinePackageWithPath:(NSString * _Nonnull)path fulldownloadUrl:(NSString * _Nonnull)fulldownloadUrl miniAppCompletion:(FireflyMiniAppCompletion _Nonnull)miniAppCompletion{
    //下载操作,下载路径为参数 path,下载完成后通过 miniAppCompletion 回调告知 SDK 下载结果
}

开始下载增量离线包

- (void)miniappManager:(FireflyMiniappManager *_Nonnull)manager startDownloadOfflinePackageWithPath:(NSString * _Nonnull)path patchUrl:(NSString * _Nonnull)patchUrl miniAppCompletion:(FireflyMiniAppCompletion _Nonnull)miniAppCompletion{
    //下载操作,下载路径为参数 path,下载完成后通过 miniAppCompletion 回调告知 SDK 下载结果
}

FireflyMiniappNativeProtocol

主要是容器和客户端的操作。

小程序设置title回调

-(void)miniapp_setNavigationBarTitle:(NSString *_Nonnull)title{
    //小程序设置导航栏标题成功回调
}

发送请求的回调

小程序请求转发到客户端,客户端根据规则从 arg 中取出对应参数,做对应请求操作。请求成功调用 successCallback 通过参数字典 callbackParams 回调结果给SDK,SDK 再透传给小程序,请求失败同理。

-(void)miniapp_requset:(NSDictionary *_Nonnull)arg
       successCallback:(FireflyMiniAppBridgeCallback _Nonnull )successCallback
         faildCallback:(FireflyMiniAppBridgeCallback _Nonnull)faildCallback{
             //请求成功调用 successCallback
             //请求失败调用 faildCallback
}

登录获取token回调

小程序做登录操作,告知客户端进行登录操作,将登录的 token 值通过 callback 的参数字典 callbackParams 回调给 SDK,SDK 再透传给小程序。

-(void)miniapp_loginWith:(FireflyMiniAppBridgeCallback _Nonnull )callback{
        callback(@{@"token": @"12313212313132"});
}

小程序关闭的回调

在小程序页面点击关闭按钮会回调该接口。

-(void)miniapp_navigationCloseThisPage{

}