123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- /*
- * @Author: XianKaiQun
- * @LastEditors: wuwei
- * @Date: 2020-10-22 09:54:21
- * @LastEditTime: 2025-03-13 14:54:47
- */
- import 'dart:io';
- import 'package:flutter/material.dart';
- // import 'package:jpush_flutter/jpush_flutter.dart';
- // import 'package:permission_handler/permission_handler.dart';
- import 'package:wisdom_cli/wisdom_cli.dart';
- // export 'package:jpush_flutter/jpush_flutter.dart' show LocalNotification;
- typedef Future<dynamic> EventHandler(Map<String, dynamic> event);
- ///极光推送
- ///
- ///main函数中调用[WJpushUtil.setup],先注册极光且设置回调函数。
- ///
- ///然后再调用其他方法
- ///
- ///eg:
- ///在登录前后,登出前后调用相应方法操作[tags]
- ///
- ///登出后[stopPush]停止推送
- ///
- ///登录后[resumePush]恢复推送
- ///
- class WJpushUtil {
- WJpushUtil._();
- static WJpushUtil? _instance;
- static WJpushUtil? get instance {
- _instance ??= WJpushUtil._();
- return _instance;
- }
- bool _inited = false;
- late final _jpush;
- ///注册
- ///[appKey]IOS appKey
- ///
- ///[channel]channel
- ///
- ///[production]production
- ///
- ///[debug] 是否打印
- ///
- ///[sound] iOS10+ only 是否触发声音
- ///
- ///[alert] iOS10+ only 是否前台展示
- ///
- ///[badge] iOS10+ only 是否设置应用角标 badge
- ///
- ///[notificationSettingsIOS]Ios配置
- ///
- ///[onReceiveNotification]接收通知回调方法。
- ///
- ///[onOpenNotification]点击通知回调方法。
- ///
- ///[onReceiveMessage]接收自定义消息回调方法。
- ///
- void setup({
- required String appKey,
- String? channel,
- bool production: false,
- bool debug: true,
- bool sound = true,
- bool alert = true,
- bool badge = true,
- EventHandler? onReceiveNotification,
- EventHandler? onOpenNotification,
- EventHandler? onReceiveMessage,
- }) {
- // print('---------------------------------------------------------------------push in jpush class------------------------------');
- // if (_inited) {
- // debugPrint('重复注册JpushUtil,此次注册无效,请忽略');
- // return;
- // }
- // bool _isReadPrivacy = WisStorageUtil.get(key: 'isReadPrivacy') ?? false;
- // print(_isReadPrivacy);
- // print('---------------------------------------------------------------------isReadPrivacy--------------------------------');
- // // 检查用户是否同意隐私政策
- // if (!_isReadPrivacy) {
- // _jpush.setAuth(enable: false);
- // debugPrint('---------------------------------------------------------------------用户未同意隐私政策,极光推送初始化已跳过--------------------------------------------------------------------');
- // return;
- // }
- // _jpush = JPush();
- // _inited = true;
- // _jpush.addEventHandler(
- // onReceiveNotification: onReceiveNotification,
- // onOpenNotification: onOpenNotification,
- // onReceiveMessage: onReceiveMessage,
- // );
- // _jpush.setup(
- // appKey: appKey,
- // channel: channel ?? 'theChannel',
- // production: production,
- // debug: false,
- // );
- // // 允许极光收集
- // _jpush.setAuth(enable: true);
- // ///申请推送权限,注意这个方法只会向用户弹出一次推送权限请求,
- // ///该方法还配置IOS角标、是否有声音的工作等
- // ///如果用户不同意,之后只能用户到设置页面里面勾选相应权限,
- // ///配置IOS角标、是否有声音的工作
- // if (Platform.isIOS) {
- // _jpush.applyPushAuthority(
- // NotificationSettingsIOS(sound: true, alert: true, badge: true),
- // );
- // }
- ///Android权限申请
- // if (Platform.isAndroid){
- // WPermissionUtil.request(
- // service: Permission.notification,
- // deniedText: '无法获取您的通知权限,是否前往设置?',
- // guidance: true,
- // );
- // }
-
- }
- _check() {
- assert(_inited, '请先在main函数中调用WJpushUtil.setup初始化极光推送');
- }
- ///获取 registrationId,这个 JPush 运行通过 registrationId 来进行推送.
- Future<String> get getRegistrationID {
- _check();
- return _jpush.getRegistrationID();
- }
- ///停止推送功能,调用该方法将不会接收到通知。
- Future<void> stopPush() {
- _check();
- return _jpush.stopPush();
- }
- ///调用 stopPush 后,可以通过 resumePush 方法恢复推送。
- Future resumePush() {
- _check();
- return _jpush.resumePush();
- }
- ///设置别名,极光后台可以通过别名来推送,一个 App 应用只有一个别名,一般用来存储用户 id。
- Future<Map<dynamic, dynamic>> setAlias(String alias) {
- _check();
- return _jpush.setAlias(alias);
- }
- ///可以通过 deleteAlias 方法来删除已经设置的 alias。
- Future<Map<dynamic, dynamic>> deleteAlias() {
- _check();
- return _jpush.deleteAlias();
- }
- ///在原来的 Tags 列表上添加指定 tags。
- Future<Map<dynamic, dynamic>> addTags(List<String> tags) {
- _check();
- return _jpush.addTags(tags);
- }
- ///在原来的 Tags 列表上删除指定 tags。
- Future<Map<dynamic, dynamic>> deleteTags(List<String> tags) {
- _check();
- return _jpush.deleteTags(tags);
- }
- ///重置 tags。
- Future<Map<dynamic, dynamic>> setTags(List<String> tags) {
- _check();
- return _jpush.setTags(tags);
- }
- ///清空所有 tags
- Future<Map<dynamic, dynamic>> cleanTags() {
- _check();
- return _jpush.cleanTags();
- }
- ///获取当前 tags 列表。
- Future<Map<dynamic, dynamic>> get getAllTags {
- _check();
- return _jpush.getAllTags();
- }
- ///指定触发时间,添加本地推送通知。
- // Future<String> sendLocalNotification(LocalNotification notification) {
- // _check();
- // return _jpush.sendLocalNotification(notification);
- // }
- ///清除通知栏上所有通知。
- Future<void> clearAllNotifications() {
- _check();
- return _jpush.clearAllNotifications();
- }
- ///清空通知栏上某个通知
- void clearNotification(int notificationId) {
- _check();
- return _jpush.clearNotification(notificationId: notificationId);
- }
- ///设置应用 Badge(小红点)
- ///IOS/华为Android
- Future<void> setBadge(int badge) {
- _check();
- return _jpush.setBadge(badge);
- }
- /// iOS Only
- /// 点击推送启动应用的时候原生会将该 notification 缓存起来,该方法用于获取缓存 notification
- /// 注意:notification 可能是 remoteNotification 和 localNotification,两种推送字段不一样。
- /// 如果不是通过点击推送启动应用,比如点击应用 icon 直接启动应用,notification 会返回 @{}。
- /// @param {Function} callback = (Object) => {}
- ///
- Future<Map<dynamic, dynamic>> getLaunchAppNotification() async {
- _check();
- return _jpush.getLaunchAppNotification();
- }
- }
|