# 其他

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

# API

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

# 调用示例

FinAppClient.appletApiManager.setActivityTransitionAnim(SlideFromRightToLeftAnim)
FinAppClient.INSTANCE.getAppletApiManager().setActivityTransitionAnim(SlideFromRightToLeftAnim.INSTANCE);

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

# API

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

# 调用示例

FinAppClient.appletApiManager.sendCustomEvent("app", "{\"test\":\"123\"}")
FinAppClient.INSTANCE.getAppletApiManager().sendCustomEvent("app", "{\"test\":\"123\"}")

# 3. 跨进程调用接口

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

调用 需要在主进程调用

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("返回结果给主进程")
            }
        })
}

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

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

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("返回结果给小程序进程")
        }
    })

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

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

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

 FinAppProcessClient.appletProcessApiManager.getCurrentAppletId()

 FinAppProcessClient.appletProcessApiManager.getAppletInfo()

 FinAppProcessClient.appletProcessApiManager.sendCustomEvent(params)

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

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

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

fun goToAboutPage(context: Context)

示例代码:

MoreMenuHelper.goToAboutPage(context)

# 5.2 触发转发事件

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

示例代码:

MoreMenuHelper.invokeForwardMenuAction(context)

# 5.3 跳转至投诉反馈页面

fun goToFeedbackPage(context: Context)

示例代码:

MoreMenuHelper.goToFeedbackPage(context)

# 5.4 跳转至设置页面

fun goToSettingPage(context: Context)

示例代码:

MoreMenuHelper.goToSettingPage(context)

# 5.5 获取小程序的debug模式

fun isEnableAppletDebug(context: Context): Boolean

示例代码:

MoreMenuHelper.isEnableAppletDebug(context)

# 5.6 设置小程序的debug模式

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

示例代码:

MoreMenuHelper.setEnableAppletDebug(context, true)

# 5.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(
    activity: FinAppHomeActivity,
    pageWebViewId: Int?,
    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 ->
    
}

# 5.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? ->
    
}

# 6.生成token

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

示例代码:

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

# 7.解密token

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

示例代码:

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