firebase_messaging 5.1.8

  • Readme
  • Changelog
  • Example
  • Installing
  • 100

Firebase Cloud Messaging for Flutter #

pub package

Flutter插件,可使用Firebase Cloud Messaging(FCM)API .

使用此插件,您的Flutter应用程序可以在Android和iOS上接收和处理推送通知以及数据消息. 阅读Firebase的关于FCM消息,以了解有关通知消息和数据消息之间差异的更多信息.

有关其他Firebase产品的Flutter插件,请参阅README.md .

Usage #

要使用此插件,添加firebase_messaging您pubspec.yaml文件相关 .

Getting Started #

使用Firebase Cloud Messaging检出示例应用程序的example目录.

Android Integration #

要将插件集成到应用程序的Android部分,请执行以下步骤:

  1. 使用Firebase控制台将Android应用添加到您的项目中:跟随助手,下载生成的google-services.json文件,并将其放在android/app .

  2. 将类路径添加到[project]/android/build.gradle文件中.

dependencies {
  // Example existing classpath
  classpath 'com.android.tools.build:gradle:3.2.1'
  // Add the google services classpath
  classpath 'com.google.gms:google-services:4.3.0'
}
  1. 将apply插件添加到[project]/android/app/build.gradle文件中.
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

Note: If this section is not completed you will get an error like this:

java.lang.IllegalStateException:
Default FirebaseApp is not initialized in this process [package name].
Make sure to call FirebaseApp.initializeApp(Context) first.

注意:在Android上调试时,请使用具有Google Play服务的设备或AVD. 否则,您将无法进行身份验证.

  1. (可选的,但建议)如果想在你的应用程序被通知(经由onResumeonLaunch ,见下文)时对系统中的通知用户点击托盘包括以下intent-filter的内<activity>您的标签android/app/src/main/AndroidManifest.xml
  <intent-filter>
      <action android:name="FLUTTER_NOTIFICATION_CLICK" />
      <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

Optionally handle background messages #

旨在快速执行后台消息处理. 不要执行长时间运行的任务,因为Android系统可能不允许这些任务完成. 有关更多信息,请参见后台执行限制 .

默认情况下,不启用后台消息传递. 要在后台处理消息:

  1. 将Application.java类添加到您的应用程序

     package io.flutter.plugins.firebasemessagingexample;
    
     import io.flutter.app.FlutterApplication;
     import io.flutter.plugin.common.PluginRegistry;
     import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
     import io.flutter.plugins.GeneratedPluginRegistrant;
     import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;
    
     public class Application extends FlutterApplication implements PluginRegistrantCallback {
       @Override
       public void onCreate() {
         super.onCreate();
         FlutterFirebaseMessagingService.setPluginRegistrant(this);
       }
    
       @Override
       public void registerWith(PluginRegistry registry) {
         GeneratedPluginRegistrant.registerWith(registry);
       }
     }
    
  2. AndroidManifest.xml设置应用程序的名称属性

     <application android:name=".Application" ...>
    
  3. 限定顶层飞镖的方法来处理背景消息

     Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
       if (message.containsKey('data')) {
         // Handle data message
         final dynamic data = message['data'];
       }
    
       if (message.containsKey('notification')) {
         // Handle notification message
         final dynamic notification = message['notification'];
       }
    
       // Or do other work.
     }
    

    注意: datanotification协议与RemoteMessage定义的字段一致 .

  4. 调用configure时设置onBackgroundMessage处理程序

     _firebaseMessaging.configure(
           onMessage: (Map<String, dynamic> message) async {
             print("onMessage: $message");
             _showItemDialog(message);
           },
           onBackgroundMessage: myBackgroundMessageHandler,
           onLaunch: (Map<String, dynamic> message) async {
             print("onLaunch: $message");
             _navigateToItemDetail(message);
           },
           onResume: (Map<String, dynamic> message) async {
             print("onResume: $message");
             _navigateToItemDetail(message);
           },
         );
    

    注意: configure应该在应用程序生命周期的早期被调用,以便可以尽早接收消息. 参见示例应用程序进行演示.

iOS Integration #

