Flutter本地推送通知插件native_push的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter本地推送通知插件native_push的使用

插件介绍

Native Push Plugin 是一个Flutter插件,它提供了在不同平台上(包括Android、iOS、macOS和Web)无缝集成推送通知的功能。 这个插件允许您的Flutter应用程序轻松接收和处理远程通知。

特性

  • 支持Firebase Cloud Messaging (FCM) for Android.
  • 支持Apple Push Notification Service (APNs) for iOS and macOS.
  • 支持Web Push for web applications.
  • 处理应用在前台、后台或终止时收到的推送通知。
  • 提供初始化插件、注册远程通知以及获取通知令牌的方法。
  • 支持各种通知选项,如提示、徽章、声音等。

安装

pubspec.yaml文件中添加以下依赖项:

dependencies:
  native_push: ^1 latest

然后运行flutter pub get来安装插件。

使用示例

导入插件
import 'package:native_push/native_push.dart';
初始化插件

main.dart文件中初始化插件:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化native push插件
  await NativePush.instance.initialize(
    firebaseOptions: {
      'apiKey': 'YOUR_API_KEY',
      'projectId': 'YOUR_PROJECT_ID',
      'messagingSenderId': 'YOUR_MESSAGING_SENDER_ID',
      'applicationId': 'YOUR_APP_ID',
    },
    useDefaultNotificationChannel: true,
  );

  runApp(MyApp());
}

如果不需要使用FCM,请省略firebaseOptions部分。可以使用extract_fcm_options脚本来提取google-services.json中的信息。

cat google-services.json | ./extract_fcm_options.sh <android-bundle-id>
注册远程通知

注册远程通知以获取通知令牌:

await NativePush.instance.registerForRemoteNotification(
  options: [NotificationOption.alert, NotificationOption.sound],
  vapidKey: 'YOUR_VAPID_KEY', // 对于web推送,可以省略否则
);
处理 incoming notifications

监听 incoming notifications 使用 notificationStream:

NativePush.instance.notificationStream.listen((notification) {
  // 处理通知
  print('Received notification: $notification');
});
获取初始通知

处理打开应用的初始通知:

final initialNotification = await NativePush.instance.initialNotification();
if (initialNotification != null) {
  // 处理初始通知
  print('Initial notification: $initialNotification');
}
获取通知令牌

获取当前的通知令牌:

final (service, token) = await NativePush.instance.notificationToken;
print('Notification Service: $service, Token: $token');

平台特定配置

Android

确保为您的应用添加以下元数据:

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel_id"
    android:value="native_push_notification_channel" />
<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@android:drawable/ic_input_add" />

只有在initialize中设置useDefaultNotificationChannel为true时才能使用native_push_notification_channel。 否则需要创建并指定自己的通知通道。

在主活动intent filter中添加以下内容:

&lt;action android:name="com.opdehipt.native_push.PUSH"/&gt;
iOS

您需要添加Push Notification Capability。

如果您想支持通知中的图像,还需要添加Background Modes Capability并勾选Remote Notifications。 您还需要添加Notification Service Extension到您的应用,并替换代码为以下内容:

import NativePushNotificationService

final class NotificationService: NativePushNotificationService {}

更多关于Flutter本地推送通知插件native_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地推送通知插件native_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于在Flutter中使用native_push插件来实现本地推送通知,以下是一个简单的代码示例。请注意,native_push可能不是最流行的或者最新的推送通知插件,因此在实际项目中,你可能需要参考官方文档或者社区更新的信息。这里假设你已经有一个Flutter项目,并且已经添加了native_push依赖。

首先,确保在你的pubspec.yaml文件中添加了native_push依赖(如果插件名称正确且可用):

dependencies:
  flutter:
    sdk: flutter
  native_push: ^x.y.z  # 替换为实际的版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中配置和使用native_push插件。以下是一个基本的示例,展示如何在Flutter应用中发送本地推送通知:

import 'package:flutter/material.dart';
import 'package:native_push/native_push.dart'; // 假设这是正确的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Local Notification Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final NativePush _nativePush = NativePush();

  @override
  void initState() {
    super.initState();
    // 初始化插件(如果需要)
    _nativePush.initialize().then((_) {
      // 初始化成功后,可以发送通知
      _sendLocalNotification();
    }).catchError((error) {
      print('Initialization error: $error');
    });
  }

  void _sendLocalNotification() {
    var androidPlatformChannelSpecifics = AndroidNotificationDetails(
      'your_channel_id',
      'Your Channel Name',
      'Your Channel Description',
      importance: Importance.max,
      priority: Priority.high,
    );
    var iOSPlatformChannelSpecifics = IOSNotificationDetails();
    var platformChannelSpecifics = NotificationDetails(
      android: androidPlatformChannelSpecifics,
      iOS: iOSPlatformChannelSpecifics,
    );
    var notification = FlutterLocalNotification(
      0,
      'Hello, World!',
      'This is a local notification!',
      platformChannelSpecifics,
    );

    // 显示通知
    _nativePush.show(
      notification,
      payload: 'item_id_12345',
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Local Notification Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 这里我们通过按钮点击再次发送通知,但通常在initState中初始化时发送
            _sendLocalNotification();
          },
          child: Text('Send Notification'),
        ),
      ),
    );
  }
}

注意

  1. 上面的代码假设native_push插件提供了与flutter_local_notifications类似的API。然而,native_push可能并不实际存在或者其API可能有所不同。因此,你需要参考该插件的实际文档。
  2. 对于Android,你可能需要在AndroidManifest.xml中配置通道。
  3. 对于iOS,你可能需要在Info.plist中添加必要的权限和配置。
  4. 初始化插件时,可能需要处理权限请求,这通常涉及到请求用户允许显示通知。

由于native_push可能不是实际存在的插件或者API可能已经发生变化,强烈建议查阅最新的官方文档或社区资源来获取准确的信息和示例代码。如果native_push不存在,你可以考虑使用更流行的插件,如flutter_local_notifications

回到顶部