huawei_push_plus 1.0.0 copy "huawei_push_plus: ^1.0.0" to clipboard
huawei_push_plus: ^1.0.0 copied to clipboard

PlatformAndroid

华为推送服务的Flutter插件,专为华为设备设计,提供完整的HMS Push Kit集成,包括原生Badge功能。

huawei_push #

华为推送服务的Flutter插件,专为华为设备设计,提供完整的HMS Push Kit集成,支持在华为设备上接收和处理推送消息,包括原生Badge功能。

🚀 快速开始 #

1. 添加依赖 #

dependencies:
  huawei_push: ^0.0.1

2. 必需配置 #

下载配置文件 从华为开发者控制台下载 agconnect-services.json 文件,放置到 android/app/ 目录下。

项目级 build.gradle.kts

buildscript {
    repositories {
        google()
        mavenCentral()
        maven { url = uri("https://developer.huawei.com/repo/") }
    }
    dependencies {
        classpath("com.huawei.agconnect:agcp:1.5.2.300")
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url = uri("https://developer.huawei.com/repo/") }
    }
}

应用级 build.gradle.kts

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("dev.flutter.flutter-gradle-plugin")
    // 必需:手动添加AGConnect插件
    id("com.huawei.agconnect")
}

3. 开始使用 #

import 'package:huawei_push/huawei_push.dart';

// 初始化
await HuaweiPush.initialize();

// 获取Token
String? token = await HuaweiPush.getToken();

// 监听消息
HuaweiPush.onMessageReceived.listen((message) {
  print('收到推送: ${message.title}');
});

✅ 插件会自动处理权限、服务和其他配置,只需手动配置华为Maven仓库、AGConnect插件和配置文件!

📱 专为华为设备优化,支持原生Badge功能!

功能特性 #

  • ✅ 华为推送服务初始化
  • ✅ 获取和管理推送Token
  • ✅ 订阅和取消订阅主题
  • ✅ 接收推送消息
  • ✅ 处理消息点击事件
  • ✅ 通知渠道管理
  • ✅ 应用图标Badge管理(华为设备专用)
  • ✅ 自动Badge计数
  • ✅ 华为设备原生Badge支持

Badge功能 #

应用图标上的红点(Badge)功能,专为华为设备设计:

自动Badge管理 #

  • 收到推送消息时自动增加badge数量
  • 用户点击通知时自动清除badge
  • 应用启动时自动清除badge

手动Badge管理 #

// 设置badge数量
bool success = await HuaweiPush.setBadgeCount(5);

// 获取当前badge数量
int count = await HuaweiPush.getBadgeCount();

// 增加badge数量
int newCount = await HuaweiPush.incrementBadgeCount(increment: 3);

// 减少badge数量
int newCount = await HuaweiPush.decrementBadgeCount(decrement: 2);

// 清除badge
bool success = await HuaweiPush.clearBadge();

Badge变化监听 #

// 监听badge数量变化
HuaweiPush.onBadgeCountChanged.listen((count) {
  print('Badge数量变化: $count');
  // 更新UI显示
});

Badge使用场景 #

  1. 未读消息计数:显示未读消息数量
  2. 待处理任务:显示待处理任务数量
  3. 系统通知:显示系统通知数量
  4. 自定义计数:根据业务需求自定义计数

设备支持 #

  • 华为设备:使用华为原生Launcher API,支持度最佳
  • 通知badge:所有设备都支持通知栏中的数字显示

完整示例 #

安装 #

pubspec.yaml 文件中添加依赖:

dependencies:
  huawei_push: ^0.0.1

配置 #

Android配置 #

本插件支持部分自动配置,但某些关键配置仍需手动处理。

1. 必需配置

下载配置文件 从华为开发者控制台下载 agconnect-services.json 文件,并放置到 android/app/ 目录下。

项目级 build.gradle.kts(必需)

