【2025年1月2日】关于腾讯云小程序平台更名为腾讯云超级应用服务的公告
控制台更新动态
Android SDK 更新动态
iOS SDK 更新动态
Flutter 更新动态
IDE 更新动态
基础库更新动态
@ProxyService(proxy = MiniConfigProxy.class)
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {/*** 获取 superapp 的 Application 实例* 注意:1. 小程序是多进程架构,请确保子进程也可以正常获取到 Application 实例。* 2. Applicaton实例缓存建议在 Application.attachBaseContext 中进行,* 避免因为组件时序问题导致 SDK 获取到空的 Application 实例。* @return*/@Overridepublic Application getApp() {//必须使用 superapp 的 Application 实例return "your superapp Application";}/*** 创建初始化配置信息* @return*/@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();MiniInitConfig config = builder.configAssetName("tcsas-android-configurations.json") // assets中配置文件名称.autoRequestPermission(true) // 配置小程序使用到需要权限的API时是否自动向用户申请对应的系统权限.debug(true) // 日志开关,默认关闭的.build();return config;}}
/*** 打开小程序时是否强制检查更新(冷启动时有效),false:优先使用本地缓存,同时异步获取最新数据;true:待网络返回后才打开小程序*/public boolean isForceUpdate = false;/*** 入口地址,支持添加参数:path?key=value&key1=value1*/public String entryPath;/*** 接收小程序启动过程中错误信息*/public ResultReceiver resultReceiver;/*** 小程序启动参数*/public String params;/*** 设置打开小程序时使用的任务模式** false: 多任务模式,true: 为单任务模式*/public boolean isSingleTask;
//通过小程序ID打开小程序//TmfMiniSDK.startMiniApp(activity, appId, new MiniStartOptions());
TmfMiniSDK.startMiniApp(activity, appId, miniStartOptions);
TmfMiniSDK.startMiniAppByScan(activity);
<string name="mini_sdk_intent_filter_scheme">your scheme</string>
参数名 | 类型 | 是否必填 | 说明 |
appId | String | 是 | 小程序 ID |
path | String | 否 | 小程序入口路径,需要进行URI编码 |
param | String | 否 | 传递给小程序的 query,需要进行URI编码 |


/*** 小程序搜索** @param searchOptions* @param callback*/public static void searchMiniApp(SearchOptions searchOptions, MiniCallback<List<MiniApp>> callback)
/*** 获取最近访问小程序列表* @param callback*/public static void getRecentList(IRecentMiniCallback callback)
// 实现 MiniAppProxy 接口public class YourMiniAppProxyImpl extends BaseMiniAppProxyImpl {@Overridepublic Locale getLocale() {// 返回你想要设置的语言return Locale.SIMPLIFIED_CHINESE; // 简体中文// 或 return Locale.US; // 英文// 或 return new Locale("ar", "SA"); // 阿拉伯语// 或 return new Locale("in", "ID"); // 印尼语// 或 return Locale.FRANCE; // 法语}}
/*** 用户账号,必须唯一,设置后数据会按账号隔离存储, 一般填 uin 或 openid*/@Overridepublic String getAccount() {return "tmf_test";}
TmfMiniSDK.stopAllMiniApp(MainActivity.this);

onCapsuleButtonCloseClick方法返回值表示是否自定义关闭按钮监听,返回值为 true 表示自定义,false(默认值)表示使用默认监听。/*** 点击胶囊按钮的关闭选项* 调用环境:子进程** @param miniAppContext 小程序运行环境(小程序进程,非主进程)* @param onCloseClickedListener 点击小程序关闭时回调* @return 不支持该接口,请返回false*/public abstract boolean onCapsuleButtonCloseClick(IMiniAppContext miniAppContext,DialogInterface.OnClickListener onCloseClickedListener);

/*** 点击胶囊按钮的更多选项** @param miniAppContext 小程序运行环境* @return 不支持该接口,请返回false*/public abstract boolean onCapsuleButtonMoreClick(IMiniAppContext miniAppContext);

/*** 返回胶囊更多面板的按钮,扩展按钮的ID需要设置为[100, 200]这个区间中的值,否则,添加无效* 调用环境:子进程** @param builder* @return*/public abstract ArrayList<MoreItem> getMoreItems(MoreItemList.Builder builder);
@Overridepublic ArrayList<MoreItem> getMoreItems(IMiniAppContext miniAppContext, MoreItemList.Builder builder) {MoreItem item1 = new MoreItem();// 设置菜单id(必须),扩展按钮的ID需要设置为[100, 200]这个区间中的值,否则,添加无效。item1.id = ShareProxyImpl.OTHER_MORE_ITEM_1;// 设置菜单标题(可选)item1.text = getString(miniAppContext, R.string.applet_mini_proxy_impl_other1);// 设置菜单图标(可选)item1.drawable = R.mipmap.mini_demo_about;// 设置无障碍描述(可选), 默认是菜单标题item2.contentDescription = "菜单无障碍描述";// 监听点击事件item2.onClickListener = new MoreItem.MoreItemClickListener() {@Overridepublic void onClick(IMiniAppContext context, MoreItem item) {// 处理点击事件}};// 自行调整顺序。builder.addMoreItem(item1)// 根据需求添加内置菜单项.addRestart(getString(miniAppContext, R.string.applet_mini_proxy_impl_restart),R.mipmap.mini_demo_restart_miniapp)// 根据需求添加内置菜单项.addAbout(getString(miniAppContext, R.string.applet_mini_proxy_impl_about),R.mipmap.mini_demo_about)// 根据需求添加内置菜单项.addSetting(getString(miniAppContext, R.string.mini_sdk_more_item_setting_0),R.drawable.mini_sdk_setting,//设置无障碍描述(可选), 默认是菜单标题"小程序设置");return builder.build();}private String getString(IMiniAppContext miniAppContext, int id) {return miniAppContext.getContext().getString(id);}
小程序 API | AbsMiniUiProxy 方法 |
wx.showLoading |
|
wx.showToast |
|
wx.showActionSheet |
|
public abstract class LogProxy {/*** 日志打印** @param logLevel 日志级别* @param tag 日志标识* @param msg 打印信息* @param t 异常*/abstract public void log(int logLevel, String tag, String msg, Throwable t);/*** 是否染色,用于控制日志输出。*/abstract public boolean isColorLevel();}
public interface IDarkModeProxy {boolean isDarkMode();}
@JsPlugin(secondary = true);@JsEvent("事件名"),当小程序 JS 调用“事件名”时就会调用到@JsEvent修饰的对应方法;@JsEvent 支持定义多个事件名;@JsPlugin(secondary = true)public class CustomPlugin extends BaseJsPlugin {@JsEvent("testSync")public String custom1(final RequestEvent req) {//获取参数//req.jsonParams//同步返回数据JSONObject jsonObject = new JSONObject();try {jsonObject.put("key", "value");} catch (JSONException e) {throw new RuntimeException(e);}return req.okSync(jsonObject);}@JsEvent("testAsync")public void getAppBaseInfo(final RequestEvent req) {//获取参数//req.jsonParams//异步返回数据//req.fail();//req.ok();JSONObject jsonObject = new JSONObject();try {jsonObject.put("key", "test");} catch (JSONException e) {e.printStackTrace();}req.ok(jsonObject);}}
//异步api调用var opts = {api_name: 'testAsync',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);
{"extApi":[{"name": "test","sync": false,"params": {"data": ""}},{"name": "testSync","sync": true,"params": {"name": "","title": ""}}]}

@ProxyService(proxy = MiniAppProxy.class)public class MiniAppProxyImpl extends BaseMiniAppProxyImpl {@Overridepublic MiniConfigData configData(Context context, int configType, JSONObject params) {if(configType == MiniConfigData.TYPE_CUSTOM_JSAPI) {//自定义JsApi配置MiniConfigData.CustomJsApiConfig customJsApiConfig = new MiniConfigData.CustomJsApiConfig();customJsApiConfig.jsApiConfigPath = "tcmpp/custom-config.json";return new MiniConfigData.Builder().customJsApiConfig(customJsApiConfig).build();}return null;}
//异步api调用var opts = {success: function(res) {},fail: function(res) {},complete: function(res) {},data: {name : 'kka',age : 22}}wx.testAsync(opts);//同步api调用var rst = testSync(opts);
@ProxyService(proxy = ExternalElementProxy.class)public class MyExternalElementProxy extends ExternalElementProxy{}
/*** 创建组件,当小程序创建自定义原生组件时将会调用此接口** @param widgetId 小程序创建的组件唯一ID* @param widgetContext 小程序组件的上下文,用于向小程序回传内容* @param type 小程序创建的组件类型名称* @param parent 承载原生组件的父容器* @param params 小程序创建组件时传递的参数*/public abstract void handleInsertElement(long widgetId, ExternalWidgetContext widgetContext,String type, ViewGroup parent, JSONObject params);
/*** 更新组件样式,当小程序更新自定义原生组件的样式时将会调用此接口** @param widgetId 小程序组件ID* @param widgetContext 小程序组件的上下文,用于向小程序回传内容* @param params 小程序更新组件时传递的参数*/public abstract void handleUpdateElement(long widgetId, ExternalWidgetContext widgetContext,JSONObject params);
/*** 操作组件,当小程序需要向组件发送指令或者调用特有方法的时候将会调用此接口** @param widgetId 小程序组件ID* @param widgetContext 小程序组件的上下文,用于向小程序回传内容* @param params 小程序更新组件时传递的参数*/public abstract void handleOperateElement(long widgetId, ExternalWidgetContext widgetContext,JSONObject params);
/*** 删除组件** @param widgetId 小程序组件ID* @param widgetContext 小程序组件的上下文,用于向小程序回传内容*/public abstract void handleRemoveElement(long widgetId, ExternalWidgetContext widgetContext);
/*** 向小程序发送 onExternalElementEvent 事件** @param jsonObject 事件携带的JSON数据*/public final void onExternalElementEvent(JSONObject jsonObject);/*** 调用小程序提供的success回调方法** @param jsonObject 回调携带的JSON数据,可以为空*/public final void callbackSuccess(JSONObject jsonObject);/*** 调用小程序提供的fail回调方法** @param jsonObject jsonObject 回调携带的JSON数据,可以为空* @param message 错误信息描述*/public final void callbackFail(JSONObject jsonObject, String message);
<external-elementid="comp1"type="maTestView"_insert2WebLayer="true"style="width: 200px;height: 100px;"bindexternalelementevent="handleEvent"></external-element>
_insert2WebLayer 表示该组件为同层组件或者非同层组件(true 为同层,需客户端实现同层组件代理;false 为非同层,需要客户端实现非同层代理),bindexternalelementevent 可捕获 native 传递的 onExternalElementEvent 或者onXWebExternalElementEvent,回调参数包括:{target,currentTarget,timeStamp,touches,detail, // native传递的参数}
this.ctx = wx.createExternalElementContext('comp1');
this.ctx.call({params1: {name: 'name1',age: 11},params2: {name: 'name2',age: 22},success: (e) => {console.log('====operate success=====', e)},fail: (e) => {console.log('====operate fail=====', e)},complete: (e) => {console.log('====operate complete=====', e)}})
文档反馈