Flutter推送通知插件push_notification_service的使用
Flutter推送通知插件push_notification_service的使用
为了在Dart项目中设置Firebase推送通知,您可以按照以下步骤操作:
1. 安装FlutterFire CLI
dart pub global activate flutterfire_cli
登录或退出Firebase以确保您使用的是正确的Google账户:
firebase login/logout
2. 配置Firebase
运行以下命令,并选择Android和iOS平台来自动注册您的应用并下载配置文件:
flutterfire configure
3. 添加Firebase核心库
将基本的Firebase配置添加到您的项目中:
flutter pub add firebase_core
使用最新的版本,例如^2.22.0
:
dependencies:
firebase_core: ^2.22.0
4. 设置推送通知处理
对于推送通知处理,添加以下依赖项:
flutter pub add firebase_messaging
flutter pub add flutter_local_notifications:9.6.1
注意: 使用9.6.1
版本的flutter_local_notifications
。请注意,新版本可能会有变化;使用此版本以保持兼容性。
检查您的android/build.gradle
文件中的版本:
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath 'com.google.gms:google-services:4.3.14'
}
确保这些版本是最新的,以避免构建问题。
5. Android配置
在您的app/src/main/AndroidManifest.xml
文件中,添加以下内容以创建一个通知通道:
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="push_notification_channel" />
6. iOS配置
在Xcode中打开您的iOS项目,并添加以下功能:
- 推送通知
- 后台模式
- 后台获取
- 远程通知
对于额外的iOS和Firebase配置,请遵循以下步骤:
- 从Apple开发者账户生成推送通知证书。
- 将证书上传到Firebase。
- 从Firebase下载生成的证书。
7. 导入代码
在您的Dart代码中,在主文件中初始化NotificationService
:
import 'path_to_notification_service.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
await NotificationService.initNotificationService();
final token = await NotificationService.requestPermissionWithTokenOrNull();
print("$token");
// 如果基于订阅发送通知,则使用此令牌
runApp(MaterialApp(
home: NotificationService(child: OnboardingPage()),
));
}
更多关于Flutter推送通知插件push_notification_service的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter推送通知插件push_notification_service的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,push_notification_service
插件可以用于实现推送通知功能。虽然具体的插件名称可能有所变化(因为Flutter生态系统中插件的命名和可用性可能会随时间变化),但这里我将基于一个常见的推送通知插件的使用方式,展示如何在Flutter中实现推送通知功能。为了演示,我们将使用 flutter_local_notifications
插件,这是Flutter中处理本地通知的一个流行插件。
首先,确保你已经在 pubspec.yaml
文件中添加了必要的依赖:
dependencies:
flutter:
sdk: flutter
flutter_local_notifications: ^9.0.0 # 请根据需要检查最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,我们需要配置iOS和Android平台特定的代码。
iOS 配置
在 ios/Runner/Info.plist
文件中,添加以下权限请求:
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
<key>UNNotificationBreakthroughPriority</key>
<integer>1</integer>
Android 配置
在 android/app/src/main/AndroidManifest.xml
文件中,添加以下权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE" />
此外,在 android/app/src/main/kotlin/[your_package_name]/MainActivity.kt
(或对应的Java文件)中,添加以下代码以处理启动时的通知点击事件:
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.localnotifications.FlutterLocalNotificationsPlugin
class MainActivity: FlutterActivity() {
private val CHANNEL = "main_channel"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
FlutterLocalNotificationsPlugin.registerWith(flutterEngine?.dartExecutor?.binaryMessenger)
// 监听通知点击事件
FlutterLocalNotificationsPlugin().initialize(
this,
NotificationDetails(
channelId = "channel_id",
channelName = "Channel Name",
channelDescription = "Channel Description",
importance = Importance.Max,
priority = Priority.High
)
) { flutterEngine, id ->
// 处理点击事件
}
}
}
Flutter 代码实现
在你的 Flutter 项目中,创建一个服务来处理通知:
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class NotificationService {
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
Future<void> initialize() async {
const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
const IOSInitializationSettings initializationSettingsIOS = IOSInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
);
const InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
);
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: (String? payload) async {
if (payload != null) {
// 处理点击事件
debugPrint('Notification payload: $payload');
}
});
}
Future<void> showNotification({required String title, required String body, String? payload}) async {
const NotificationDetails notificationDetails = NotificationDetails(
android: AndroidNotificationDetails(
'channel_id',
'Channel Name',
'Channel Description',
importance: Importance.Max,
priority: Priority.High,
),
iOS: IOSNotificationDetails(
presentAlert: true,
presentSound: true,
),
);
await flutterLocalNotificationsPlugin.show(
0,
title,
body,
notificationDetails,
payload: payload,
);
}
}
在你的主应用代码中,初始化并使用这个服务:
void main() {
WidgetsFlutterBinding.ensureInitialized();
final NotificationService notificationService = NotificationService();
runApp(
MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Notification Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await notificationService.initialize();
await notificationService.showNotification(title: 'Hello', body: 'World', payload: 'test_payload');
},
child: Text('Show Notification'),
),
),
),
),
);
}
这段代码展示了如何在Flutter中使用本地通知插件来发送和接收通知。请根据你的具体需求调整代码。如果你需要处理远程通知(例如来自Firebase Cloud Messaging的通知),你可能需要使用其他插件,如 firebase_messaging
,并结合上述本地通知处理逻辑。