edit | blame | history | raw

公共消息通道

公共消息通道用于服务器端向小程序推送消息,基于事件系统和小程序定时请求服务端实现。

  • 消息通道在小程序onHide时自动停止,在onShow时自动开始

  • 消息通道每5秒请求一次

小程序端使用

创建消息事件处理监听器,接受服务器端的数据

let removeTrigger = false; // 是否在出发后删除该处理器,这里设置成false,因为消息通道会有多次数据推送。
getApp().event.on('app_message_response', removeTrigger).then(response => {
    console.log(response); // data=>服务器端推送的数据
});

服务器端使用

\Yii::$app->appMessage->push说明

在事件处理器中使用\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', '测试插件消息');
        });
    }