Flutter推送通知实现 本地与远程通知配置

在Flutter中实现推送通知时,本地通知和远程通知的具体配置步骤是什么?

我尝试使用firebase_messaging插件配置远程通知,但收不到推送,检查了Firebase后台配置和SHA1证书都没问题,可能是什么原因?

本地通知用flutter_local_notifications插件时,如何在Android和iOS上统一设置通知图标?特别是Android的默认白色图标经常不显示。

测试时发现iOS模拟器收不到远程推送,真机测试却正常,这是模拟器限制还是配置问题?

远程通知后台唤醒应用的处理逻辑应该写在哪里?是否需要单独处理kill状态下的通知点击?

3 回复

作为一个屌丝程序员,我可以分享下Flutter推送通知的实现方法:

  1. 本地通知:使用flutter_local_notifications插件。首先添加依赖,然后初始化,比如设置渠道(Android)和图标等。发送通知时调用show()方法,传入标题、内容和时间即可。

  2. 远程通知

    • Android:需要在AndroidManifest.xml中声明FirebaseMessaging服务,并在build.gradle里配置google-services插件。接收消息需重写onMessage()onBackgroundMessage()等方法。
    • iOS:需要配置APNs证书,在Xcode中设置Bundle ID并启用Push Notifications能力。在Flutter端,使用firebase_messaging插件监听消息。
    • 后端:通过Fcm或APNs发送远程通知。

记住,iOS对推送要求严格,确保域名加了Apple推送通知服务白名单。别忘了测试各种场景下的消息接收情况!

更多关于Flutter推送通知实现 本地与远程通知配置的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


作为屌丝程序员,我来简单说下Flutter推送通知的本地和远程通知配置。

  1. 本地通知:使用flutter_local_notifications插件。

    • 配置Android:在AndroidManifest.xml中添加权限和接收器。
    • 初始化插件,在需要的地方创建通知:例如await flutterLocalNotificationsPlugin.show(0, '标题', '内容', payload);
    • iOS直接初始化即可,无需额外配置。
  2. 远程通知

    • 需要后端发送通知,前端需配置firebase_messaging插件。
    • Android:在AndroidManifest.xml添加服务,获取FCM Token。
    • iOS:配置APNs,设置GoogleService-Info.plist,并请求通知权限。
    • 示例代码:
      FirebaseMessaging messaging = FirebaseMessaging.instance;
      String token = await messaging.getToken();
      messaging.setForegroundNotificationPresentationOptions(alert: true);
      messaging.onMessage.listen((RemoteMessage message) {
        print(message.notification?.title);
      });
      
    • 注意:确保前后端都正确配置Firebase服务。

屌丝程序员表示,这个配置还是有点复杂,但网上资料很多,慢慢啃吧!

Flutter 推送通知实现:本地与远程通知配置

在Flutter中实现推送通知主要涉及本地通知和远程(Firebase)通知两种方式。以下是基本配置方法:

本地通知实现

使用flutter_local_notifications插件:

// 添加依赖到pubspec.yaml
// flutter_local_notifications: ^latest_version

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

Future<void> initLocalNotifications() async {
  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher');
  
  final InitializationSettings initializationSettings =
      InitializationSettings(android: initializationSettingsAndroid);
  
  await flutterLocalNotificationsPlugin.initialize(
    initializationSettings,
  );
}

Future<void> showLocalNotification() async {
  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
    'your_channel_id',
    'your_channel_name',
    importance: Importance.max,
    priority: Priority.high,
  );
  
  const NotificationDetails platformChannelSpecifics =
      NotificationDetails(android: androidPlatformChannelSpecifics);
  
  await flutterLocalNotificationsPlugin.show(
    0,
    '本地通知标题',
    '本地通知内容',
    platformChannelSpecifics,
  );
}

远程通知实现(Firebase)

使用firebase_messaging插件:

// 添加依赖
// firebase_core: ^latest_version
// firebase_messaging: ^latest_version

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';

Future<void> initFirebaseMessaging() async {
  await Firebase.initializeApp();
  
  FirebaseMessaging messaging = FirebaseMessaging.instance;
  
  // 获取FCM token
  String? token = await messaging.getToken();
  print("FCM Token: $token");
  
  // 请求通知权限
  NotificationSettings settings = await messaging.requestPermission(
    alert: true,
    badge: true,
    sound: true,
  );
  
  // 监听消息
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    print('收到前台消息: ${message.notification?.title}');
  });
  
  FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
    print('通过通知打开的App: ${message.notification?.title}');
  });
}

后台消息处理

android/app/src/main/AndroidManifest.xml中添加:

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

创建对应的服务类处理后台消息。

记得在pubspec.yaml中添加所需依赖并运行flutter pub get。对于iOS,还需要在Xcode中配置推送通知能力。

回到顶部