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");
}
});
}