接口说明

优质
小牛编辑
128浏览
2023-12-01

1. 相关接口

web-view网页中可使用JSSDK 1.3.4 (opens new window)提供的接口返回小程序页面。

支持的接口有:

接口名称说明最低版本
ft.miniProgram.navigateTo参数与小程序接口一致1.0.0
ft.miniProgram.navigateBack参数与小程序接口一致1.0.0
ft.miniProgram.switchTab参数与小程序接口一致1.0.0
ft.miniProgram.redirectTo参数与小程序接口一致1.0.0
ft.miniProgram.reLaunch参数与小程序接口一致1.0.0
ft.miniProgram.postMessage向小程序发送消息,会在特定时机(小程序后退、组件销毁、分享)触发组件的message事件1.0.0
ft.miniProgram.getEnv获取当前环境1.0.0
ft.miniProgram.downloadFile下载文件1.0.0
ft.miniProgram.openDocument打开文件1.0.0
ft.miniProgram.chooseImage拍照或上传1.0.1
ft.miniProgram.getLocalImgData获取图片 base641.0.9
ft.miniProgram.close关闭小程序1.0.3
ft.miniProgram.navigateToMiniProgram跳转小程序1.0.4
ft.miniProgram.navigateBackMiniProgram返回上一个小程序1.0.4
ft.miniProgram.onShow小程序 onShow 事件注册回调1.0.6
ft.miniProgram.onHide小程序 onHide 事件注册回调1.0.8
ft.miniProgram.onUnload小程序 onUnload 事件注册回调1.0.8
ft.miniProgram.getStorage参数与小程序接口一致1.0.9
ft.miniProgram.setStorage参数与小程序接口一致1.0.9
ft.miniProgram.removeStorage参数与小程序接口一致1.0.9
ft.miniProgram.clearStorage参数与小程序接口一致1.0.9
ft.miniProgram.getStorageInfo参数与小程序接口一致1.0.9
ft.miniProgram.canGoBack当前 H5 页面是否可返回上一页1.2.0
ft.miniProgram.canNavigateBack当前小程序页面是否可返回上一页1.2.0
ft.miniProgram.setNavigationBarTitle设置当前小程序页面 title1.2.0
ft.miniProgram.getAppletInfo返回当前小程序基础信息1.0.0

示例代码

// <script type="text/javascript" src="https://app.finogeeks.com/open/js/finochat-jssdk-1.0.0.js"></script>
ft.miniProgram.navigateTo({url: '/path/to/page'})
ft.miniProgram.reLaunch({url: '/path/to/page'})
ft.miniProgram.postMessage({ data: 'foo' })
ft.miniProgram.postMessage({ data: {foo: 'bar'} })
ft.miniProgram.getEnv(function(res) { console.log(res.env) }) // miniprogram
// 判断环境的另一个方法
window.__fcjs_environment === 'miniprogram'
ft.miniProgram.downloadFile({ 
    url,
    header,
    timeout,
    filePath
})
ft.miniProgram.openDocument({ 
    filePath,
    fileType
})
ft.miniProgram.chooseImage({
    count: 1, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
    success: (res) => {
        console.log(res);
    }
})
// 同步方式判断当前H5运行环境
console.log(window.__fcjs_environment) // miniprogram
// 关闭小程序
ft.miniProgram.close()
ft.miniProgram.navigateBackMiniProgram({
    extraData: {},
    success: function (res) {
        console.log('navigateBackMiniProgram success callback:');
        console.log(res);
    }
});
ft.miniProgram.navigateToMiniProgram({
    appId: '',
    success: function (res) {
        console.log('navigateToMiniProgram success callback:');
        console.log(res);
    }
});
// 获取当前 H5 页面是否可以返回上一页
ft.miniProgram.canGoBack({
    success: function (res) {
        console.log(res);
    }
});
// 获取小程序是否可以返回上一页
ft.miniProgram.canNavigateBack({
    success: function (res) {
        console.log(res);
    }
});
// 设置小程序页面 title
ft.miniProgram.setNavigationBarTitle({
    title: 'page title'
});
// ft.miniProgram.callHandler({   已废弃
//     name: '', // 原生APP方法,命名规范,加【 user_define_ 】前缀
//     data: {},  // 需要传递给原生APP的数据
//     success: function (res) {
//         console.log(res);
//     }
// });
window.ft.miniProgram.onShow((res)=>{
    console.log(res)
    // res.data表示当前小程序路由query
})
window.ft.miniProgram.onHide((res)=>{
    // Do Some Thing
})
window.ft.miniProgram.onUnload((res)=>{
    // Do Some Thing
})
window.ft.miniProgram.getAppletInfo({
    success: (res) => {
        console.log('getAppletInfo',res);
        // {
        //     appAvatar = "小程序图标地址";
        //     appDescription = "小程序的描述信息";
        //     appId = "小程序id";
        //     path = "点击转发时的小程序页面路径";
        //     appThumbnail = "小程序封面图的路径,可能是网络路径或者本地路径,宽高比是5:4";
        //     appTitle = "小程序名称";
        //     userId = "小程序开发者id";
        // }
    }
})
window.ft.miniProgram.chooseImage({
    count: 1, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
    success: (res) => {
      console.log(res);
      window.fc.miniProgram.getLocalImgData({
        path: res.tempFilePaths[0],
        success: (res) => {
          console.log(res)
        }
      })
    }
})

