Use the miniapp container SDK APIs to list, search, open, preview, and manage miniapps in your native app.
Get a miniapp list
Retrieves a list of available miniapps.
id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
if (miniAppService) {
// The default value of the anchor parameter is 0.
[miniAppService getMiniAppList:anchor completionBlock:^(int resultCode, NSArray * _Nonnull miniApps, NSString *anchor) {
// A resultCode of 200 indicates success.
// Returns up to 10 miniapps per request. Use the anchor parameter to retrieve more.
}];
}
Search for miniapps
Searches for miniapps by keyword.
id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
if (miniAppService) {
// keyword is the search term, and the default value of anchor is 0.
[miniAppService queryMiniApps:keyword anchor:anchor completionBlock:^(int resultCode, NSArray * _Nonnull miniApps, NSString *anchor) {
// A resultCode of 200 indicates a successful search.
// Returns up to 10 results per request. Use the anchor parameter to retrieve more.
}];
}
Open a miniapp
Opens a miniapp by its ID. The method is the same for WindVane and uni-app miniapps. Because this operation can take time, add UI feedback in the completion callback.
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) {
}];
}
Open a specific miniapp page
Set path to open a specific page and extraData to pass data to that page.
-
For uni-app miniapps,
pathis the page URL andextraDatacontains startup arguments, retrievable viaplus.runtime.arguments. -
For WindVane miniapps, pages are accessed via
https://{appId}.app.mini.windvane.suite.emas.alibaba.com/index.html#/{path}?key=value&key2=123. Your miniapp must use hash routing for page navigation.
id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
if (miniAppService) {
EMASMiniAppOpenConfiguration *config = [[EMASMiniAppOpenConfiguration alloc] init];
if (path.length > 0) {
// The deeplink path.
config.path = path;
}
if (params){
// Extended parameters.
config.extraData = params;
}
[miniAppService openMiniApp:self.appId openConfiguration:config completionBlock:^(int resultCode, NSDictionary * _Nonnull resultDict) {
NSLog(@"resultCode = %d, resultDict = %@",resultCode,resultDict);
if (resultCode == 200) {
// On success, the container automatically redirects the user to the miniapp.
}
}];
}
Preview a miniapp
Previews a miniapp using its ID and publishId, typically obtained by scanning a QR code from the Open Platform.
// miniAppId is the miniapp ID obtained from the Open Platform; P79127424345890**** is an example of 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) {
}];
}
}
Get category list
Retrieves all miniapp categories.
id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
if (miniAppService) {
[miniAppService queryMiniAppCategories:^(int resultCode, NSArray *resultArray) {
if (resultCode == 200) {
// A resultCode of 200 indicates success and returns the list of miniapp categories.
} else {
// Failed to get the list.
}
}];
}
Get miniapps by category
Retrieves miniapps in a specified category.
id<EMASMiniAppService> miniAppService = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniAppService"];
if (miniAppService) {
[miniAppService queryMiniAppsByCategory:categoryId completionBlock:^(int resultCode, NSArray * _Nonnull resultArray) {
if (resultCode == 200) {
// A resultCode of 200 indicates success and returns the list of miniapps.
} else {
// Failed to get the list.
}
}];
}
Preload miniapp packages
Preloads a miniapp package.
Method:
- (void)preloadMiniApp:(NSString *)appId openConfiguration:(EMASMiniAppOpenConfiguration *)openConfiguration completionBlock:(void(^)(int resultCode, NSDictionary *resultDict))completionBlock
Parameters:
|
Parameter |
Type |
Description |
|
appId |
String |
The miniapp ID. |
|
openConfiguration |
EMASMiniAppOpenConfiguration |
Miniapp open configuration. |
|
completionBlock |
Callback invoked after preloading completes. |
Usage example
#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];
// To preload a uni-app miniapp, specify the type as `EMASMiniAppTypeUniApp`.
// config.miniAppType = EMASMiniAppTypeUniApp;
[miniAppService preloadMiniApp:miniAppId openConfiguration:config completionBlock:^(int resultCode, NSDictionary * _Nonnull resultDict) {
NSLog(@"preloadMiniApp:resultCode:%d\nresultDict:%@", resultCode, resultDict);
}];
}
}
Get miniapp cache information
Method:
- (NSArray *)getMiniAppPkgInfoList;
Return value: An array of dictionaries, each containing cache metadata for one miniapp.
|
Key |
Value |
Description |
|
|
String |
The miniapp ID. |
|
|
String |
The name of the miniapp. |
|
|
String |
The size of the cached miniapp package in bytes. |
|
|
String |
The version of the cached miniapp package. |
|
|
String |
The creation time of the cached miniapp package. |
|
|
String |
The last access time of the cached miniapp package. |
|
|
String |
The size of the preloaded package in bytes. |
|
|
String |
The version of the preloaded package. |
Usage example:
#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);
}
}
Sample return value:
[
{
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
},
...
]
Delete miniapp caches
Method:
- (BOOL)removeMiniAppPackages:(NSArray<NSString *>*)miniAppIds
Parameters:
|
Parameter |
Type |
Description |
|
miniAppIds |
NSArray<NSString *> |
Miniapp IDs whose caches to delete. |
Return value:
YES: All specified caches deleted.
NO: One or more caches failed to delete.
Usage example:
#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];
}
}
}
Miniapp download statistics
Observer interface definition:
@protocol SAIDownloadStatsObserver <NSObject>
- (void)onMiniAppDownloadSuccess:(NSDictionary *)params;
- (void)onMiniAppDownloadFailed:(NSDictionary *)params;
@end
Callback parameters:
|
Key |
Value |
Description |
|
|
String |
The miniapp ID. |
|
|
String |
The miniapp version. |
Registration example:
#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);
}
Set the app language for miniapps
Sets the language for miniapps. Call this API whenever the language changes in your native app. It updates the appLanguage field returned by the (WindVane) JSAPI WVSystem.getSystemInfo method.
Note: This API takes effect only after the miniapp container is initialized.
[EMASMiniAppPortal.share setAppLanguage:@"XXX"];