app-starlock/lib/tools/push/xs_jPhush.dart

140 lines
5.1 KiB
Dart
Executable File

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:jpush_flutter/jpush_flutter.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/push/message_management.dart';
import 'package:star_lock/tools/push/notification_service.dart';
import 'package:star_lock/tools/storage.dart';
import '../../app_settings/app_settings.dart';
class XSJPushProvider {
final JPush jpush = JPush();
// appKey: 251fc8074820d122b6de58d2--鑫泓佳AppKey
// appKey: 7ff37d174c1a568a89e98dad--sky
Future<void> initJPushService() async {
final String? data = await Storage.getString(saveUserLoginData);
if (data == null || data.isEmpty) {
AppLog.log('No user data found.');
return;
}
print('jPushKey ${F.jPushKey}');
// final String? bundleIdentifier =
// await NativeInteractionTool().getBundleIdentifier();
// print('bundleIdentifier: $bundleIdentifier');
jpush.setup(
appKey: F.jPushKey,
channel: 'flutter_channel',
production: F.isProductionEnv,
debug: !F.isProductionEnv,
);
jpush.applyPushAuthority(
const NotificationSettingsIOS(sound: true, alert: true, badge: false),
);
addJPushEventHandler();
AppLog.log('JPush initialized.');
final String rid = await jpush.getRegistrationID();
print('flutter get registration id : $rid');
pushBindDeviceID(rid);
}
//极光推送事件处理方法
void addJPushEventHandler() {
jpush.addEventHandler(
onReceiveNotification: (Map<String, dynamic> message) async {
AppLog.log('onReceiveNotification: $message');
// 这里可以用 flutter_local_notifications 自定义通知样式
showCustomNotification(message);
},
onOpenNotification: (Map<String, dynamic> message) async {
AppLog.log('onOpenNotification: $message');
},
onReceiveMessage: (Map<String, dynamic> message) async {
AppLog.log('onReceiveMessage: $message');
//这里接收自定义消息
MessageManagement.shunting(message);
},
onReceiveNotificationAuthorization: (Map<String, dynamic> message) async {
AppLog.log('onReceiveNotificationAuthorization: $message');
},
onInAppMessageShow: (Map<String, dynamic> message) async {
AppLog.log('onInAppMessageShow: $message');
},
onConnected: (Map<String, dynamic> message) async {
//绑定设备id
final String rid = await jpush.getRegistrationID();
AppLog.log('onConnected registration id : $rid');
await Storage.setString(pushDeviceID, rid);
await pushBindDeviceID(rid);
return Future.value();
},
);
// Remove the incorrect addEventHandler call
}
Future<void> showCustomNotification(Map<String, dynamic> message) async {
final String title = message['notification']['android']['title'] ?? '默认标题';
final String content =
message['notification']['android']['alert'] ?? '默认内容';
final String imageUrl = message['notification']['android']['extras']
?['image_url']; // 从 extras 获取图片
NotificationService().showImageNotification(title, content, imageUrl);
}
Future<void> pushBindDeviceID(String deviceID) async {
try {
if (deviceID.isEmpty) {
AppLog.log('Device ID is empty.');
//绑定设备id
final String rid = await jpush.getRegistrationID();
AppLog.log('onConnected registration id : $rid');
deviceID = rid;
}
await Storage.setString(pushDeviceID, deviceID);
final MineUnbindPhoneOrEmailEntity entity = await ApiRepository.to
.pushBindAppId(deviceID, Platform.isAndroid ? 10 : 20);
if (entity.errorCode!.codeIsSuccessful) {
AppLog.log('绑定成功');
} else {
AppLog.log('绑定失败');
}
} catch (e) {
AppLog.log('Error binding device ID: $e');
}
}
//本地通知初始化 isCancelLocalPush 是否取消所有本地通知
Future<void> initLocalNotification({required bool isCancelLocalPush}) async {
WidgetsFlutterBinding.ensureInitialized();
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
if (Platform.isAndroid) {
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon');
const InitializationSettings initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
if (isCancelLocalPush) {
await flutterLocalNotificationsPlugin.cancelAll();
}
}
}