All Products
Search
Document Center

SuperApp:Miniapp operations

Last Updated:Jun 02, 2026

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.

Note
  • For uni-app miniapps, path is the page URL and extraData contains startup arguments, retrievable via plus.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

mini_app_id

String

The miniapp ID.

mini_app_name

String

The name of the miniapp.

cache_size

String

The size of the cached miniapp package in bytes.

cache_version

String

The version of the cached miniapp package.

create_time

String

The creation time of the cached miniapp package.

last_access_time

String

The last access time of the cached miniapp package.

preload_pkg_size

String

The size of the preloaded package in bytes.

preload_pkg_version

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

mini_app_id

String

The miniapp ID.

mini_app_version

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"];