commit | author | age
|
2207d6
|
1 |
# 公共消息通道 |
W |
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 |
``` |