Flutter统一推送接口插件unifiedpush_platform_interface的使用

UnifiedPush Flutter Connector #

UnifiedPush 是一套规范和工具,让用户可以选择如何分发推送通知。所有这些都是免费且开源的方式。

开始使用 #

请查阅以下文档:

  1. https://unifiedpush.org/developers/flutter/
  2. 若要将 Firebase 作为回退方案,请参阅 https://unifiedpush.org/developers/embedded_fcm/
  3. 一个示例应用可以在这里找到。

示例代码 #

在下面的示例中,我们将展示如何使用 unifiedpush_platform_interface 插件来实现推送通知。

设置项目 #

首先,确保你的 Flutter 项目已经配置好,并添加了 unifiedpush_platform_interface 依赖。

dependencies:
  unifiedpush_platform_interface: ^0.1.0

初始化 #

main.dart 文件中初始化 UnifiedPush SDK。

import 'package:flutter/material.dart';
import 'package:unifiedpush_platform_interface/unifiedpush_platform_interface.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initUnifiedPush();
  }

  void initUnifiedPush() async {
    await UnifiedPushPlatform.instance.initialize(
      appId: 'your_app_id',
      appServerKey: 'your_app_server_key',
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('UnifiedPush 示例'),
        ),
        body: Center(
          child: Text('Hello UnifiedPush!'),
        ),
      ),
    );
  }
}

注册接收者 #

为了接收推送通知,你需要注册一个接收者。

import 'package:unifiedpush_platform_interface/unifiedpush_platform_interface.dart';

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    registerReceiver();
  }

  void registerReceiver() async {
    await UnifiedPushPlatform.instance.registerReceiver(
      onMessageReceived: (message) {
        print('接收到消息: $message');
      },
    );
  }

  // 其他代码保持不变...
}

发送测试消息 #

你可以通过 UnifiedPush 控制台发送测试消息以验证是否一切正常。

处理推送通知 #

当接收到推送通知时,可以通过 onMessageReceived 回调进行处理。

void registerReceiver() async {
  await UnifiedPushPlatform.instance.registerReceiver(
    onMessageReceived: (message) {
      print('接收到消息: $message');
    },
  );
}

处理点击事件 #

你还可以处理用户点击通知时的事件。

void registerReceiver() async {
  await UnifiedPushPlatform.instance.registerReceiver(
    onMessageReceived: (message) {
      print('接收到消息: $message');
    },
    onNotificationClick: (clickData) {
      print('用户点击了通知: $clickData');
    },
  );
}

更多关于Flutter统一推送接口插件unifiedpush_platform_interface的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter统一推送接口插件unifiedpush_platform_interface的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,unifiedpush_platform_interface 是一个用于定义统一推送接口的平台接口包。它本身并不实现推送功能,而是为不同的推送服务(如 Firebase Cloud Messaging、OneSignal 等)提供一个统一的接口。这有助于开发者在不修改大量代码的情况下切换推送服务。

以下是如何在Flutter项目中使用 unifiedpush_platform_interface 以及一个假设的实现插件(例如 firebase_messaging)来设置推送通知的基本示例。请注意,由于 unifiedpush_platform_interface 是一个接口定义包,通常你会直接使用实现了该接口的插件,而不是直接使用它。

步骤 1: 添加依赖

首先,你需要在 pubspec.yaml 文件中添加推送服务的依赖,例如 firebase_messaging。这里以 firebase_messaging 为例,因为它是一个广泛使用的推送服务实现。

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.10.0 # Firebase核心库,用于初始化Firebase应用
  firebase_messaging: ^11.2.0 # Firebase消息传递库

步骤 2: 初始化 Firebase 应用

在你的 Flutter 应用的入口文件(通常是 main.dart)中,初始化 Firebase 应用。

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Push Notifications'),
        ),
        body: MessagingPage(),
      ),
    );
  }
}

步骤 3: 配置推送消息处理

创建一个 MessagingPage 来处理推送消息。

import 'package:flutter/material.dart';
import 'package:firebase_messaging/firebase_messaging.dart';

class MessagingPage extends StatefulWidget {
  @override
  _MessagingPageState createState() => _MessagingPageState();
}

class _MessagingPageState extends State<MessagingPage> {
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;

  @override
  void initState() {
    super.initState();
    _configure();
  }

  Future<void> _configure() async {
    // 请求通知权限
    NotificationSettings settings = await _firebaseMessaging.requestPermission(
      alert: true,
      announcement: false,
      badge: true,
      carPlay: false,
      criticalAlert: false,
      provisional: false,
      sound: true,
    );

    if (settings.alert) {
      // 前台消息处理
      _firebaseMessaging.onMessage.listen((RemoteMessage message) {
        print('Got a message whilst in the foreground!');
        print('Message data: ${message.data}');
      });

      // 背景消息处理
      _firebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
    }
  }

  Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
    print('Handling a background message: ${message.messageId}');
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text('Push Notifications Configured'),
    );
  }
}

步骤 4: 处理后台消息(可选)

由于后台消息处理需要在单独的 Dart 入口文件中定义,你需要在 ios/Runner/AppDelegate.swiftandroid/app/src/main/kotlin/.../MainActivity.kt 中进行一些配置,并创建一个新的 Dart 文件,例如 background_messaging.dart

background_messaging.dart

import 'package:firebase_messaging/firebase_messaging.dart';

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  // 处理后台消息
  print('Handling a background message: ${message.messageId}');
}

android/app/src/main/kotlin/.../MainActivity.kt 中添加:

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        // Keep this line to initialize the Firebase Messaging plugin
        FlutterFirebaseMessagingService.setInitialMessage(getIntent()?.extras)
    }
}

ios/Runner/AppDelegate.swift 中确保你已经配置了 Firebase 并启用了后台模式。

总结

虽然 unifiedpush_platform_interface 本身不直接用于推送消息的实现,但它是定义推送接口的标准,使得像 firebase_messaging 这样的插件可以遵循相同的接口。上面的示例展示了如何使用 firebase_messaging 来实现推送通知的基本功能。如果你打算使用其他推送服务,只需替换相应的实现包,并遵循其文档进行配置。

回到顶部