全部產品
Search
文件中心

SuperApp:小程式操作

更新時間:Jan 24, 2026

Native App接入WindVane小程式容器或uni-app小程式容器後,可以搜尋小程式、擷取小程式列表或者開啟小程式。

擷取小程式列表

小程式容器SDK提供了擷取小程式列表的介面,如果僅是簡單的擷取小程式列表需求,可以直接使用SDK提供的介面完成。

id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];

if (miniAppService) {
   //anchor預設為0
  [miniAppService getMiniAppList:anchor completionBlock:^(int resultCode, NSArray * _Nonnull miniApps, NSString *anchor) {
  	 // resultCode 200為成功
     // 小程式列表,預設最多擷取10個,anchor用於擷取更多小程式
  }];
}

搜尋小程式

小程式容器SDK提供了搜尋小程式的介面,如果僅是簡單的搜尋需求,可以直接使用SDK提供的介面完成。

id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];

if (miniAppService) {
   //keyword是搜尋關鍵詞,anchor預設為0
  [miniAppService queryMiniApps:keyword anchor:anchor completionBlock:^(int resultCode, NSArray * _Nonnull miniApps, NSString *anchor) {
 		// resultCode 200為成功	
    //返回搜尋結果,預設最多擷取10個,anchor用於擷取更多結果
  }];
}

開啟小程式

通過小程式ID,即可開啟小程式。Windvane小程式和uni-app小程式的開啟檔案相同。開啟小程式會有一定耗時,建議在相關回調裡可以添加UI上的互動。

id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];

if (miniAppService) {
   EMASMiniAppOpenConfiguration *config = [[EMASMiniAppOpenConfiguration alloc] init];
   [miniAppService openMiniApp:appId openConfiguration:config completionBlock:^(int resultCode, NSDictionary * _Nonnull resultDict) {
            
    }];
}

開啟小程式指定頁面

開啟小程式時,可以通過配置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 來開啟對應頁面的。所以開發小程式時,需要使用雜湊路由來處理頁面跳轉的邏輯。

id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
    
if (miniAppService) {
    EMASMiniAppOpenConfiguration *config = [[EMASMiniAppOpenConfiguration alloc] init];
    if (path.length > 0) {
        //deeplink 路徑
        config.path = path;
    }
    if (params){
        //擴充參數
        config.extraData = params;
    }
    
    [miniAppService openMiniApp:self.appId openConfiguration:config completionBlock:^(int resultCode, NSDictionary * _Nonnull resultDict) {
        NSLog(@"resultCode = %d, resultDict = %@",resultCode,resultDict);
        if (resultCode == 200) {
            //開啟小程式成功,自動跳轉到小程式介面
        }
    }];
}

預覽小程式

通過小程式ID以及publishId,即可預覽小程式。一般通過開放平台“掃碼”擷取預覽參數,然後通過以下範例程式碼啟動預覽。

 //小程式id,從應用開放平台擷取,P79127424345890****:表示publishid
- (void)previewMiniApp:(NSString *)miniAppId publishId:(NSString *)publishId miniAppType:(EMASMiniAppType)miniAppType {
    id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
    if (miniAppService) {
        EMASMiniAppOpenConfiguration *config = [[EMASMiniAppOpenConfiguration alloc] init];
        config.miniAppType = miniAppType;
        [miniAppService previewMiniApp:miniAppId publishId:publishId openConfiguration:config completionBlock:^(int resultCode, NSDictionary * _Nonnull resultDict) {
            
        }];
    }
}

擷取分類列表

小程式容器SDK提供了擷取分類列表的介面。

id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
    if (miniAppService) {
        [miniAppService queryMiniAppCategories:^(int resultCode, NSArray *resultArray) {
            if (resultCode == 200) {
               //resultCode 200為成功 小程式分類列表
            } else {
              //擷取列表失敗
               }
        }];
    }

擷取分類下的小程式列表

小程式容器SDK提供了擷取某個分類下的小程式列表的介面。

id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
   if (miniAppService) {
        [miniAppService queryMiniAppsByCategory:categoryId completionBlock:^(int resultCode, NSArray * _Nonnull resultArray) {
            if (resultCode == 200) {
                //resultCode 200為成功 小程式列表
            } else {
               //擷取列表失敗
            }
        }];
    }