要将插件集成到应用程序的iOS部分,请执行以下步骤:

  1. 遵循Firebase文档中的本指南 ,生成Apple接收推送通知所需的证书. 您可以跳过标题为"创建配置文件"的部分.

  2. 使用Firebase控制台将iOS应用添加到您的项目中:跟随助手,下载生成的GoogleService-Info.plist文件,使用Xcode打开ios/Runner.xcworkspace ,然后在Xcode中将该文件放入ios/Runner . 不要遵循Firebase助手中名为"添加Firebase SDK"和"添加初始化代码"的步骤.

  3. 在Xcode中,在"项目浏览器"中选择" Runner器". 在"功能"选项卡中,打开" Push Notifications和" Background Modes ,然后在" Background Modes下启用" Background fetch和" Remote notifications ".

  4. 按照Firebase文档的"上载您的APNs证书 "部分中的步骤进行操作.

Dart/Flutter Integration #

从Dart代码中,您需要导入插件并实例化它:

import 'package:firebase_messaging/firebase_messaging.dart';

final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

接下来,您可能应该请求接收推送通知的权限. 为此,请调用_firebaseMessaging.requestNotificationPermissions() . 这将打开一个权限对话框,供用户在iOS上进行确认. Android上无人操作. 最后但并非最不重要的一点是,通过_firebaseMessaging.configure()注册onMessageonResumeonLaunch回调以侦听传入的消息(有关更多信息,请参见下表).

Receiving Messages #

消息会通过在安装过程中使用插件配置的onMessageonLaunchonResume回调发送到Flutter应用. 以下是在支持的平台上传递不同消息类型的方式:

前景中的应用后台应用应用终止
Android上的通知onMessage 通知已传递到系统托盘. 当用户单击它以打开应用程序时,如果设置了click_action: FLUTTER_NOTIFICATION_CLICKonResume会触发(请参见下文). 通知已传递到系统托盘. 当用户点击它来打开应用程序onLaunch火灾如果click_action: FLUTTER_NOTIFICATION_CLICK设置(见下文).
iOS上的通知onMessage 通知已传递到系统托盘. 当用户单击它以打开应用程序时, onResume触发. 通知已传递到系统托盘. 当用户单击它打开应用程序时, onLaunch会触发.
Android上的数据消息onMessage当应用程序停留在后台时, onMessage .插件不支持,消息丢失
iOS上的数据消息onMessage消息由FCM存储,并在应用程序回到前台时通过onMessage传递到应用程序.消息由FCM存储,并在应用程序回到前台时通过onMessage传递到应用程序.

附加阅读:Firebase的关于FCM消息 .

Notification messages with additional data #

通过将其他数据添加到通知的"data"字段中,可以在通知消息中包含其他数据.

在Android,该消息包含的附加字段data包含数据. 在iOS上,数据直接附加到消息中,并且省略了额外的data -field字段.

要在两个平台上接收数据:

Future<void> _handleNotification (Map<dynamic, dynamic> message, bool dialog) async {
    var data = message['data'] ?? message;
    String expectedAttribute = data['expectedAttribute'];
    /// [...]
}

Sending Messages #

有关将消息发送到您的应用程序的所有详细信息,请参阅Firebase有关FCM的文档 . 在向Android设备发送通知消息时,您需要确保将消息的click_action属性设置为FLUTTER_NOTIFICATION_CLICK . 否则,当用户在系统任务栏中单击该插件时,该插件将无法将通知传递给您的应用程序.

出于测试目的,发送通知的最简单方法是通过Firebase控制台 . 在定位Android设备时,请确保将click_action: FLUTTER_NOTIFICATION_CLICK为"自定义数据"键值对(在"高级选项"下). Firebase控制台不支持发送数据消息.

或者,可以从终端发送通知或数据消息:

DATA='{"notification": {"body": "this is a body","title": "this is a title"}, "priority": "high", "data": {"click_action": "FLUTTER_NOTIFICATION_CLICK", "id": "1", "status": "done"}, "to": "<FCM TOKEN>"}'
curl https://fcm.googleapis.com/fcm/send -H "Content-Type:application/json" -X POST -d "$DATA" -H "Authorization: key=<FCM SERVER KEY>"

删除DATAnotification属性以发送数据消息.

Issues and feedback #

请在我们的问题跟踪器中提交Flutterfire特定的问题,错误或功能请求.

Plugin issues that are not specific to Flutterfire can be filed in the Flutter issue tracker.

要对此插件做出更改,请查看我们的贡献指南 ,并发送请求请求 .

5.1.8 #

  • 更新了README说明,以与其他Flutterfire插件保持一致.

