热门标签 | 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}}


推荐阅读
  • JobScheduler5.0源码分析
    0.JobScheduler执行代码mJobScheduler(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE); ... [详细]
  • 本文总结了几个常用的Android开发技巧,包括检测设备上是否安装特定应用、获取应用的版本名称、设置状态栏透明以及如何从一个应用跳转至另一个应用的方法。 ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • C++基础教程:探索随机数生成
    生活充满了不确定性,这些不确定因素使我们的生活更加丰富多彩。本文将探讨如何在C++编程中利用随机数增加程序的趣味性和实用性。 ... [详细]
  • mybatis相关面试题 ... [详细]
  • 计算机视觉中的行为识别:步态分析的ReID应用
    本文介绍了一项基于步态的行为识别(ReID)项目,通过步态特征实现个体身份的准确识别。文中展示了项目的基本原理、特征提取方法及其实现效果。 ... [详细]
  • Android 网络状态检测工具类
    本文提供了一个用于检测Android设备网络状态的工具类,包括网络连接性、WiFi和3G网络的检测以及GPS状态的检查。 ... [详细]
  • POJ2226 二分图最小覆盖问题
    在一个大小为n×m的网格中,部分单元格为泥泞状态,其余为干净。目标是使用宽度固定为1但长度可变的木板覆盖所有泥泞单元格,且不覆盖任何干净单元格。木板允许重叠。本问题通过构建二分图并求其最小覆盖来解决。 ... [详细]
  • 本文介绍了如何在Java中使用`JCheckBoxMenuItem.setMnemonic()`方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 探讨如何在C++中,当子类实例存储在父类类型的向量中时,正确访问子类特有的成员变量或方法。 ... [详细]
  • 利用Selenium框架解决SSO单点登录接口无法返回Token的问题
    针对接口自动化测试中遇到的SSO单点登录系统不支持通过API接口返回Token的问题,本文提供了一种解决方案,即通过UI自动化工具Selenium模拟用户登录过程,从浏览器的localStorage或sessionStorage中提取Token。 ... [详细]
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
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社区 版权所有