buildscript {
    repositories {
        google()
        mavenCentral()
        // 必需的华为Maven仓库
        maven { url = uri("https://developer.huawei.com/repo/") }
    }
    dependencies {
        // 必需的AGConnect插件
        classpath("com.huawei.agconnect:agcp:1.5.2.300")
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        // 必需的华为Maven仓库
        maven { url = uri("https://developer.huawei.com/repo/") }
    }
}

应用级 build.gradle.kts(必需)

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("dev.flutter.flutter-gradle-plugin")
    // 必需:手动添加AGConnect插件
    id("com.huawei.agconnect")
}

2. 自动配置 vs 手动配置

配置项 自动配置 手动配置
华为Maven仓库 ❌ 无法自动添加 必需手动添加
AGConnect插件(项目级) ❌ 无法自动添加 必需手动添加
AGConnect插件(应用级) ❌ 无法自动添加 必需手动添加
AGConnect依赖 ✅ 自动添加 ❌ 无需手动添加
推送权限 ✅ 自动添加 ❌ 无需手动添加
推送服务 ✅ 自动添加 ❌ 无需手动添加
agconnect-services.json ❌ 无法自动添加 必需手动添加

注意:由于Flutter插件架构限制,华为Maven仓库和AGConnect插件无法完全自动化配置。

3. 最小化配置方案

只需手动配置以下3项

  1. 项目级 build.gradle.kts - 添加华为Maven仓库和AGConnect插件
  2. 应用级 build.gradle.kts - 添加AGConnect插件
  3. agconnect-services.json - 下载并放置配置文件

其他所有配置(权限、服务、依赖)都会自动处理。

4. 版本要求

  • compileSdk: 35 或更高
  • minSdk: 21 或更高
  • Java版本: 11
  • Kotlin版本: 1.8.22 或更高

5. 测试验证

已验证功能

  • 华为推送服务初始化成功
  • 成功获取AAID:6a974dc0-3d1f-4bc8-a01b-82bda23a6d66
  • 成功获取推送Token:0869158020925737300028618400CN01
  • Token刷新回调正常工作
  • 推送消息接收正常

6. 注意事项

  • 确保应用包名与华为开发者控制台配置一致
  • 确保SHA256证书指纹与华为开发者控制台配置一致
  • 在华为设备上测试推送功能
  • 某些设备可能需要禁用"纯净模式"才能正常安装和运行应用
  • 关键:必须下载并正确放置 agconnect-services.json 文件,否则Token获取会失败
  • 关键:必须在应用级 build.gradle.kts 中手动添加AGConnect插件
  • 自动配置优势
    • 减少大部分手动配置工作
    • 自动检测并避免重复配置
    • 构建时会显示配置日志,便于调试

详细配置步骤请参考 华为推送集成指南。

使用方法 #

基础设置 #

import 'package:huawei_push/huawei_push.dart';

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    _initHuaweiPush();
  }

  Future<void> _initHuaweiPush() async {
    // 初始化华为推送服务
    await HuaweiPush.initialize();
    
    // 获取推送Token
    String? token = await HuaweiPush.getToken();
    print('推送Token: $token');
    
    // 监听推送消息
    HuaweiPush.onMessageReceived.listen((HuaweiPushMessage message) {
      print('收到推送消息: ${message.title}');
    });
    
    // 监听Token刷新
    HuaweiPush.onTokenRefresh.listen((HuaweiPushToken token) {
      print('Token已刷新: ${token.token}');
    });
    
    // 监听消息点击
    HuaweiPush.onMessageClicked.listen((HuaweiPushMessage message) {
      print('用户点击了消息: ${message.title}');
    });
  }
}

高级功能 #

// 主题订阅
await HuaweiPush.subscribe('news');
await HuaweiPush.subscribe('sports');

// 取消订阅
await HuaweiPush.unsubscribe('news');

// 控制自动初始化
await HuaweiPush.setAutoInitEnabled(false);
bool isEnabled = await HuaweiPush.isAutoInitEnabled();

// 创建通知渠道
await HuaweiPush.createNotificationChannel(
  channelId: 'important',
  channelName: '重要通知',
  channelDescription: '重要消息通知',
  importance: 4,
  enableLights: true,
  enableVibration: true,
);

