推荐一款 Flutter Push 推送功能插件

本文介绍如何使用极光推送服务实现跨平台的推送通知功能。通过详细的步骤指导,演示了如何在Flutter项目中集成极光推送插件,并在Android与iOS设备上实现消息推送。此外,还介绍了如何利用极光提供的API进行服务器端的批量推送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又到了推荐好插件的时候了。开发 APP 避免不了使用「推送」功能。比如,新上架一个商品,或者最新的一条体育新闻,实时推送给用户。

比较了几家推送平台,貌似「极光」出了 Flutter 插件,所以就拿它试试手,顺便记录下整个推送功能开发流程。

说到「推送」,自然有推送端和接收端,接收端自然包括 Android 端和 iOS 端。

demo

引入插件:

flutter_jpush: ^0.0.4
复制代码

main.dart 加入初始化代码:

void _initJPush() async {
  await FlutterJPush.startup();
  print("初始化jpush成功");

  // 获取 registrationID
  var registrationID =await FlutterJPush.getRegistrationID();
  print(registrationID);
  
  // 注册接收和打开 Notification()
  _initNotification();
}

void _initNotification() async {
  FlutterJPush.addReceiveNotificationListener(
    (JPushNotification notification) {
      print("收到推送提醒: $notification");
    }
  );

  FlutterJPush.addReceiveOpenNotificationListener(
    (JPushNotification notification) {
      print("打开了推送提醒: $notification");
    }
  );
}
复制代码

Android 配置

在极光后台创建应用,生成 appkey 等信息,Android 配置好说,添加包名即可。

在项目 Android 工程 build.gradle 代码中,增加配置信息:

defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.*.*"
        minSdkVersion 16
        targetSdkVersion 27
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        manifestPlaceholders = [
            JPUSH_PKGNAME : applicationId,
            JPUSH_APPKEY : "****", // 极光上注册的包名对应的appkey.
            JPUSH_CHANNEL : "developer-default",
        ]
    }
复制代码

好了,我们先在极光后台编写一条消息通知,看看效果。

当 APP 处于打开状态,通过命令好 log,我们能看到「收到推送提醒」:

同时,我们在通知栏上也能收到这条消息推送通知:

打开这条通知后,执行的是「addReceiveOpenNotificationListener」

就是这么简单。

iOS 配置

如何申请证书和签权,具体看极光的说明:docs.jiguang.cn/jpush/clien…

需要注意的是,先在 Xcode 那打开「Push Notifications」

在「iOS」工程下,添加极光配置信息:

增加
#include "FlutterJPushPlugin.h"

增加
[self startupJPush:launchOptions appKey:@"你的key" channel:@"你的渠道" isProduction:是否生产版本];
复制代码

好了,配置之后,dart 端还是上面的同样代码,还是利用极光的后台,推送一条测试通知,看看效果:

打开该通知后,也执行 print 了:

服务器编程推送

只要消息能到达客户端,那具体怎么使用,或者打开客户端跳转到具体页面,这些工作就好说了,此处就没必要展开说了。

剩下的就是后台接口推送通知了,总不能每次都要在「极光」后台做推送吧!

所以我们需要借助「极光」提供的接口了。

极光提供了多语言服务端 SDK,基本可以满足我们的集成需要了。

我还是以 Laravel 为案例,简要说一说集成。

1. composer.json 文件中添加 jpush 依赖.

"jpush/jpush": "^3.5"
复制代码

2. 写一个 demo 命令行推送服务:

Artisan::command('jpush', function () {
    $client = new \JPush\Client($app_key, $master_secret);
})->describe('jpush');
复制代码

3. 发送一个通知试试:

$client->push()
    ->setPlatform('all')
    ->addAllAudience()
    ->setNotificationAlert('你好, 极光推送')
    ->send();
复制代码

执行命令:php artisan jpush 看看:

okey,到目前为止,通过简单的例子,就可以把从服务端到客户端走通 Push 流程。

注:服务端 SDK 参考

