zm
2021-04-01 802c31297a1ae5b8c2e8fb5c62e9790dfc5d7583
commit | author | age
90c639 1 # 公共消息通道
Z 2
3 公共消息通道用于服务器端向小程序推送消息,基于事件系统和小程序定时请求服务端实现。
4
5 - 消息通道在小程序onHide时自动停止,在onShow时自动开始
6
7 - 消息通道每5秒请求一次
8
9 ## 小程序端使用
10
11 创建消息事件处理监听器,接受服务器端的数据
12
13 ```javascript
14 let removeTrigger = false; // 是否在出发后删除该处理器,这里设置成false,因为消息通道会有多次数据推送。
15 getApp().event.on('app_message_response', removeTrigger).then(response => {
16     console.log(response); // data=>服务器端推送的数据
17 });
18 ```
19
20 ## 服务器端使用
21
22 ### \Yii::$app->appMessage->push说明
23
24 在事件处理器中使用`\Yii::$app->appMessage->push(key, data);`实现推送数据
25
26 - key: 尽量确保key唯一,避免覆盖其他地方使用
27
28 - data: string或array类型
29
30 ### 非插件下使用
31
32 创建事件处理器app\handlers\AppMessageTestHandler
33
34 ```php
35 namespace app\handlers;
36 class AppMessageTestHandler extends HandlerBase
37 {
38     public function register()
39     {
40         // 此处必须是\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST事件
41         \Yii::$app->on(\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST, function ($event) {
42             // 推送消息
43             \Yii::$app->appMessage->push('test_msg', '测试消息');
44         });
45     }
46 }
47
48 ```
49
50 在app\handlers\HandlerRegister注册事件处理器
51
52 ```php
53 class HandlerRegister extends BaseObject
54 {
55     public function getHandlers()
56     {
57         return [
58             AppMessageTestHandler::class, // 注册事件处理器
59         ];
60     }
61 }
62
63 ```
64
65 ### 插件下使用
66
67 在插件的app\plugins\xxx\Plugin中实现handler方法,编写\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST事件处理器
68
69 ```php
70     public function handler()
71     {
72         // 举例,app message 请求事件
73         \Yii::$app->on(\Yii::$app->appMessage::EVENT_APP_MESSAGE_REQUEST, function ($event) {
74             \Yii::$app->appMessage->push('plugin_wxapp_test', '测试插件消息');
75         });
76     }
77 ```