|
|
@@ -0,0 +1,74 @@
|
|
|
+import 'dart:async';
|
|
|
+import 'package:jpush_flutter/jpush_flutter.dart';
|
|
|
+import 'package:sino_med_cloud/push/push_message.dart';
|
|
|
+import 'package:sino_med_cloud/push/push_service.dart';
|
|
|
+
|
|
|
+import '../core/constants/app_enum.dart';
|
|
|
+
|
|
|
+class JPushService implements PushService {
|
|
|
+ final _jpush = JPush.newJPush();
|
|
|
+ final _receiveController = StreamController<PushMessage>.broadcast();
|
|
|
+ final _openController = StreamController<PushMessage>.broadcast();
|
|
|
+ final _messageController = StreamController<PushMessage>.broadcast();
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> init() async {
|
|
|
+ // 初始化 JPush
|
|
|
+ _jpush.setup(
|
|
|
+ appKey: '', // 从配置中获取
|
|
|
+ channel: '', // 从配置中获取
|
|
|
+ production: false, // 根据环境设置
|
|
|
+ );
|
|
|
+
|
|
|
+ // 添加事件处理器
|
|
|
+ _jpush.addEventHandler(
|
|
|
+ onReceiveNotification: (Map<String, dynamic> message) async {
|
|
|
+ _receiveController.add(PushMessage.fromJson(message));
|
|
|
+ },
|
|
|
+ onOpenNotification: (Map<String, dynamic> message) async {
|
|
|
+ _openController.add(PushMessage.fromJson(message));
|
|
|
+ },
|
|
|
+ onReceiveMessage: (Map<String, dynamic> message) async {
|
|
|
+ _messageController.add(PushMessage.fromJson(message));
|
|
|
+ },
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Stream<PushMessage> onMessage(PushEventType type) {
|
|
|
+ switch (type) {
|
|
|
+ case PushEventType.receiveNotification:
|
|
|
+ return _receiveController.stream;
|
|
|
+ case PushEventType.openNotification:
|
|
|
+ return _openController.stream;
|
|
|
+ case PushEventType.receiveMessage:
|
|
|
+ return _messageController.stream;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> setAlias(String alias) async {
|
|
|
+ await _jpush.setAlias(alias);
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> deleteAlias() async {
|
|
|
+ await _jpush.deleteAlias();
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> addTags(List<String> tags) async {
|
|
|
+ await _jpush.addTags(tags);
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> cleanTags() async {
|
|
|
+ await _jpush.cleanTags();
|
|
|
+ }
|
|
|
+
|
|
|
+ void dispose() {
|
|
|
+ _receiveController.close();
|
|
|
+ _openController.close();
|
|
|
+ _messageController.close();
|
|
|
+ }
|
|
|
+}
|