2. 相关接口

web-view网页中可使用JSSDK 1.0.0提供的接口返回小程序页面。 支持的接口有:

接口名称说明最低版本
window.FinChatJSBridge.invokeH5页面调用原生api
window.FinChatJSBridge.webSubscribe原生调用H5中的api

2.1 H5页面调用原生api

示例接口名:js2AppFunction

2.1.1 iOS 示例

[[FATClient sharedClient] fat_registerWebApi:@"js2AppFunction" handle:^(id param, FATExtensionApiCallback callback) {
        NSString *name = param[@"name"];
//        id params = param[@"data"];
        if ([name isEqualToString:@"getLocation"]) {
            // 执行定位逻辑
            
            // 返回结果给HTML
            NSDictionary *dict = @{@"errno":@"403", @"errmsg":@"无权限", @"result": @{@"address":@"广东省深圳市南山区航天科技广场"}};
            callback(FATExtensionCodeSuccess, dict);
        } else if ([name isEqualToString:@"getColor"]) {
            // 执行其他逻辑
            
            // 返回结果给HTML
            NSDictionary *dict = @{@"r":@"110",@"g":@"150",@"b":@"150"};
            callback(FATExtensionCodeSuccess, dict);
        }
    }];

2.1.2 Android 示例

api示例

public class WebApi extends BaseApi {


    public WebApi(Context context) {
        super(context);
    }

    @Override
    public String[] apis() {
        return new String[]{"js2AppFunction"}; //api名称
    }

    @Override
    public void invoke(String event, JSONObject param, ICallback callback) {
        // 调用方法时原生对应的操作
    }
}

Kotlin

FinAppClient.extensionWebApiManager.registerApi(WebApi(this))

Java

FinAppClient.INSTANCE.getExtensionWebApiManager().registerApi(new WebApi(this));

2.1.3 html 示例

在HTML内引用我们的桥接JSSDK文件,即可调用上面的注册的方法了。
HTML内调用注册的方法示例:

window.FinChatJSBridge.invoke('js2AppFunction', {name:'getLocation'}, (result) => {
    console.log(result)
});

2.2 原生调用html中的方法

示例接口名:app2jsFunction

2.2.1 iOS 中 API

原生端调用如下API来调用HTML中的JS函数:

NSString *jsonParams = @""; //这里应该是参数字典转换成的json字符串。
NSNumber *pageId = @(1234); //这里是HTML中传过来的pageId
[[FATClient sharedClient] fat_callWebApi:@"app2jsFunction" paramString:jsonParams pageId:pageId handler:^(id result, NSError *error) {
        
}];

2.2.2 Android 中 API

/**
 * 原生调用JS函数
 *
 * @param appId 小程序id
 * @param funcName JS函数名
 * @param funcParams JS函数参数
 * @param webViewId WebView的id
 * @return 函数调用结果,以[Single]<[String]>的形式返回
 */
fun callJS(appId: String, funcName: String?, funcParams: String?, webViewId: Int): Single<String?>

调用示例
Kotlin

FinAppClient.appletApiManager.callJS("appId", "app2jsFunction", "funParams", 1)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({
            context.toast("callJs successfully : $it")
        }) { Log.d(TAG, "callJs failed : ${it.localizedMessage}") }

Java

FinAppClient.INSTANCE.getAppletApiManager().callJS("appId", "app2jsFunction", "funParams", 1)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
                result -> Toast.makeText(context, "callJS successfully : " + result, Toast.LENGTH_SHORT).show(),
                throwable -> Toast.makeText(context, "callJS failed : " + throwable.getLocalizedMessage(), Toast.LENGTH_SHORT).show()
        );

2.2.3 html 中 API

同样的HTML中引用桥接用的JS文件,然后在HTML里注册好方法,比如方法名叫app2jsFunction。

window.FinChatJSBridge.webSubscribe('app2jsFunction', function(res) {
    // app2jsFunction callback
})