// 删除通知渠道
await HuaweiPush.deleteNotificationChannel('important');

// 获取设备信息
String? aaid = await HuaweiPush.getAAID();
String? odid = await HuaweiPush.getODID();
String? creationTime = await HuaweiPush.getCreationTime();

// 获取初始消息(应用通过推送启动时)
HuaweiPushMessage? initialMessage = await HuaweiPush.getInitialMessage();
if (initialMessage != null) {
  print('应用通过推送启动: ${initialMessage.title}');
}

// 删除Token
await HuaweiPush.deleteToken();

数据模型 #

// 推送消息模型
class HuaweiPushMessage {
  final String? messageId;
  final String? messageType;
  final String? title;
  final String? body;
  final Map<String, dynamic>? data;
  final String? notificationId;
  final String? notificationTag;
  final String? clickAction;
  final String? channelId;
  final String? icon;
  final String? color;
  final String? sound;
  final int? timestamp;
}

// 推送Token模型
class HuaweiPushToken {
  final String token;
  final int timestamp;
  final String? tokenType;
}

完整示例 #

import 'package:flutter/material.dart';
import 'package:huawei_push/huawei_push.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _pushToken = 'No token';
  bool _isInitialized = false;
  final List<HuaweiPushMessage> _messages = [];

  @override
  void initState() {
    super.initState();
    _initializePush();
    _setupListeners();
  }

  Future<void> _initializePush() async {
    try {
      final result = await HuaweiPush.initialize();
      setState(() {
        _isInitialized = result;
      });
      
      if (result) {
        await _getToken();
      }
    } catch (e) {
      print('初始化失败: $e');
    }
  }

  Future<void> _getToken() async {
    try {
      final token = await HuaweiPush.getToken();
      setState(() {
        _pushToken = token ?? 'Failed to get token';
      });
    } catch (e) {
      print('获取Token失败: $e');
    }
  }

  void _setupListeners() {
    // 监听推送消息
    HuaweiPush.onMessageReceived.listen((HuaweiPushMessage message) {
      print('收到推送消息: ${message.title}');
      setState(() {
        _messages.add(message);
      });
    });

    // 监听Token刷新
    HuaweiPush.onTokenRefresh.listen((HuaweiPushToken token) {
      print('Token已刷新: ${token.token}');
      setState(() {
        _pushToken = token.token;
      });
    });

    // 监听消息点击
    HuaweiPush.onMessageClicked.listen((HuaweiPushMessage message) {
      print('用户点击了推送消息: ${message.title}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '华为推送示例',
      home: Scaffold(
        appBar: AppBar(title: const Text('华为推送示例')),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('初始化状态: ${_isInitialized ? '成功' : '失败'}'),
              Text('推送Token: $_pushToken'),
              Text('接收消息数: ${_messages.length}'),
            ],
          ),
        ),
      ),
    );
  }
}

支持平台 #

  • ✅ Android (华为设备)
  • ❌ iOS (华为推送服务不支持iOS)

测试环境 #

  • 设备: 华为 P9 (EVA AL00)
  • Android版本: 8.0
  • EMUI版本: 8.0
  • HMS Core版本: 6.15.0.311
  • Flutter版本: 3.19.0
  • 测试结果: ✅ 完全正常工作

注意事项 #

  • 华为推送服务仅在华为设备上可用
  • 需要在华为开发者联盟注册应用并开通推送服务
  • 确保应用包名与控制台配置一致
  • 在EMUI 10.0以下版本,Token可能需要通过onTokenRefresh流获取
  • 某些设备可能需要禁用"纯净模式"才能正常安装和运行应用
  • 重要: 必须按照配置要求手动添加华为Maven仓库和AGConnect插件
  • 重要: 必须正确放置 agconnect-services.json 配置文件

许可证 #

MIT License

0
likes
135
points
107
downloads

Publisher

unverified uploader

Weekly Downloads

华为推送服务的Flutter插件,专为华为设备设计,提供完整的HMS Push Kit集成,包括原生Badge功能。

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on huawei_push_plus