tencent cloud

文档反馈

小程序引擎代理类实现

最后更新时间:2024-03-04 22:43:53
    TCMPPSDK 提供一系列的开放接口,可以方便宿主 App 进行定制及使用宿主 App 已有的能力,实现步骤如下:

    新建类实现 TMFMiniAppSDKDelegate 协议

    @interface MIniAppDemoSDKDelegateImpl : NSObject <TMFMiniAppSDKDelegate>
    
    @end

    通过小程序管理类设置进小程序引擎

    [TMFMiniAppSDKManager sharedInstance].miniAppSdkDelegate = [MIniAppDemoSDKDelegateImpl sharedInstance];

    目前已经支持可扩展的接口列表

    宿主 App 相关接口

    本部分内容,为 App 和小程序引擎提供运行时需要的内容,如版本、名称、语言等信息,建议实现。
    /**
    * @brief SDK宿主应用名称
    * 主要用于文案提示使用
    */
    - (NSString *)appName;
    
    /**
    * @brief SDK宿主平台版本
    * @return 返回的是小写字符串,例如1.0.0
    */
    - (NSString *)getAppVersion;
    
    /**
    * @brief SDK宿主平台QUA
    */
    - (NSString *)getAppQUA;
    
    /**
    * @brief SDK宿主平台的网络状态
    */
    - (TMANetWorkStatus)getAppNetworkStatus;
    
    /**
    * @brief SDK宿主平台的机型信息
    */
    - (NSString *)getAppIPhoneModel;
    
    
    /**
    * @brief 宿主设置的当前语言
    */
    - (NSString *)getCurrentLocalLanguage;
    
    /**
    * @brief 剪贴板频控
    */
    - (NSNumber *)getClipboardInterval;
    
    /// 定制的UA
    /// @param defaultUserAgent 默认使用的 ua
    - (NSString *)customUserAgent:(NSString *)defaultUserAgent;

    用户相关 API 实现

    本部分内容,为用户相关内容实现,供小程序使用,建议实现,尤其是 getAppUID。
    /**
    * @brief SDK宿主平台的用户昵称,默认返回"TMF小程序"
    */
    - (NSString *)getAppNickName;
    
    /**
    * @brief SDK宿主平台的用户头像,默认返回demo图片
    */
    - (UIImage *)getAppAvatar;
    
    
    /**
    * @brief 获取SDK宿主平台的当前用户账号标识,一般填uin或openid
    *
    * 注意:返回nil会导致SDK内某些缓存失效。如果没有登录,可以填个设备号id来避免缓存失效
    */
    - (NSString *_Nonnull)getAppUID;

    开放接口列表

    本部分内容需要宿主 App 实现后才可以正常使用。
    /// 发起支付
    /// @param app 小程序/小游戏实例
    /// @param params 参数
    /// @param completionHandler 回调结果
    - (void)requestPayment:(TMFMiniAppInfo *)app params:(NSDictionary *)params completionHandler:(MACommonCallback)completionHandler;
    
    /// login
    /// @param app 小程序/小游戏实例
    /// @param params 参数
    /// @param completionHandler 回调结果
    - (void)login:(TMFMiniAppInfo *)app params:(NSDictionary *)params completionHandler:(MACommonCallback)completionHandler;
    
    
    /// checkSession
    /// @param app 小程序/小游戏实例
    /// @param params 参数
    /// @param completionHandler 回调结果
    - (void)checkSession:(TMFMiniAppInfo *)app params:(NSDictionary *)params completionHandler:(MACommonCallback)completionHandler;
    
    /// getAccountInfoSync
    /// @param app 小程序/小游戏实例
    /// @param params 参数
    /// @param completionHandler 回调结果
    - (void)getAccountInfoSync:(TMFMiniAppInfo *)app params:(NSDictionary *)params completionHandler:(MACommonCallback)completionHandler;
    
    
    /// getUserProfile
    /// @param app 小程序/小游戏实例
    /// @param params 参数
    /// @param completionHandler 回调结果
    - (void)getUserProfile:(TMFMiniAppInfo *)app params:(NSDictionary *)params completionHandler:(MACommonCallback)completionHandler;
    
    
    /// getUserInfo
    /// @param app 小程序/小游戏实例
    /// @param params 参数
    /// @param completionHandler 回调结果
    - (void)getUserInfo:(TMFMiniAppInfo *)app params:(NSDictionary *)params completionHandler:(MACommonCallback)completionHandler;

    UI 相关元素

    本部分内容,在 TMF 小程序引擎中已经有默认实现,宿主 App 可以根据自己的需要重新实现覆盖原默认实现。
    /// 展示loading
    /// @param infos loading信息
    - (void)showLoading:(TMALoadingInfo * _Nullable)infos;
    
    
    /// 隐藏loading
    - (void)hideLoading;
    
    
    /// 展示toast
    /// @param infos toast信息
    - (void)showToast:(TMAToastInfo *)infos;
    
    
    /// 隐藏toast
    - (void)hideToast;
    
    
    /// 展示actionSheet
    /// @param title 标题
    /// @param cancelButtonTitle 取消按钮标题
    /// @param cancelAction 点击取消按钮触发的动作
    /// @param otherButtonTitleAndActions 其他按钮及响应操作
    /// @param dismissBlock actionSheet收起后需要执行的操作(一定要调用以保证功能正确!!!)
    /// @param presentingViewController 展示actionSheet的vc
    - (void)showActionSheetWithTitle:(nullable NSString *)title
    cancelButtonTitle:(nullable NSString *)cancelButtonTitle
    cancelAction:(nullable dispatch_block_t)cancelAction
    otherButtonTitleAndActions:(nullable NSArray *)otherButtonTitleAndActions
    dismissBlock:(nullable dispatch_block_t)dismissBlock
    presentingViewController:(UIViewController *)presentingViewController;
    
    
    /// 分享面板
    /// 如果此方法不实现,则会调用showActionSheetWithTitle:cancelButtonTitle:cancelAction:otherButtonTitleAndActions:dismissBlock:presentingViewController:
    /// @param title 标题
    /// @param cancelAction 取消操作
    /// @param otherButtonTitleAndActions 其他按钮及响应操作
    /// @param dismissBlock 面板收起后需要执行的操作(一定要调用以保证功能正确!!!)
    /// @param parentVC 呼起面板的vc
    - (void)showShareViewWithTitle:(nullable NSString *)title
    cancelAction:(nullable dispatch_block_t)cancelAction
    otherButtonTitleAndActions:(nullable NSArray *)otherButtonTitleAndActions
    dismissBlock:(nullable dispatch_block_t)dismissBlock
    parentVC:(UIViewController *)parentVC;
    
    /// 点击胶囊按钮呼起的面板
    /// 如果此方法不实现,则会调用showActionSheetWithTitle:cancelButtonTitle:cancelAction:otherButtonTitleAndActions:dismissBlock:presentingViewController:
    /// @param app 小程序信息
    /// @param cancelButtonTitle 取消标题
    /// @param cancelAction 取消操作
    /// @param otherButtonTitleAndActions 其他按钮及响应操作
    /// @param dismissBlock 面板收起后需要执行的操作(一定要调用以保证功能正确!!!)
    - (void)showMoreButtonActionSheetWithApp:(TMFMiniAppInfo *)app
    cancelButtonTitle:(nullable NSString *)cancelButtonTitle
    cancelAction:(nullable dispatch_block_t)cancelAction
    otherButtonTitleAndActions:(nullable NSArray *)otherButtonTitleAndActions
    dismissBlock:(nullable dispatch_block_t)dismissBlock;
    
    /// 收起所有小程序/小游戏呼起的actionSheet
    - (void)clearAllActionSheet;
    
    
    /// 呼起alert弹框
    /// @param title 标题
    /// @param message 信息
    /// @param actionTitleAndblocks 按钮标题及响应操作
    /// @param presentingViewController 呼起alert弹框的vc
    - (void)showAlertWithTitle:(nullable NSString *)title
    withMessage:(nullable NSString *)message
    actionBlocks:(nullable NSArray<AlertActionInfo *> *)actionTitleAndblocks
    presentingViewController:(UIViewController *)presentingViewController;
    
    /**
    * @brief 展示弹窗
    *
    * @param title 标题
    * @param message 信息
    * @param actionTitleAndblocks 按钮标题及响应操作
    * @param isDismissWhenBackground 当小程序退到后台时,弹窗是否消失
    * @param dismissOnClickBlank 当点击空白背景区域时是否消失
    * @param presentingViewController 呼起alert弹框的vc
    */
    - (void)showPopupWithTitle:(NSString *)title
    message:(NSString *)message
    actionBlocks:(NSArray<AlertActionInfo *> *)actionTitleAndblocks
    isDismissWhenBackground:(BOOL)isDismissWhenBackground
    dismissOnClickBlank:(BOOL)dismissOnClickBlank
    presentingViewController:(UIViewController *)presentingViewController;
    
    
    
    /// 宿主App可以自定义分享途径、决定展示顺序,目前使用在点击更多按钮、button组件(open-type="share")呼起的ActionSheet中
    /// 1、默认渠道:QQ好友、QQ空间、微信、朋友圈(具体type参见MAUIDelegateShareViewType),由开发商决定,宿主App只能更改展示顺序
    /// 2、自定义渠道:宿主App自定义(type填MAUIDelegateShareViewTypeCustomizedShare)
    /// 以上两种渠道展示顺序支持混排
    - (NSArray<TMASheetItemInfo *> *)customizedConfigForShare;
    
    
    /// 宿主App是否处于DarkMode模式
    - (BOOL)isDarkMode;
    
    /// 宿主App可以返回一个自定义的WKWebView,目前用于
    /// 1. web-view组件:需要解决web-view组件中用xhr发送post请求body丢失问题
    - (WKWebView *)webViewWithConfiguration:(WKWebViewConfiguration *)configuration;

    媒体相关内容

    本部分内容,小程序引擎或者扩展引擎中有默认实现,宿主 App 可以根据自己的需要重新实现。
    /// 扫码调用客户端的扫码模块scancode
    /// @param scanPrams 扫码参数字典
    /// @param navigationController 从那个页面呼起vc
    /// @param completionHandler 回调结果
    - (void)scanCode:(NSDictionary *)scanPrams
    navigationController:(UINavigationController *)navigationController
    completionHandler:(MACommonCallback)completionHandler;
    
    /// 从选图器选择媒体
    /// @param model 配置
    /// @param parentVC vc
    /// @param completionBlock 选择完毕后需要回传数据 根据所选类型接受 TMAPickerImageModel TMAPickerVideoModel
    - (void)selectMediaFromPickerWithModel:(TMAMediaChooseConfigModel *)model
    parentVC:(UIViewController *)parentVC
    completionBlock:(void(^)(NSArray * _Nullable medias, NSError * _Nullable error))completionBlock;
    
    /// 拍摄媒体
    /// @param model 配置
    /// @param parentVC vc
    /// @param completionBlock 选择完毕后需要回传数据,根据所选类型接受TMACameraImageModel TMACameraVideoModel
    - (void)selectMediaFromCameraWithModel:(TMAMediaChooseConfigModel *)model
    parentVC:(UIViewController *)parentVC
    completionBlock:(void(^)(id _Nullable media, NSError * _Nullable error))completionBlock;
    
    /// 从PHAsset中获取图片数据
    /// @param phAsset 媒体对象
    /// @param needCompress 是否需要压缩
    - (NSData *)imageDataFromPhAsset:(PHAsset *)phAsset needCompress:(BOOL)needCompress;
    
    /// 图片预览
    /// @param navigationController 呼起图片预览的导航栏
    /// @param currentAbsoluteUrl 当前页面地址
    /// @param absUrlsInPreviewArray 需要预览的图片
    - (void)navigationController:(UINavigationController *)navigationController
    presentImageWithCurrentUrl:(NSString *)currentAbsoluteUrl
    imageUrlArray:(NSArray *)absUrlsInPreviewArray;

    事件通知回调

    本部分内容,为小程序生命周期函数中部分事件通知回调,宿主 App 可以在对应的事件发生时添加自己的处理逻辑。
    // 处理启动过程中发生的错误
    - (void)handleStartUpError:(NSError *_Nonnull)error
    app:(NSString *_Nullable)app
    parentVC:(UIViewController *_Nonnull)parentVC;
    
    // 小程序启动成功
    - (void)handleStartUpSuccessWithApp:(TMFMiniAppInfo *_Nonnull)app;

    日志输出

    /// 打印Log
    /// @param level log级别,参考PLTLogLevel
    /// @param msg log信息
    - (void)log:(MALogLevel)level msg:(NSString *)msg;

    自定义配置

    /// 处理当前app对于小程序引擎的一些配置项
    
    /// @param key 配置项key及支持的功能,参见TMAConfigDefine.h定义
    /// 自定义胶囊按钮关闭图标实例
    - (NSString*)stringWithConfigKey:(NSString *)key {
        if([key isEqualToString:TMA_SK_MINIAPP_CloseButton]) {
            return [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"white_close-circle.png"];
        } else if([key isEqualToString:TMA_SK_MINIAPP_CloseButtonDark]) {
            return [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"dark_close-circle.png"];
        }
        return nil;
    }

    截屏、录屏事件和添加水印

    // 录屏状态回调
    - (void)applet:(TMFMiniAppInfo *)appletInfo screenCaptureStatusChanged:(BOOL)isCapture atPagePath:(NSString *)pagePath;
    
    // 截屏回调
    - (void)appletDidTakeScreenshot:(TMFMiniAppInfo *)appletInfo atPagePath:(NSString *)pagePath;
    
    // 添加水印
    - (nullable UIView *)appletCustomizeWatermarkView:(TMFMiniAppInfo *)appletInfo;
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持