FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 其他

# 1. 设置小程序Activity的切换动画

支持的app类型

小程序✅ 小游戏✅ H5应用✅

# API

/**
 * 设置小程序Activity的切换动画
 *
 * @param anim [Anim]动画
 */
fun setActivityTransitionAnim(anim: Anim)

# 调用示例

    # 2. 原生发送事件给小程序

    支持的app类型

    小程序✅ 小游戏✅ H5应用✅

    # API

    /**
     * 原生发送事件给小程序
     * @param appId
     * @param params 事件参数
     */
    fun sendCustomEvent(appId: String, params: String)
    

    # 调用示例

      # 3. 创建一个[FinAppletWebView]实例

      改方法已于2.12.4版本废弃,若需要用到FinAppletWebView,直接实例化该类即可。

      # API

      /**
       * 创建一个[FinAppletWebView]实例
       *
       * @param context [Context]对象
       * @return 一个[FinAppletWebView]实例
       */
      fun createFinAppletWebView(context: Context): FinAppletWebView
      

      # 调用示例

        # 4. 跨进程调用接口

        # 4.1 主进程调用小程序进程

        支持的app类型

        小程序✅ 小游戏✅ H5应用✅

        调用 需要在主进程调用

        FinAppClient.appletApiManager.callInAppletProcess(
                FinAppClient.appletApiManager.getCurrentAppletId().orEmpty(),
                "主进程调用小程序进程方法名",
                "主进程调用小程序进程参数",
                object : FinCallback<String> {
                    override fun onSuccess(result: String?) {
                        toast("小程序进程返回的结果:$result")
                    }
        
                    override fun onError(code: Int, error: String?) {
        
                    }
        
                    override fun onProgress(status: Int, info: String?) {
        
                    }
                })
        

        接收 需要在小程序进程注册处理方法 可通过FinAppClient.isFinAppProcess(context)判断是否是小程序进程

        if (FinAppClient.isFinAppProcess(this)) {
            FinAppProcessClient.appletProcessApiManager.setMainProcessCallHandler(
                object : IAppletProcessApiManager.MainProcessCallHandler {
                    override fun onMainProcessCall(
                        name: String,
                        params: String?,
                        callback: IApiCallback?
                    ) {
                        toast("主进程调用小程序进程:name:$name,params:$params")
                        callback?.onSuccess("返回结果给主进程")
                    }
                })
        }
        

        # 4.2 小程序进程调用主进程

        支持的app类型

        小程序✅ 小游戏✅ H5应用✅

        调用 需要在小程序进程调用

        FinAppProcessClient.appletProcessApiManager.callInMainProcess(
            "小程序进程调用主进程的方法名",
            "小程序进程调用主进程的参数",
            object : FinCallback<String> {
                override fun onSuccess(result: String?) {
                    toast("小程序进程调用主进程成功:$result")
                }
        
                override fun onError(code: Int, error: String?) {
        
                }
        
                override fun onProgress(status: Int, info: String?) {
        
                }
            })
        

        接收 需要在主进程注册处理方法

        FinAppClient.appletApiManager.setAppletProcessCallHandler(
            object : IAppletApiManager.AppletProcessCallHandler {
                override fun onAppletProcessCall(
                    name: String,
                    params: String?,
                    callback: IApiCallback?
                ) {
                    application.toast("小程序进程调用主进程:name:$name,params:$params")
                    callback?.onSuccess("返回结果给小程序进程")
                }
            })
        

        # 5. 在小程序进程调用api

        FinAppClient.appletApiManager只能在主进程中使用

        在小程序进程中要使用FinAppProcessClient.appletProcessApiManager之中的方法。

         FinAppProcessClient.appletProcessApiManager.getCurrentAppletId()
        
         FinAppProcessClient.appletProcessApiManager.getAppletInfo()
        
         FinAppProcessClient.appletProcessApiManager.sendCustomEvent(params)
        

        # 6. 更多面板里的处理事件

        支持的app类型

        小程序✅ 小游戏✅ H5应用✅

        当我们自定义更多小程序面板时,虽然UI是自己设计的,但是部分功能还可以复用SDK里的,比如 关于页面、设置页面、投诉反馈、转发等。可以在按钮的点击事件里调用MoreMenuHelper下面的api来实现跳转和相应的逻辑。

        # 6.1 跳转至关于小程序页面

        fun goToAboutPage(context: Context)
        

        示例代码:

        MoreMenuHelper.goToAboutPage(context)
        

        # 6.2 触发转发事件

        /**
         * 触发转发动作,与SDK默认菜单“转发”行为一致,需要在代理方法shareAppMessage()内处理转发逻辑
         */
        fun invokeForwardMenuAction(context: Context)
        

        示例代码:

        MoreMenuHelper.invokeForwardMenuAction(context)
        

        # 6.3 跳转至投诉反馈页面

        fun goToFeedbackPage(context: Context)
        

        示例代码:

        MoreMenuHelper.goToFeedbackPage(context)
        

        # 6.4 跳转至设置页面

        fun goToSettingPage(context: Context)
        

        示例代码:

        MoreMenuHelper.goToSettingPage(context)
        

        # 6.5 获取小程序的debug模式

        fun isEnableAppletDebug(context: Context): Boolean
        

        示例代码:

        MoreMenuHelper.isEnableAppletDebug(context)
        

        # 6.6 设置小程序的debug模式

        /**
         * 打开/关闭小程序的debug模式  如果config设置了enableAppletDebug为true,执行打开/关闭debug模式操作会无效
         * @param enableAppletDebug true 打开, false 关闭
         */
        fun setEnableAppletDebug(context: Context, enableAppletDebug: Boolean)
        

        示例代码:

        MoreMenuHelper.setEnableAppletDebug(context, true)
        

        # 6.7 检测小程序是否实现自定义菜单功能

        由于部分自定义菜单需要小程序返回数据,功能类似onShareAppMessage的实现。可以调用如下方法判断小程序当前页面是否实现了on{menuId}ButtonHandler方法。

        /**
         * 检测小程序是否实现自定义菜单功能
         * 其中onShareAppMessage事件受小程序是否调用了showShareMenu/hideShareMenu API影响
         * 若小程序调用了showShareMenu后调用该方法检测,则无论小程序是否实现onShareAppMessage事件,该事件对应的value为true
         * 若小程序调用了hideShareMenu后调用该方法检测,则无论小程序是否实现onShareAppMessage事件,该事件对应的value为false
         *
         * @param callback result JSONArray元素为{"eventName":"小程序事件名","menuId":"菜单id","value":"事件是否实现"}
         */
        fun checkMenus(
            context: Context,
            menuIds: List<String>,
            callback: (result: JSONArray) -> Unit
        )
        

        示例代码:

        val menuIds = mutableListOf<String>()
        menuIds.add("WXShareAPPFriends") // 菜单配置信息在小程序onShareAppMessage方法提供
        menuIds.add("WXShareAPPMoments") // 菜单配置信息在小程序onShareAppMessage方法提供
        menuIds.add("customMenu"); // 菜单配置信息在小程序onCustomMenuButtonHandler方法提供
        MoreMenuHelper.checkMenus(context, menuIds) { result ->
            
        }
        

        # 6.8 获取自定义菜单项的数据

        针对于需要小程序返回数据的自定义菜单项,可以调用该方法获取到对应小程序页面on{menuId}ButtonHandler方法返回的小程序信息。

        /**
         * 获取[MoreMenuType.ON_MINI_PROGRAM]类型的菜单数据
         *
         * @param callback 参数字段说明请参考代理方法onRegisteredMoreMenuItemClicked()
         */
        fun getMiniProgramTypeMenuData(
            context: Context,
            menuId: String?,
            callback: (appId: String, path: String, menuItemId: String, appInfo: String?, bitmap: Bitmap?) -> Unit
        )
        

        示例代码:

        getMiniProgramTypeMenuData(context, "customMenu") {
                appId: String, path: String, menuItemId: String, appInfo: String?, bitmap: Bitmap? ->
            
        }
        

        # 7.生成token

        工具方法,不需要区分小程序、小游戏、H5应用。

        /**
         * 生成token。
         * 根据原始字符串,加上特殊字符,使用国密生成token。
         * @param originText 原始字符串
         * @return 生成的token
         */
        fun generateTokenWithOriginText(originText: String): String
        

        示例代码:

        val token = FinAppClient.appletApiManager.generateTokenWithOriginText("6007a0a122bad000012813eb");
        

        # 8.解密token

        工具方法,不需要区分小程序、小游戏、H5应用。

        /**
         * 解密token,获取token里的原始字符串
         * @param token 使用generateTokenWithOriginText:生成的token
         * @return 返回原始字符串
        */
        fun originTextWithToken(token: String): String
        

        示例代码:

        val originText = FinAppClient.appletApiManager.originTextWithToken(token);
        

        # 9.上报自定义事件API

        工具方法,不需要区分小程序、小游戏、H5应用。

        /**
         * @param appletId 小程序ID
         * @param eventId 事件ID
         * @param data 事件数据
         * @return 是否成功
        */
            fun reportEvent(appletId:String, eventId:String, data:JSONObject):Boolean
        

        示例代码:

        val data =  JSONObject()
        data.put("test1", "xxx")
        data.put("test2", "yyy")
        FinAppClient.appletToolManager.reportEvent("需要上报事件的小程序id", "上报的事件id", data)
        

        # 10.宿主App输入日志到小程序的vConsole

        工具方法,不需要区分小程序、小游戏、H5应用。

        /**
         *  日志输出到小程序的vConsole
         *  @param logMsg 日志内容
         *  @param logLevel 日志级别
         *  @param appletId 小程序ID
         *  @param callback 回调
         */
        fun addConsoleLog(logMsg:String,logLevel:LogLevel,appletId:String,callback: FinSimpleCallback<String>? = null)
        

        示例代码:

        FinAppClient.appletToolManager.addConsoleLog("xxxxx你需要打印的日志内容", IAppletToolManager.LogLevel.WARN, "需要把日志输入在哪个小程序的vConsole上面的小程序id")
        
        © FinClip with ❤ , Since 2017