自定义 API

最近更新时间:2023-10-20 15:19:14

我的收藏
TCMPP SDK 引擎提供扩展机制,允许宿主 App 自定义 API 供小程序调用。

实现步骤

1. 自定义类。
2. 类实现中引入头文件 #import "TMAExternalJSPlugin.h"。
3. 注册 api。

参考用例

#import "NativePluginTest.h"
#import "TMAExternalJSPlugin.h"
#import "TMFMiniAppInfo.h"

@implementation NativePluginTest

TMA_REGISTER_EXTENAL_JSPLUGIN;

//自定义同步 api
TMAExternalJSAPI_IMP(testSync) {
TMFMiniAppInfo *appInfo = context.tmfAppInfo;
NSDictionary *data = params[@"data"];

NSLog(@"************ invokeNativePlugin testSync,appId:%@,data is %@",appInfo.appId, data);

TMAExternalJSPluginResult *pluginResult = [TMAExternalJSPluginResult new];
pluginResult.result = @{};
return pluginResult;
}

TMAExternalJSAPI_IMP(test) {
TMFMiniAppInfo *appInfo = context.tmfAppInfo;
NSDictionary *data = params[@"data"];

NSLog(@"************ invokeNativePlugin test,appId:%@,data is %@",appInfo.appId, data);

//异步处理,在异步回调中把结果返回给小程序
//{
//  TMAExternalJSPluginResult *pluginResult = [TMAExternalJSPluginResult new];
    //  pluginResult.result = @{@"result" : result.data};
    // [context doCallback:pluginResult];
// }
return nil;
}

@end
小程序中使用。
//异步api调用
var opts = {
api_name: 'test',
success: function(res) {},
fail: function(res) {},
complete: function(res) {},
data: { // 入参
name : 'kka',
age : 22
}
}
wx.invokeNativePlugin(opts);

//同步api调用
var opts = {
api_name: 'testSync',
sync:true
}
var rst = wx.invokeNativePlugin(opts);

进阶使用

自定义 api 支持在终端 app 配置文件的方式进行配置,在小程序中通过直接调用wx.api的方式来调用。
1. 将 app 中实现的配置文件统一放在tcmpp-custom-config.json中,并将tcmpp-custom-config.json文件设置打包到 app 中,参考内容如下:
{
    "extApi":[{
            "name": "test",
            "sync": false,
            "params": {
                "data": ""
            }
        },
        {
            "name": "testSync",
            "sync": true,
            "params": {
                "name": "",
                "title": ""
            }
        }
    ]
}


2. 小程序中调用。
//异步api调用
var opts = {
success: function(res) {},
fail: function(res) {},
complete: function(res) {},
data: {
name : 'kka',
age : 22
}
}
wx.test(opts); 

//同步api调用
var rst = testSync(opts);