全部产品
Search
文档中心

SuperApp:uni-app小程序扩展

更新时间:Oct 25, 2024

此文档中的功能为uni-app专用,用于宿主App和小程序发送和接收事件。

宿主App向小程序发送事件

API

@protocol EMASMiniAppService <NSObject>

/**
 * 向小程序发送事件,仅用于uni-app
 * @param event 事件名称
 * @param appId 小程序id
 * @param data 数据:NSString 或 NSDictionary 类型
 */
-(void)sendEvent:(NSString *)event appId:(NSString *)appId data:(id __nullable)data;

示例如下:

id<EMASMiniAppService> service = [[EMASServiceManager sharedInstance] serviceForProtocol:@"EMASMiniService"];
if (service && miniAppId.length > 0) {
	[service sendEvent:@"NativeEvent" appId:miniAppId data:@{@"msg":@"native message"}];
}

小程序接收宿主App发送事件

uni.onNativeEventReceive((event,data)=>{
	console.log('接收到宿主App消息:' + event + data);
	this.nativeMsg = '接收到宿主App消息 event:' + event + " data: " + data;
})

参数说明

属性

类型

说明

event

String

事件名称

data

String或JsonObject

宿主传递的数据

小程序向宿主App发送事件

向宿主App发送事件

uni.sendNativeEvent(event,callback)

参数说明:

属性

类型

说明

event

String

事件名称

data

String / JsonObject

事件携带参数

callback

Function

宿主App回调方法。参数类型:String或JsonObject,取决于宿主的实现。

示例如下:

// 向宿主App发送事件
uni.sendNativeEvent('unimp-event', {
	msg: 'unimp message!!!'
}, ret => {
	this.nativeMsg = '宿主App回传的数据:' + ret;
})

宿主接收小程序发送的事件

当接收到小程序发送的事件会触发EMASMiniAppService的block回调时,需宿主App通过setEventReceiveBlock设置block。

@protocol EMASMiniAppService <NSObject>


/** 小程序向原生发送事件回调方法,仅用于UniApp
 *  @param EMASUniAppReceiveEventBlock 设置事件回调block,block中具体参数如下
 *  @param event 事件名称
 *  @param appid 对应小程序的appid
 *  @param data 数据:NSString 或 NSDictionary 类型
 *  @param callback 回调数据给小程序
 */
-(void)setEventReceiveBlock:(EMASUniAppReceiveEventBlock)receiveBlock;

EMASUniAppKeepAliveCallback说明
/**
 * 回调数据给小程序
 * result:回调参数支持 NSString 或 NSDictionary 类型
 * keepAlive:如果 keepAlive 为 YES,则可以多次回调数据给小程序,反之触发一次后回调方法即被移除
 */
typedef void (^EMASUniAppKeepAliveCallback)(id result, BOOL keepAlive);

EMASUniAppReceiveEventBlock说明
/** EMASUniAppReceiveEventBlock 设置小程序向原生发送事件回调block,仅用于UniApp
 *  @param event 事件名称
 *  @param appid 对应小程序的appid
 *  @param data 数据:NSString 或 NSDictionary 类型
 *  @param callback 回调数据给小程序
 */
typedef void(^EMASUniAppReceiveEventBlock)(NSString *event, NSString *appId, id __nullable data, EMASUniAppKeepAliveCallback callback);

示例如下:

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

// 接收小程序发送的事件方法
[service setEventReceiveBlock:^(NSString *event, NSString *appId, id  _Nullable data, EMASUniAppKeepAliveCallback callback) {

  NSLog(@"Receive UniMP event: %@ data: %@, appId: %@",event, data, appId);

  // 回传数据给小程序
  // EMASUniAppKeepAliveCallback 用法请查看定义说明
  if (callback) {
  	callback(@"native callback message",NO);
  }
}];