jpush_service.dart 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import 'dart:async';
  2. import 'package:jpush_flutter/jpush_flutter.dart';
  3. import 'package:sino_med_cloud/push/push_message.dart';
  4. import 'package:sino_med_cloud/push/push_service.dart';
  5. import '../core/constants/app_enum.dart';
  6. class JPushService implements PushService {
  7. final _jpush = JPush.newJPush();
  8. final _receiveController = StreamController<PushMessage>.broadcast();
  9. final _openController = StreamController<PushMessage>.broadcast();
  10. final _messageController = StreamController<PushMessage>.broadcast();
  11. @override
  12. Future<void> init() async {
  13. // 初始化 JPush
  14. _jpush.setup(
  15. appKey: '', // 从配置中获取
  16. channel: '', // 从配置中获取
  17. production: false, // 根据环境设置
  18. );
  19. // 添加事件处理器
  20. _jpush.addEventHandler(
  21. onReceiveNotification: (Map<String, dynamic> message) async {
  22. _receiveController.add(PushMessage.fromJson(message));
  23. },
  24. onOpenNotification: (Map<String, dynamic> message) async {
  25. _openController.add(PushMessage.fromJson(message));
  26. },
  27. onReceiveMessage: (Map<String, dynamic> message) async {
  28. _messageController.add(PushMessage.fromJson(message));
  29. },
  30. );
  31. }
  32. @override
  33. Stream<PushMessage> onMessage(PushEventType type) {
  34. switch (type) {
  35. case PushEventType.receiveNotification:
  36. return _receiveController.stream;
  37. case PushEventType.openNotification:
  38. return _openController.stream;
  39. case PushEventType.receiveMessage:
  40. return _messageController.stream;
  41. }
  42. }
  43. @override
  44. Future<void> setAlias(String alias) async {
  45. await _jpush.setAlias(alias);
  46. }
  47. @override
  48. Future<void> deleteAlias() async {
  49. await _jpush.deleteAlias();
  50. }
  51. @override
  52. Future<void> addTags(List<String> tags) async {
  53. await _jpush.addTags(tags);
  54. }
  55. @override
  56. Future<void> cleanTags() async {
  57. await _jpush.cleanTags();
  58. }
  59. void dispose() {
  60. _receiveController.close();
  61. _openController.close();
  62. _messageController.close();
  63. }
  64. }