ios_push_notification_service.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import 'package:flutter/services.dart';
  2. import 'package:mobile_use_statistics/flutter_mobile_statistics.dart';
  3. import '../data/bean/user_info.dart';
  4. import '../data/repositories/account_repository.dart';
  5. import '../data/repositories/phone_event_repository.dart';
  6. import '../data/repositories/track_repository.dart';
  7. import '../dialog/common_alert_dialog_impl.dart';
  8. import '../dialog/common_confirm_dialog_impl.dart';
  9. import '../handler/error_handler.dart';
  10. import '../module/login/login_page.dart';
  11. import '../module/member/member_page.dart';
  12. import '../module/track/track_dialog/track_choose_friend_dialog.dart';
  13. import '../module/track/track_page.dart';
  14. import '../sdk/wechat/wechat_share_util.dart';
  15. import '../utils/toast_util.dart';
  16. class IosPushNotificationService {
  17. static const MethodChannel _channel = MethodChannel('com.example.app/push_notification');
  18. // 回调函数
  19. static Function(String)? onTokenReceived;
  20. static Function(String)? onTokenError;
  21. static Function(Map<String, dynamic>)? onNotificationReceived;
  22. static Function(Map<String, dynamic>)? onNotificationTapped;
  23. // 初始化推送服务
  24. static void initialize() {
  25. _channel.setMethodCallHandler((call) async {
  26. switch (call.method) {
  27. case 'onTokenReceived':
  28. onTokenReceived?.call(call.arguments);
  29. break;
  30. case 'onTokenError':
  31. onTokenError?.call(call.arguments);
  32. break;
  33. case 'onNotificationReceived':
  34. if (call.arguments is Map) {
  35. onNotificationReceived?.call(Map<String, dynamic>.from(call.arguments));
  36. }
  37. break;
  38. case 'onNotificationTapped':
  39. if (call.arguments is Map) {
  40. onNotificationTapped?.call(Map<String, dynamic>.from(call.arguments));
  41. }
  42. break;
  43. case 'applicationDidFinishLaunchingWithOptions':
  44. ///第一次打开app
  45. MobileUseStatistics.appLaunchAnActivation();
  46. break;
  47. case 'applicationDidEnterBackground':
  48. //进入后台通知
  49. MobileUseStatistics.appEntersTheBacken();
  50. break;
  51. default:
  52. throw PlatformException(
  53. code: 'UNIMPLEMENTED',
  54. message: 'Method not implemented',
  55. details: null,
  56. );
  57. }
  58. });
  59. }
  60. // 请求推送权限
  61. static Future<bool> requestPermission() async {
  62. try {
  63. final bool? granted = await _channel.invokeMethod('requestPermission');
  64. return granted ?? false;
  65. } on PlatformException catch (e) {
  66. print('Failed to request permission: ${e.message}');
  67. return false;
  68. }
  69. }
  70. // 获取设备令牌
  71. static Future<String?> getDeviceToken() async {
  72. try {
  73. final String? token = await _channel.invokeMethod('getDeviceToken');
  74. print("Strdefdjifjd---${token}");
  75. return token;
  76. } on PlatformException catch (e) {
  77. print('Failed to get device token: ${e.message}');
  78. return null;
  79. }
  80. }
  81. ///处理推送各种点击
  82. static void handleNotificationPushChick(Map<String,dynamic> pushDict) {
  83. String skipType = pushDict["functionType"];
  84. if (skipType == "daily_track") {
  85. TrackRepository trackRepository = TrackRepository.getInstance();
  86. trackRepository.locationTrackDailyDialogs().then((trackResponse) {
  87. //print("trackResponsesfsfsd---${trackResponse}");
  88. if ((trackResponse.trackDailyList ?? []).isNotEmpty) {
  89. if ((trackResponse.trackDailyList ?? []).length == 1) {
  90. onViewTraceClic((trackResponse.trackDailyList ?? []).first);
  91. } else {
  92. TrackChooseFriendDialog.show(trackDailyList: trackResponse.trackDailyList,onSelectItem: (selectInfo) {
  93. onViewTraceClic(selectInfo);
  94. });
  95. }
  96. }
  97. }).catchError((error) {
  98. ErrorHandler.toastError(error);
  99. });
  100. }
  101. }
  102. static void onViewTraceClic(UserInfo userInfo) {
  103. AccountRepository accountRepository = AccountRepository.getInstance();
  104. if (!accountRepository.isLogin.value) {
  105. showTraceTipsDialog(onConfirm: () {
  106. LoginPage.start();
  107. });
  108. return;
  109. }
  110. if (!(userInfo.virtual ?? false) && accountRepository.memberIsExpired()) {
  111. MemberPage.start();
  112. return;
  113. }
  114. if (userInfo.blockedMe == true) {
  115. showBlockMeTipDialog(confirmOnTap: () {
  116. WechatShareUtil.shareWebPage().catchError((error) {
  117. ToastUtil.show(error.toString());
  118. });
  119. });
  120. return;
  121. }
  122. TrackPage.start(userInfo);
  123. }
  124. }