Native App接入WindVane小程序容器或uni-app小程序容器后,可以搜索小程序、获取小程序列表或者打开小程序。
获取小程序列表
小程序容器SDK提供了获取小程序列表的接口,如果仅是简单的获取小程序列表需求,可以直接使用SDK提供的接口完成,回调方法都是在UI线程中执行。如果有扩展的列表需求,建议使用 SuperApp 提供的相关OpenAPI来完成。
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
miniAppService.getMiniAppList(context, new OnQueryMiniAppsListener() {
@Override
public void onSuccess(List<MiniAppInfo> miniAppInfos, String anchor) {
// 小程序列表,默认最多获取10个,anchor用于获取更多小程序
}
@Override
public void onFailed(int errorCode) {
}
});
}搜索小程序
小程序容器SDK提供了搜索小程序的接口,如果仅是简单的搜索需求,可以直接使用SDK提供的接口完成,回调方法都是在UI线程中执行。如果有扩展的搜索需求,建议使用 SuperApp 提供的相关 OpenAPI来完成。
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
//keyword是搜索关键词
miniAppService.queryMiniApps(context, keyword, new OnQueryMiniAppsListener() {
@Override
public void onSuccess(List<MiniAppInfo> miniAppInfos, String anchor) {
//返回搜索结果,默认最多获取10个,anchor用于获取更多结果
}
@Override
public void onFailed(int errorCode) {
}
});
}打开小程序
通过小程序ID,即可打开小程序。Windvane小程序和uni-app小程序的打开方式相同。打开小程序会有一定耗时,建议在相关回调里可以添加UI上的交互,回调方法都是在UI线程中执行。
import com.alibaba.module.android.mini.app.api.MiniAppOpenConfiguration;
import com.alibaba.module.android.mini.app.api.OnOpenMiniAppListener;
import com.alibaba.module.android.mini.app.api.IMiniAppService;
private void openMiniApp(String miniAppId) {
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
MiniAppOpenConfiguration config = new MiniAppOpenConfiguration();
miniAppService.openMiniApp(context, miniAppId, config, new OnOpenMiniAppListener() {
@Override
public void onOpenMiniApp() {
//开始打开小程序,UI上可以显示加载提示
}
@Override
public void onOpenSuccess(String appId) {
//打开小程序成功,UI上可以隐藏加载提示
}
@Override
public void onOpenFailed(String appId, int errorCode) {
//打开小程序失败,UI上可以隐藏加载提示
}
});
}
}
打开小程序指定页面
打开小程序时,可以通过配置path的方式,打开小程序指定的页面,同时通过extraData携带参数给指定页面。
如果是uni app小程序,path是uni小程序页面直达地址;extraData是uni小程序启动参数,小程序启动后通过plus.runtime.arguments取值。
如果是Windvane小程序,是通过访问链接:https://{appId}.app.mini.windvane.suite.emas.alibaba.com/index.html#/{path}?key=value&key2=123 来打开对应页面的。所以开发小程序时,需要使用哈希路由来处理页面跳转的逻辑。
MiniAppOpenConfiguration config = new MiniAppOpenConfiguration();
config.path = "/test";
JSONObject arguments = new JSONObject();
arguments.put("MSG","Hello miniApp");
config.extraData = arguments;
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
miniAppService.openMiniApp(context, "151160916074102445****", config, new OnOpenMiniAppListener() {
//151160916074102445****表示小程序id,从应用开放平台获取。
@Override
public void onOpenMiniApp() {
//开始打开小程序,UI上可以显示加载提示
}
@Override
public void onOpenSuccess(String appId) {
//打开小程序成功,UI上可以隐藏加载提示
}
@Override
public void onOpenFailed(String appId, int errorCode) {
//打开小程序失败,UI上可以隐藏加载提示
}
});
}预览小程序
通过小程序ID以及publishId,即可预览小程序。一般通过开放平台“扫码”获取预览参数,然后通过以下示例代码启动预览。
import com.alibaba.module.android.mini.app.api.MiniAppOpenConfiguration;
import com.alibaba.module.android.mini.app.api.OnOpenMiniAppListener;
import com.alibaba.module.android.mini.app.api.IMiniAppService;
private void previewMiniApp(String miniAppId) {
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
MiniAppOpenConfiguration config = new MiniAppOpenConfiguration();
miniAppService.previewMiniApp(context, "151160916074102445****", "P79127424345890****", config, new OnOpenMiniAppListener() {
// 151160916074102445****:表示小程序id,从应用开放平台获取。
// P79127424345890****:表示publishid
@Override
public void onOpenMiniApp() {
//开始预览小程序,UI上可以显示加载提示
}
@Override
public void onOpenSuccess(String appId) {
//预览小程序成功,UI上可以隐藏加载提示
}
@Override
public void onOpenFailed(String appId, int errorCode) {
//预览小程序失败,UI上可以隐藏加载提示
}
});
}
}
获取分类列表
小程序容器SDK提供了获取分类列表的接口。
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
miniAppService.queryMiniAppCategories(context, new OnQueryMiniAppCategoryListener() {
@Override
public void onSuccess(List<MiniAppCategory> miniAppCategories) {
//小程序分类列表
}
@Override
public void onFailed(int errorCode, String errorMsg) {
}
});
}获取分类下的小程序列表
小程序容器SDK提供了获取某个分类下的小程序列表的接口。
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService != null) {
miniAppService.queryMiniAppsByCategory(context, categoryId, new OnQueryMiniAppByCategoryListener() {
@Override
public void onSuccess(List<MiniAppInfo> miniAppInfos) {
//单个分类下的小程序列表
}
@Override
public void onFailed(int errorCode, String errorMsg) {
}
});
}小程序包预加载
小程序容器SDK提供了小程序包预加载的接口。
方法:
void preloadMiniApp(Context context, String appId, MiniAppOpenConfiguration config, OnPreloadMiniAppListener listener)
参数:
参数 | 类型 | 描述 |
context | Context | |
miniAppId | String | 小程序id |
config | MiniAppOpenConfiguration | |
listener | OnPreloadMiniAppListener | 预加载回调接口 |
使用案例
import com.alibaba.module.android.mini.app.api.MiniAppOpenConfiguration;
import com.alibaba.module.android.mini.app.api.OnPreloadMiniAppListener;
import com.alibaba.module.android.mini.app.api.IMiniAppService;
private void preloadMiniApp(String miniAppId) {
IMiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService == null){
return;
}
MiniAppOpenConfiguration config = new MiniAppOpenConfiguration();
// If you plan to preload the uni mini app, please specify the "uniApp" type
// config.miniAppType = MiniAppType.UniApp;
miniAppService.preloadMiniApp(context, miniAppId, config, new OnPreloadMiniAppListener() {
@Override
public void onPreloadSuccess(String appId) {
Log.i("PreloadMiniApp", "Mini App preload success");
}
@Override
public void onPreloadFailed(String appId, int errorCode) {
Log.i("PreloadMiniApp", "Mini App preload failed");
}
});
}获取当前容器中缓存的所有小程序信息
方法:
List<Map<String, String>> getMiniAppPkgInfoList(Context context)
参数:
参数 | 类型 | 描述 |
context | Context |
返回值:返回Map对象数组,每一个Map对象包含一个小程序的缓存信息。字段描述如下:
key | value | 描述 |
mini_app_id | String | 小程序id |
mini_app_name | String | 小程序名称 |
cache_size | String | 小程序缓存包大小 |
cache_version | String | 小程序缓存包版本 |
create_time | String | 小程序缓存包创建时间 |
last_access_time | String | 小程序缓存包上次访问时间 |
preload_pkg_size | String | 预加载包体积 |
preload_pkg_version | String | 预加载包版本 |
使用案例:
import com.alibaba.module.android.mini.app.api.IMiniAppService;
private void getMiniAppCacheInfo() {
MiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService == null){
return;
}
List<Map<String, String>> miniAppPkgInfoList = miniAppService.getMiniAppPkgInfoList(getContext());
}接口返回值示例:
[
{
mini_app_id=1512008766390152499200,
mini_app_name=AI Search,
cache_size=4096,
cache_version=0.0.26,
create_time=2026-01-21 16:38:54,
last_access_time=2026-01-21 16:38:54,
preload_pkg_size=4096,
preload_pkg_version=0.0.26
},
...
]删除当前容器中指定的小程序缓存
方法:
boolean removeMiniAppPackages(Context context, List<String> ids)
参数:
参数 | 类型 | 描述 |
context | Context | |
ids | List<String> | 待删除小程序id列表 |
返回值:
true 全部删除成功
false 有一个小程序删除失败
使用案例:
import com.alibaba.module.android.mini.app.api.IMiniAppService;
public void removeMiniAppPkgs(List<String> ids) {
if (ids == null || ids.isEmpty()) {
return;
}
MiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService == null){
return;
}
boolean b = miniAppService.removeMiniAppPackages(getContext(), ids);
}小程序下载次数统计
定义接口:
public interface IDownloadStatsObserver extends IBaseObserve {
void onMiniAppDownloadSuccess(Map<String, Object> result);
void onMiniAppDownloadFailed(Map<String, Object> result);
}回调方法参数:
key | value | 描述 |
mini_app_id | String | 小程序id |
mini_app_version | String | 小程序版本 |
注册使用案例:
import com.alibaba.module.android.mini.app.api.IMiniAppService;
private void registerObserver() {
MiniAppService miniAppService = ServiceManager.getInstance().getService(IMiniAppService.class.getName());
if (miniAppService == null){
return;
}
miniAppService.registerServiceObserver(new IDownloadStatsObserver() {
@Override
public void onMiniAppDownloadSuccess(Map<String, Object> result) {
Log.i("DownloadObserver", "Mini App download success");
}
@Override
public void onMiniAppDownloadFailed(Map<String, Object> result) {
Log.i("DownloadObserver", "Mini App download failed");
}
});
}