全部产品
Search
文档中心

SuperApp:小程序操作

更新时间:Jan 23, 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"];