ios_push_notification_service.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. UserInfo seleUseInfo = (trackResponse.trackDailyList ?? []).first;
  91. seleUseInfo.isShowYesterday = true;
  92. onViewTraceClic((trackResponse.trackDailyList ?? []).first);
  93. } else {
  94. TrackChooseFriendDialog.show(trackDailyList: trackResponse.trackDailyList,onSelectItem: (selectInfo) {
  95. selectInfo.isShowYesterday = true;
  96. onViewTraceClic(selectInfo);
  97. });
  98. }
  99. }
  100. }).catchError((error) {
  101. ErrorHandler.toastError(error);
  102. });
  103. }
  104. }
  105. static void onViewTraceClic(UserInfo userInfo) {
  106. AccountRepository accountRepository = AccountRepository.getInstance();
  107. if (!accountRepository.isLogin.value) {
  108. showTraceTipsDialog(onConfirm: () {
  109. LoginPage.start();
  110. });
  111. return;
  112. }
  113. if (!(userInfo.virtual ?? false) && accountRepository.memberIsExpired()) {
  114. MemberPage.start();
  115. return;
  116. }
  117. if (userInfo.blockedMe == true) {
  118. showBlockMeTipDialog(confirmOnTap: () {
  119. WechatShareUtil.shareWebPage().catchError((error) {
  120. ToastUtil.show(error.toString());
  121. });
  122. });
  123. return;
  124. }
  125. TrackPage.start(userInfo);
  126. }
  127. }