5.1.7 #

  • 删除AndroidX警告.

5.1.6 #

  • 修正在Android上编译时的警告.

5.1.5 #

  • 在Android上启用后台消息处理.

5.1.4 #

  • 更新文档以反映新的存储库位置.
  • 更新单元测试以调用TestWidgetsFlutterBinding.ensureInitialized .

5.1.3 #

  • 在文档和示例中将google-services Android gradle插件更新为4.3.0.

5.1.2 #

  • 更新自述文件和示例,并说明数据格式的差异.

5.1.1 #

  • 使用更详细的集成说明更新自述文件.

5.1.0 #

  • subscribeToTopicunsubscribeFromTopic的返回类型更改为Future<void> .

5.0.6 #

  • 其他集成测试.

5.0.5 #

  • 在Android上,修复使用最新的Flutter引擎调用deleteInstanceID时崩溃的问题.

5.0.4 #

  • 向Firebase报告使用情况时,自动使用pubspec.yaml中的版本.

5.0.3 #

  • 更新Dart代码以符合当前的Dart格式化程序.

5.0.2 #

  • 将缺少的模板类型参数添加到invokeMethod调用中.
  • 将Flutter的最低版本提高到1.5.0.
  • 必要时,将invokeMethod替换为invokeMapMethod.

5.0.1+1 #

  • 使用shouldEstablishDirectChannel在iOS上启用对onMessage支持.

5.0.1 #

  • 如果无法在Android上启动时检索令牌,请修复启动日志中的错误.

5.0.0 #

  • 将Android依赖项更新为最新版本.

4.0.0+4 #

  • 删除过时的use_frameworks! 指令.

4.0.0+3 #

  • 更新iOS配置文档.

4.0.0+2 #

  • 修复示例应用程序的浮动操作按钮由于重大更改而停止工作的问题.

4.0.0+1 #

  • 现在,有关默认应用程序自动配置的日志消息不再那么混乱.

4.0.0 #

  • 用于onMessage的打破更改更新消息结构以匹配onLaunch和onResume

3.0.1 #

  • 在构建时记录有关先前AndroidX迁移的更详细的警告.

3.0.0 #

  • 突破性的改变 . 从已弃用的原始Android支持库迁移到AndroidX. 这不应该导致任何功能上的变化,但是如果使用原始插件的Android应用程序也必须迁移 ,因此它们也必须进行迁移 .

    这最初是在2.2.0更新中错误地推送的.

2.2.0+1 #

  • 恢复最新的2.2.0更新 . 已知2.2.0已损坏,应该增加主版本号而不是次版本号. 然而,对于已经迁移的任何人来说,此还原本身都是无效的. 已将其应用迁移到AndroidX的任何人都应立即更新为3.0.0 . 那是2.2.0的正确版本的新推送.

2.2.0 #

  • 不好 这是一个重大更改,在次要版本升级中错误地发布了该更改,这是永远不会发生的. 由2.2.0+1恢复.

  • 突破性的改变 . 从已弃用的原始Android支持库迁移到AndroidX. 这不应该导致任何功能上的变化,但是如果使用原始插件的Android应用程序也必须迁移 ,因此它们也必须进行迁移 .

2.1.0 #

  • 添加对deleteInstanceID(),autoInitEnabled()和setAutoInitEnabled()的支持.

2.0.3 #

  • 在插件的dart部分中删除getToken()的本地缓存. 现在,getToken()在iOS和Android实现中直接调用其对应对象. 这样就可以获取其值,而无需调用configure()或不必等待新的令牌刷新.

2.0.2 #

  • 在iOS上检查通知类型时,请使用布尔值.

2.0.1 #

  • 将Android依赖项更新到最新版本.

2.0.0 #

  • 更新了Android,以将Remote Message的标题和正文发送到Dart.

1.0.5 #

  • 碰撞测试和模拟版本以获取Dart 2支持.

1.0.4 #

  • 碰撞Android和Firebase依赖版本.

1.0.3 #

  • 将iOS令牌挂钩从" didRefreshRegistrationToken"更新为" didReceiveRegistrationToken"

1.0.2 #

  • 更新了Gradle工具以匹配Android Studio 3.2.2.

1.0.1 #

  • 修复了适用于Android的问题,该问题是当操作系统终止"活动"时(或者启用了"不保留活动"切换功能时),不会触发onLaunch事件

