热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutte接入firebasemessaging(FCM)

flutter接入firebasemessaging其实文档说的还算比较详细,但有些东西没有更新,照着文档无法正常集成。pub地址使用添加依赖#firebasefirebas

flutter接入firebase messaging

其实文档说的还算比较详细,但有些东西没有更新,照着文档无法正常集成。
pub地址


使用



  1. 添加依赖

    # firebasefirebase_messaging: ^6.0.16



  2. Android配置



在firebase后台添加应用

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

dependencies {// Example existing classpathclasspath 'com.android.tools.build:gradle:3.5.3'// Add the google services classpathclasspath 'com.google.gms:google-services:4.3.2'
}

2.1 将apply插件添加到[project] /android/app/build.gradle文件中。

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

2.2 设置通知栏的点击回调

如果用户希望在用户点击系统任务栏中的通知时在您的应用中收到通知(通过onResume和onLaunch,请参见下文),请在android /app / src / main / AndroidManifest.xml:

<intent-filter><action android:name="FLUTTER_NOTIFICATION_CLICK" /><category android:name="android.intent.category.DEFAULT" />intent-filter>

2.3 添加后台推送

在通常位于 /android/app/build.gradle的应用程序级build.gradle文件中添加com.google.firebase:firebase-messaging依赖项。

dependencies {// ...implementation 'com.google.firebase:firebase-messaging:'
}

您可以在此处(Cloud Messaging)中找到该插件的最新版本。

2.4 在与MainActivity.java相同的目录中,将Application.java类添加到您的应用程序中。通常可以在 / android / app / src / main / java / /中找到。

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;public class Application extends FlutterApplication implements PluginRegistrantCallback {@Overridepublic void onCreate() {super.onCreate();FlutterFirebaseMessagingService.setPluginRegistrant(this);}@Overridepublic void registerWith(PluginRegistry registry) {FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));}
}

2.5 在AndroidManifest.xml中设置应用程序的名称属性。通常可以在 / android / app / src / main /中找到。

<application android:name=".Application" ...>

2.6 定义一个TOP-LEVEL或STATIC函数来处理后台消息

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

注意:datanotification与RemoteMessage定义的字段一致。

2.7 在调用configure时设置onBackgroundMessage处理程序

_firebaseMessaging.configure(onMessage: (Map message) async {print("onMessage: $message");_showItemDialog(message);},//处理后台推送onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,onLaunch: (Map message) async {print("onLaunch: $message");_navigateToItemDetail(message);},onResume: (Map message) async {print("onResume: $message");_navigateToItemDetail(message);},);

注意:应该在应用程序生命周期的早期调用“ configure”以便可以尽早接收消息。见[示例应用](https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_messaging/example)进行演示。




  1. iOS配置



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

3.2 使用[Firebase控制台](https://console.firebase.google.com/)将iOS应用添加到您的项目中:跟随文档,下载生成的GoogleService-Info.plist文件,打开ios /带有Xcode的Runner.xcworkspace,并在Xcode中将文件放置在ios / Runner中。不要在Firebase助手中执行名为“添加Firebase SDK”和“添加初始化代码”的步骤。

3.3 在Xcode中,在Project Navigator中选择Runner。在“功能”标签中,打开Push NotificationsBackground Modes,并在“背景模式”下启用Remote notificationsBackground Modes

3,4 按照Firebase文档的“ [上传您的APNs证书](https://firebase.google.com/docs/cloud-messaging/ios/client#upload_your_apns_certificate)”部分中的步骤操作。

3.5 如果您需要禁用FCM iOS SDK完成的方法转换(例如,以便可以将此插件与其他通知插件一起使用),则将以下内容添加到应用程序的“ Info.plist”文件中。

<key>FirebaseAppDelegateProxyEnabledkey>
<false/>

3.6 之后,将以下行添加到(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions`iOS项目的AppDelegate.m / AppDelegate.swift中的方法。

Objective-C:

if (@available(iOS 10.0, *)) {[UNUserNotificationCenter currentNotificationCenter].delegate = (id<UNUserNotificationCenterDelegate>) self;
}

Swift:

if #available(iOS 10.0, *) {UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}

Dart/Flutter Integration

From your Dart code, you need to import the plugin and instantiate it:

import 'package:firebase_messaging/firebase_messaging.dart';final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

接下来,您可能应该请求接收推送通知的权限。为此,请调用_firebaseMessaging.requestNotificationPermissions()

这将打开一个权限对话框,供用户在iOS上进行确认。Android上无人操作。最后一点,是通过_firebaseMessaging.configure()来注册onMessage,onResume和onLaunch回调以侦听传入的消息(有关更多信息,请参见下表)


接收消息

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




































App在前台App在后台App已终止
Notification on AndroidonMessage通知已传递到系统托盘。当用户单击它以打开应用程序时,如果设置了“ click_action:FLUTTER_NOTIFICATION_CLICK”(见下文),则会触发onResume。通知已传递到系统托盘。当用户单击它以打开应用程序时,如果设置了“ click_action:FLUTTER_NOTIFICATION_CLICK”(见下文),onLaunch就会触发。
Notification on iOSonMessage通知已传递到系统托盘。当用户单击它以打开应用程序时,onResume将触发。通知已传递到系统托盘。当用户点击它打开应用时,onLaunch会触发。
Data Message on AndroidonMessage当应用程序停留在后台时,onMessage插件不支持,消息丢失
Data Message on iOSonMessage消息由FCM存储,并在应用返回到前台时通过onMessage传递给应用。消息由FCM存储,并在应用返回到前台时通过onMessage传递给应用。

其他阅读:Firebase的[关于FCM消息](https://firebase.google.com/docs/cloud-messaging/concept-options)。


带有其他数据的通知消息

通过将其他数据添加到通知消息的“ data”字段中,可以在通知消息中包含其他数据。在Android上,消息包含一个包含数据的附加字段data。在iOS上,数据直接附加到消息中,并且省略了额外的“ data”字段。要在两个平台上接收数据:

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

发送消息

有关将消息发送到您的应用程序的所有详细信息,请参阅[Firebase文档](https://firebase.google.com/docs/cloud-messaging/)。

在向Android设备发送通知消息时,您需要确保将消息的click_action属性设置为FLUTTER_NOTIFICATION_CLICK

否则,当用户在系统任务栏中单击该插件时,该插件将无法将通知传递给您的应用程序。

出于测试目的,发送通知的最简单方法是通过[Firebase控制台](https://firebase.google.com/docs/cloud-messaging/send-with-console)。

定位到Android设备时,请确保将“ click_action:FLUTTER_NOTIFICATION_CLICK”作为“自定义数据”键值对(在“高级选项”下)包括在内。

Firebase控制台不支持发送数据消息。


APP收到的消息格式



  • 前台推送:

I/flutter (27265): onMessage: {notification: {title: 标题, body: 内容}, data: {data: asda, click_action: FLUTTER_NOTIFICATION_CLICK}}



  • 后台推送:

APP在后台运行时,收到推送会由系统处理并发送到通知栏,只有在点击时才会触发onResume

点击通知:

I/flutter (27265): onResume: {notification: {}, data: {collapse_key: com.cece.app, data: asda, google.original_priority: high, google.sent_time: 1597290543985, google.delivered_priority: high, google.ttl: 2419200, from: 818960474503, click_action: FLUTTER_NOTIFICATION_CLICK, google.message_id: 0:1597290544292403%e9ecbb44e9ecbb44}}


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
panda光光_897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有