小程式包預先載入

小程式容器SDK提供了小程式包預先載入的介面。

方法:

- (void)preloadMiniApp:(NSString *)appId openConfiguration:(EMASMiniAppOpenConfiguration *)openConfiguration completionBlock:(void(^)(int resultCode, NSDictionary *resultDict))completionBlock

參數:

參數

類型

描述

appId

String

小程式id

openConfiguration

EMASMiniAppOpenConfiguration

completionBlock

預先載入回調

使用案例

#import <EMASServiceManager/EMASServiceManager.h>
#import <EMASMiniAppApi/EMASMiniAppService.h>


- (void)preloadMiniApp:(NSString *)miniAppId {
    id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
    if (miniAppService) {
        EMASMiniAppOpenConfiguration *config = [[EMASMiniAppOpenConfiguration alloc] init];
        // If you plan to preload the uni mini app, please specify the "EMASMiniAppTypeUniApp" type
//        config.miniAppType = EMASMiniAppTypeUniApp;
        [miniAppService preloadMiniApp:miniAppId openConfiguration:config completionBlock:^(int resultCode, NSDictionary * _Nonnull resultDict) {
            NSLog(@"preloadMiniApp:resultCode:%d\nresultDict:%@", resultCode, resultDict);
        }];
    }
}

擷取當前容器中緩衝的所有小程式資訊

方法:

- (NSArray *)getMiniAppPkgInfoList;

傳回值:返回字典對象數組,每一個字典對象包含一個小程式的緩衝資訊。欄位描述如下:

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 <EMASServiceManager/EMASServiceManager.h>
#import <EMASMiniAppApi/EMASMiniAppService.h>

- (void)getMiniAppCacheInfo {
    id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
    if (miniAppService) {
        NSArray *caches = [miniAppService getMiniAppPkgInfoList];
        NSLog(@"getMiniAppInfoList:%@", caches);
        
    }
}

介面傳回值樣本:

[
    {
        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
    },
    ...
]

刪除當前容器中指定的小程式緩衝

方法:

- (BOOL)removeMiniAppPackages:(NSArray<NSString *>*)miniAppIds

參數:

參數

類型

描述

miniAppIds

NSArray<NSString *>

待刪除小程式id列表

傳回值:

YES 全部刪除成功

NO 有一個小程式刪除失敗

使用案例:

#import <EMASServiceManager/EMASServiceManager.h>
#import <EMASMiniAppApi/EMASMiniAppService.h>

- (void)removeMiniAppPkgs:(NSArray<NSString *>*)miniAppIds {
    if (miniAppIds && miniAppIds.count > 0) {
        id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
        if (miniAppService) {
            BOOL isSuccess = [miniAppService removeMiniAppPackages:miniAppIds];
        }
    }
    
}

小程式下載次數統計

定義介面:

@protocol SAIDownloadStatsObserver <NSObject>

- (void)onMiniAppDownloadSuccess:(NSDictionary *)params;
- (void)onMiniAppDownloadFailed:(NSDictionary *)params;

@end

回調方法參數:

key

value

描述

mini_app_id

String

小程式id

mini_app_version

String

小程式版本

註冊使用案例:

#import <EMASMiniAppService/SAIDownloadStatsObserver.h>
#import <EMASServiceManager/EMASServiceManager.h>
#import <EMASMiniAppApi/EMASMiniAppService.h>

- (void)registerObserver {
    id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
    if (miniAppService) {
        [miniAppService registerServiceObserver:self];
    }
}

- (void)onMiniAppDownloadFailed:(NSDictionary *)params {
    NSLog(@"------onMiniAppDownloadFailed:%@", params);
}

- (void)onMiniAppDownloadSuccess:(NSDictionary *)params {
    NSLog(@"------onMiniAppDownloadSuccess:%@", params);
}

設定小程式擷取的app語言

小程式容器SDK提供了App應用內設定/更換語言時更新小程式擷取語言的介面,設定後會在(WindVane)JSAPI的WVSystem.getSystemInfo介面中更新appLanguage欄位的值;

注意該介面在容器初始化後生效。

[EMASMiniAppPortal.share setAppLanguage:@"XXX"];