1.0.0 #

  • 碰撞到发行版本

0.2.5 #

  • 修复了Dart 2类型错误.

0.2.4 #

  • Google Play服务依赖项已更新至版本15.0.0.

0.2.3 #

  • 更新的软件包频道名称

0.2.2 #

  • Cocoapods 1.5.0的简化podspec,避免了应用档案中的链接问题.

0.2.1 #

  • 修复了Dart 2类型错误.

0.2.0 #

  • 突破性的改变 . 设置SDK约束以匹配Flutter beta版本.

0.1.4 #

  • 修复了示例项目中的Dart 2类型错误.

0.1.3 #

  • 已在Swift项目中启用.

0.2.2 #

  • 修复了重新安装应用程序时未在iOS上正确注册APNS的问题.

0.1.1 #

  • 将Android项目模板简化并升级到Android SDK 27.
  • 更新了软件包说明.

0.1.0 #

  • 突破性的改变 . 升级到Gradle 4.1和Android Studio Gradle插件3.0.1. 较早的Flutter项目也需要升级其Gradle设置才能使用此版本的插件. 说明可以在这里找到.
  • 放松了对[11.4.0,12.0 [

0.0.8 #

  • 为iOS类型添加了FLT前缀
  • 将GMS依赖关系更改为11.4+

0.0.7 #

在FirebaseMessagingPlugin.m中:

  • 将逻辑从" tokenRefreshNotification"移动到" didRefreshRegistrationToken"
  • 删除了" tokenRefreshNotification"以及观察者注册
  • 删除了" connectToFcm"方法和相关调用
  • 删除了不必要的FIRMessaging断开连接

0.0.6 #

  • 将GMS依赖项更改为11. +

0.0.5+2 #

  • 修复了" click_action"的自述文件示例

0.0.5+1 #

  • 将作者姓名与回购的其余部分对齐.

0.0.5 #

  • 更新到Firebase SDK,以始终使用最新的修补程序版本进行11.0.x构建

0.0.4 #

  • 更新到Firebase SDK版本11.0.1

0.0.3 #

  • 更新了README.md
  • 将buildToolsVersion连接到25.0.3

0.0.2+2 #

  • 更新了README.md

0.0.2+1 #

0.0.2 #

  • 更新到最新的插件API

0.0.2.2 #

  • 降级的gradle依赖关系(例如应用程序)使Flutter flutter run愉快

0.0.1+1 #

  • 使用安装说明更新了自述文件
  • 添加了CHANGELOG

0.0.1 #

  • 初始发行

example/README.md

firebase_messaging_example #

演示如何使用firebase_messaging插件.

Getting Started #

要获得Flutter入门方面的帮助,请查看我们的在线文档 .

Use this package as a library

1. Depend on it

将此添加到包的pubspec.yaml文件中:


dependencies:
  firebase_messaging: ^5.1.8

2. Install it

您可以从命令行安装软件包:

使用Flutter:


$ flutter pub get

另外,您的编辑器可能支持flutter pub get . 查看您的编辑器文档以了解更多信息.

3. Import it

现在,在Dart代码中,您可以使用:


import 'package:firebase_messaging/firebase_messaging.dart';
  
Popularity:
描述该程序包相对于其他程序包的受欢迎程度. [更多]
100
Health:
从静态分析得出的代码运行状况. [更多]
100
Maintenance:
反映出软件包的整洁和最新状态. [更多]
100
Overall:
以上的加权分数. [更多]
100
了解有关得分的更多信息.

我们于2019年11月15日对此软件包进行了分析,并在下面提供了分数,详细信息和建议. using: 分析已完成,状态使用以下命令 :

  • 飞镖:2.6.0
  • 高达:0.12.21
  • Flutter: 1.9.1+hotfix.6

Platforms

检测到的平台:Flutter

参考Flutter,并且没有冲突的库.

Dependencies

Package Constraint Resolved Available
直接依赖
Dart SDK > = 2.0.0-dev.28.0 <3.0.0
flutter 0.0.0
meta ^1.0.4 1.1.7 1.1.8
platform ^2.0.0 2.2.1
传递依存关系
collection 1.14.11 1.14.12
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8
开发依赖
firebase_core ^0.4.0
flutter_driver
flutter_test
mockito ^3.0.0
test ^1.3.0

by  ICOPY.SITE