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

1 回复

更多关于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,并结合上述本地通知处理逻辑。

回到顶部