Flutter 实现消息推送通常有以下几种方式:
1. 使用 Firebase Cloud Messaging (FCM)(推荐)
Firebase Cloud Messaging (FCM) 是 Google 提供的免费推送服务,支持 iOS 和 Android。
实现步骤:
(1)配置 Firebase 项目
- 在 Firebase 控制台 创建一个 Firebase 项目。
- 添加 Android 和 iOS 应用,并下载
google-services.json
(Android) 或GoogleService-Info.plist
(iOS) 文件。 - 将这些文件放到
android/app/
和ios/Runner/
目录中。
(2)安装依赖
在 pubspec.yaml
中添加:
yaml
dependencies:
firebase_core: latest_version
firebase_messaging: latest_version
然后运行:
sh
flutter pub get
(3)初始化 Firebase
在 main.dart
中初始化 Firebase:
dart
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
(4)请求通知权限
dart
import 'package:firebase_messaging/firebase_messaging.dart';
Future<void> requestPermission() async {
FirebaseMessaging messaging = FirebaseMessaging.instance;
NotificationSettings settings = await messaging.requestPermission(
alert: true,
announcement: false,
badge: true,
carPlay: false,
criticalAlert: false,
provisional: false,
sound: true,
);
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
print('用户已授权');
} else {
print('用户拒绝了通知权限');
}
}
(5)获取 FCM 令牌
dart
FirebaseMessaging messaging = FirebaseMessaging.instance;
void getToken() async {
String? token = await messaging.getToken();
print("FCM Token: $token");
}
服务器需要存储该 token
以便后续推送消息。
(6)监听消息
dart
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print('收到消息: ${message.notification?.title}');
});
(7)配置 Android
在 android/app/build.gradle
:
gradle
dependencies {
implementation 'com.google.firebase:firebase-messaging:latest_version'
}
(8)配置 iOS
- 在
ios/Runner/Info.plist
中添加:
xml
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
- 在
Runner.xcworkspace
中启用 Push Notifications。
2. 使用 OneSignal
如果不想用 Firebase,可以使用 OneSignal,支持更强大的推送功能。
步骤
- 在 OneSignal 控制台 注册并创建应用。
- 在
pubspec.yaml
添加:
yaml
dependencies:
onesignal_flutter: latest_version
- 在
main.dart
:
dart
import 'package:onesignal_flutter/onesignal_flutter.dart';
void main() {
OneSignal.shared.setAppId("YOUR_ONESIGNAL_APP_ID");
}
- 服务器调用 OneSignal API 发送推送。
3. 使用本地通知 (Flutter Local Notifications)
如果只需要本地通知(不依赖服务器),可以使用 flutter_local_notifications
。
步骤
- 在
pubspec.yaml
添加:
yaml
dependencies:
flutter_local_notifications: latest_version
- 初始化:
dart
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
void initNotifications() {
var androidSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
var iosSettings = IOSInitializationSettings();
var initSettings =
InitializationSettings(android: androidSettings, iOS: iosSettings);
flutterLocalNotificationsPlugin.initialize(initSettings);
}
- 发送本地通知:
dart
Future<void> showNotification() async {
var androidDetails = AndroidNotificationDetails(
'channelId', 'channelName',
importance: Importance.max, priority: Priority.high);
var iosDetails = IOSNotificationDetails();
var generalNotificationDetails =
NotificationDetails(android: androidDetails, iOS: iosDetails);
await flutterLocalNotificationsPlugin.show(
0, '测试通知', '这是通知内容', generalNotificationDetails);
}
总结
方式 | 适用场景 | 依赖 |
---|---|---|
Firebase Cloud Messaging (FCM) | 云端推送,适用于大多数应用 | firebase_messaging |
OneSignal | 第三方推送,支持多种推送策略 | onesignal_flutter |
本地通知 | 仅用于本地提醒,无需服务器 | flutter_local_notifications |