公共消息通道用于服务器端向小程序推送消息,基于事件系统和小程序定时请求服务端实现。
消息通道在小程序onHide时自动停止,在onShow时自动开始
消息通道每5秒请求一次
创建消息事件处理监听器,接受服务器端的数据
let removeTrigger = false; // 是否在出发后删除该处理器,这里设置成false,因为消息通道会有多次数据推送。
getApp().event.on('app_message_response', removeTrigger).then(response => {
console.log(response); // data=>服务器端推送的数据
});
在事件处理器中使用\Yii::$app->appMessage->push(key, data);
实现推送数据
key: 尽量确保key唯一,避免覆盖其他地方使用
data: string或array类型
创建事件处理器app\handlers\AppMessageTestHandler
namespace app\handlers;
class AppMessageTestHandler extends HandlerBase
{
public function register()
{
// 此处必须是\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST事件
\Yii::$app->on(\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST, function ($event) {
// 推送消息
\Yii::$app->appMessage->push('test_msg', '测试消息');
});
}
}
在app\handlers\HandlerRegister注册事件处理器
class HandlerRegister extends BaseObject
{
public function getHandlers()
{
return [
AppMessageTestHandler::class, // 注册事件处理器
];
}
}
在插件的app\plugins\xxx\Plugin中实现handler方法,编写\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST事件处理器
public function handler()
{
// 举例,app message 请求事件
\Yii::$app->on(\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST, function ($event) {
\Yii::$app->appMessage->push('plugin_wxapp_test', '测试插件消息');
});
}