import 'dart:convert'; import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/tools/eventBusEventManage.dart'; import 'package:star_lock/tools/push/message_constant.dart'; import 'package:star_lock/tools/push/notification_service.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart'; class MessageManagement { //分析消息数据 static Future shunting(Map message) async { if (message.isEmpty) { return; } Map extra = {}; if (GetPlatform.isAndroid) { extra = _androidAnalysis(message); // AppLog.log('MessageManagement.shunting GetPlatform.isAndroid: $extra'); } else if (GetPlatform.isIOS) { extra = _iosAnalysis(message); // AppLog.log('MessageManagement.shunting GetPlatform.isIos: $extra'); } else { return; } if (extra.isEmpty) { return; } AppLog.log(message.toString()); _shuntingBus(extra); } //android解析 static Map _androidAnalysis(Map data) { // {alert: , extras: {cn.jpush.android.TYPE_PLATFORM: 0, cn.jpush.android.CONTENT_TYPE: , cn.jpush.android.MSG_ID: 18101501949885538, cn.jpush.android.EXTRA: {"eventNo":10,"keyId":530,"lockId":7}}, message: } // final Map extras = data['extras']; // final Map extra = // json.decode(extras['cn.jpush.android.EXTRA'] ?? '{}'); // return extra; final Map extras = data['extras']; final extraData = extras['cn.jpush.android.EXTRA']; if (extraData is String) { return json.decode(extraData); } else if (extraData is Map) { final Map extra = {}; extraData.forEach((key, value) { if (value is String && value.startsWith('{') && value.endsWith('}')) { // 处理value是JSON字符串的情况 try { extra[key.toString()] = json.decode(value); } catch (e) { extra[key.toString()] = value; } } else { extra[key.toString()] = value; } }); return extra; } return {}; } //ios解析 static Map _iosAnalysis(Map data) { // {content: , extras: {eventNo: 20, keyId: 580, lockId: 7}, _j_msgid: 18101504271412025} final Map extras = data['extras']; final Map extra = {}; extras.forEach((Object? key, Object? value) { extra[key!.toString()] = value; }); return extra; } //识别参数分发消息 static void _shuntingBus(Map data) { final int eventNo = data['eventNo'] ?? -1; switch (eventNo) { case MessageConstant.keyStateChange: final int keyId = data['keyId']; final int lockId = data['lockId']; eventBus.fire(RefreshLockInfoDataEvent(keyId: keyId, lockId: lockId)); break; case MessageConstant.keyDelete: final int keyId = data['keyId']; final int lockId = data['lockId']; eventBus.fire(DeleteLockInfoDataEvent(keyId: keyId, lockId: lockId)); break; case MessageConstant.lockReceive: final int keyId = data['keyId']; final int lockId = data['lockId']; eventBus.fire(RogerThatLockInfoDataEvent(keyId: keyId, lockId: lockId)); break; case MessageConstant.keyReceive: final int keyId = data['keyId']; final int lockId = data['lockId']; eventBus.fire(RogerThatLockInfoDataEvent(keyId: keyId, lockId: lockId)); break; case MessageConstant.lockSetChange: final int keyId = data['keyId']; final int lockId = data['lockId']; // 暂时只用刷新 // final Map extra = data['updateFieldList']; // if (extra['appUnlockOnline'] != null) { // final String appUnlockOnline = extra['appUnlockOnline']!.toString(); // } eventBus.fire(RefreshLockInfoDataEvent(keyId: keyId, lockId: lockId)); break; case MessageConstant.talkPushBigImage: // XSJPushProvider().showCustomNotification(data); break; default: throw Exception('无法识别eventNo 参数:$eventNo'); } } }