github.com/jpush/jpush…

总结

如果知道怎么结合原生 Android 和 iOS 插件集成到 Flutter 上,那使用极光推送,也可以不需要官方提供的 Flutter 插件,相信你也能写。

相反地,使用官方提供的 Flutter 插件和集成文档,可以让我们快速的完成 push 通知功能,可以让我们更聚焦于我们的产品逻辑和功能上。

<think>根据用户的问题,用户希望了解在Flutter应用中实现消息推送的方法。结合提供的引用内容,我们可以总结出以下步骤: 1. **选择推送服务**:可以使用第三方推送服务,如极光推送(JPush)等。 2. **集成推送插件**:在Flutter中,可以使用插件来简化集成过程。例如,极光推送提供了官方支持的Flutter插件(jpush-flutter-plugin)。 3. **处理不同平台**:需要分别配置Android和iOS平台。 4. **处理通知栏消息**:如果使用透传消息,需要自己处理通知栏消息。推荐使用flutter_local_notifications插件。 具体步骤: ### 1. 添加依赖 在`pubspec.yaml`文件中添加依赖: ```yaml dependencies: jpush_flutter: ^2.2.0 # 以极光推送为例,版本号可能更新,请查看最新版本 flutter_local_notifications: ^9.7.0 # 用于本地通知 ``` ### 2. 配置Android平台 在`android/app/build.gradle`文件中,修改`defaultConfig`: ```groovy android { ... defaultConfig { applicationId "你的应用包名" ... ndk { abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a' } manifestPlaceholders = [ JPUSH_PKGNAME: applicationId, JPUSH_APPKEY : "你的AppKey", // 在极光后台注册应用得到的AppKey JPUSH_CHANNEL: "developer-default" ] } } ``` ### 3. 配置iOS平台 对于iOS,需要在`ios/Runner/Info.plist`中添加以下配置(根据极光推送文档要求): ```xml <key>JPUSH_APPKEY</key> <string>你的AppKey</string> <key>CHANNEL</key> <string>developer-default</string> <key>apsForProduction</key> <false/> <!-- 开发阶段为false,上线时改为true --> ``` ### 4. 初始化推送服务 在Flutter代码中初始化推送服务: ```dart import 'package:jpush_flutter/jpush_flutter.dart'; JPush jpush = JPush(); void initPush() async { await jpush.setup( appKey: "你的AppKey", channel: "developer-default", production: false, // 开发阶段为false,上线时改为true debug: true, // 是否打印调试日志 ); } ``` ### 5. 处理通知消息 如果使用透传消息(即自定义消息),需要自己处理通知栏的显示。这时可以使用`flutter_local_notifications`来显示通知。 首先,初始化`flutter_local_notifications`: ```dart import 'package:flutter_local_notifications/flutter_local_notifications.dart'; FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); void initLocalNotifications() async { const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('app_icon'); final InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: null, // 如果需要iOS,则配置iOSInitializationSettings ); await flutterLocalNotificationsPlugin.initialize(initializationSettings); } ``` 然后,在接收到透传消息时,触发本地通知: ```dart jpush.addEventHandler( onReceiveMessage: (Map<String, dynamic> message) async { // 这里处理透传消息,可以触发本地通知 showNotification(message); }, ); void showNotification(Map<String, dynamic> message) async { const AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails('your_channel_id', 'your_channel_name', importance: Importance.max, priority: Priority.high, showWhen: false); const NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics); await flutterLocalNotificationsPlugin.show( 0, message['title'] ?? '通知标题', message['message'] ?? '通知内容', platformChannelSpecifics, payload: 'item x'); } ``` ### 6. 请求权限 对于iOS,需要请求通知权限。可以使用`flutter_local_notifications`的`requestPermissions`方法(或极光推送提供的权限请求方法): ```dart // 使用flutter_local_notifications请求权限 await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()?.requestPermissions( alert: true, badge: true, sound: true, ); ``` ### 注意事项 - 在iOS上,需要配置推送证书,并在Apple开发者中心启用推送通知。 - 在Android上,需要确保应用拥有显示通知的权限(通常系统会自动授予,但部分手机可能需要用户手动开启)。 通过以上步骤,可以在Flutter应用中实现消息推送功能。具体细节可以参考插件的官方文档[^3][^4]。 §§相关问题§§ 1. 如何在Flutter中处理推送消息的点击事件? 2. Flutter消息推送如何实现后台消息处理? 3. 除了极光推送Flutter还有哪些常用的消息推送方案? 4. 如何测试Flutter应用的消息推送功能?</think>### Flutter实现消息推送的方法 在Flutter中实现消息推送功能,主要通过集成第三方推送服务SDK完成。以下是具体实现步骤: #### 1. **选择推送服务** - 推荐使用**极光推送(JPush)**、Firebase Cloud Messaging(FCM)或阿里云推送 - 极光推送提供官方Flutter插件支持多平台[^3] #### 2. **集成推送插件** 在`pubspec.yaml`中添加依赖: ```yaml dependencies: jpush_flutter: ^2.2.0 # 极光官方插件 flutter_local_notifications: ^9.7.0 # 本地通知处理[^1] ``` #### 3. **Android平台配置** 修改`android/app/build.gradle`: ```groovy android { defaultConfig { manifestPlaceholders = [ JPUSH_PKGNAME: applicationId, JPUSH_APPKEY: "你的AppKey", // 极光后台注册获取 JPUSH_CHANNEL: "developer-default" ] ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' // 按需选择 } } } ``` 在`AndroidManifest.xml`添加权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 13+ 需要 --> ``` #### 4. **iOS平台配置** 1. 在`Info.plist`添加: ```xml <key>JPUSH_APPKEY</key> <string>你的AppKey</string> <key>CHANNEL</key> <string>developer-default</string> <key>apsForProduction</key> <false/> <!-- 开发环境 --> ``` 2. 启用Push Notifications能力(Xcode > Signing & Capabilities) 3. 配置后台模式:Background Modes > Remote notifications #### 5. **初始化推送服务** ```dart import 'package:jpush_flutter/jpush_flutter.dart'; final JPush jpush = JPush(); Future<void> initPush() async { await jpush.setup( appKey: "你的AppKey", channel: "developer-default", production: false, // 开发环境=false ); // 监听消息事件 jpush.addEventHandler( onReceiveMessage: (Map<String, dynamic> msg) { print("收到透传消息: $msg"); _showLocalNotification(msg); // 转换为本地通知 }, onOpenNotification: (Map<String, dynamic> msg) { print("点击通知: $msg"); // 处理跳转逻辑 } ); } ``` #### 6. **处理本地通知** 使用`flutter_local_notifications`展示通知栏: ```dart Future<void> _showLocalNotification(Map<String, dynamic> msg) async { const AndroidNotificationDetails androidDetails = AndroidNotificationDetails( 'channel_id', '频道名称', importance: Importance.max, priority: Priority.high, ); await flutterLocalNotificationsPlugin.show( 0, msg['title'] ?? '新消息', msg['content'] ?? '您有新的消息', NotificationDetails(android: androidDetails), ); } ``` #### 7. **权限请求(iOS)** ```dart jpush.applyPushAuthority( NotificationSettingsIOS(sound: true, alert: true, badge: true) ); ``` #### 8. **测试推送** - 使用极光控制台发送测试消息 - 调试命令: ```dart jpush.getRegistrationID().then((rid) => print("设备ID: $rid")); ``` ### 关键注意事项 1. **Android 13+** 需要动态请求通知权限: ```dart flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>() ?.requestNotificationsPermission(); ``` 2. **iOS 后台处理**:需配置后台推送能力 3. **透传消息**:当应用在前台时,需要手动转换为本地通知[^1] 4. **推送证书**:iOS需上传APNs证书到推送服务平台 完整示例代码参考:[jpush-flutter-plugin GitHub][^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值