当前位置: 首页 > news >正文

flutter + firebase 云消息通知教程 (android-安卓、ios-苹果)

如果能看到这篇文章的 一定已经对手机端的 消息推送通知 有了一定了解。

国内安卓厂商这里不提都有自己的FCM 可自行查找。(国内因无法科学原因 ,不能使用谷歌服务)只说海外的。

目前 adnroid 和 ios 推送消息分别叫 FCM 和 APNs。这里通过 google 的 firebase  分别向两个平台 同时推送消息 只需要配置一套服务便可以。 (firebase 推送消息服务免费-它除消息推送 还有很多服务 收费+)跟多产品了解 https://firebase.google.com/pricing?authuser=0&hl=zh-cn

这里是firebase官网地址(需要VPN访问) https://firebase.google.com/


以下是在 Mac 电脑下使用的。linux 应该区别不大。或许与window 下有一定区别就是配置环境变量部分 自行辨别。

一、注册 安装 firebase

  1. 进入firebase官网进行注册账号
    1. 注册后要创建你的应用,下面关联项目的时候会让选择 其应用的。
  2. 创建 flutter 项目 
    1. Flutter 开发文档 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

  3. 安装  Firebase CLI (在命令行中)
    1. 可以有多种安装方式, 我这里选了npm方式
      1.  nodeJs (这里多说一句防小白,安装 nodeJs 会捆绑npm工具 )安装地址-下载LTS版即可->  Node.js

      2. 各系统安装 nodeJs 方式不解释(自行查找教程,最好安装最新版本)
    2. 安装 Firebase CLI  执行命令 - 具体教程  Firebase官方地址>>
      1. npm install -g firebase-tools 
         (linux 和 mac 平台 最好前面加上sudo 否则可能会报 权限不足的错误 无法访问文件夹) 
      2. linux 和 mac :
        sudo npm install -g firebase-tools

  4. 登陆 Firebase 官方教程地址>>
    1. 执行登陆命令:

      1.  firebase login

        首先谷歌会问你是否同意采集一些信息 改善使用 等等,No 即可,之后会打开一个浏览器页面 让你登陆账号,(我这里用的是自己的谷歌账号登陆的,如果浏览器已经登陆了 可以直接选择使用谷歌账号)。

    2. 从任何目录运行以下命令来安装 FlutterFire CLI: 

      dart pub global activate flutterfire_cli
    3. 安装结束后 会提示一条信息 exprot PATH="$PATH": "$HOME/..........."
      1. 复制此条信息 在命令行执行即可。(是在给 firebase 配置全局环境变量)
      2. Windows 用户作何反应 不太清楚,估计会自动添加。
  5. 进入flutter 项目根目录
    1. 启动应用配置工作流:
      flutterfire configure
    2. 这里要选择你 一开始注册账号时创建的项目
    3. 之后会让选择在哪些平台(空格键控制是否选中)选中 ios 和 andorid

到此为止就完成了所有基本配置 之后就要在flutter 中启用 firebase 了 。

 二、配置Flutter 项目

  1. 安装插件:
    1. flutter pub add firebase_coreflutter pub add firebase_messaging

  2. 创建dart文件:
    1. 下面回到flutter 项目里,在你所想建立的位置增加一个firebase_xxx.dart 文件,添加下面代码(名字随意)。 要注意的是 后台回调函数 onBackgroundMessage 它必须是顶级函数,意味着它不可以是类方法 也不可以是匿名函数。
      import 'package:firebase_messaging/firebase_messaging.dart';
      import 'package:get/get.dart';@pragma('vm:entry-point')
      Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {// If you're going to use other Firebase services in the background, such as Firestore,// make sure you call `initializeApp` before using other Firebase services.print("后台通知");print("Handling a background message: ${message.messageId}");print("title: ${message.notification?.title}");print("body: ${message.notification?.body}");print("payload: ${message.data}");
      }class FirebaseService {final _firebaseMessaging = FirebaseMessaging.instance;Future<void> initNotifications() async {await _firebaseMessaging.requestPermission();// await initPushNotifications();// 获取Firebase Cloud 消息传递令牌final fCMToken = await _firebaseMessaging.getToken();// 后台运行通知回调FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);// 前台运行通知监听FirebaseMessaging.onMessage.listen(handleMessage);// 监听 后台运行时通过系统信息条打开应用FirebaseMessaging.onMessageOpenedApp.listen(onMessageOpenedApp);// 如需在每次令牌更新时获得通知FirebaseMessaging.instance.onTokenRefresh.listen((fcmToken) {// TODO: If necessary send token to application server.// 每次启动应用程序时以及每当生成新令牌时,都会触发此回调。}).onError((err) {// Error getting token.});print("message-Token:$fCMToken");}void onMessageOpenedApp(RemoteMessage? message) {print("打开了$message message");}void handleMessage(RemoteMessage? message) {// 如果消息不是空的话if (message == null) return;// 用户点击通知, 进入特定该页面// Get.toNamed("/home", arguments: message);print("前台通知");print("title: ${message.notification?.title}");print("body: ${message.notification?.body}");print("payload: ${message.data}");}
      }
      
      1. 这里的token 是用来测试发送消息的
  3.  在mian.dart中使用
    1. main 函数中添加以下代码
import './services/firebase_api.dart';
// 引入你的 firebase_xxx.dartvoid main() async {// 确保 Flutter 框架已经被初始化;WidgetsFlutterBinding.ensureInitialized();// 初始化云消息推送await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);await FirebaseService().initNotifications();// ......

       

三、针对ios配置项目(未配置ios可以忽略此项, 下面操作需Mac电脑参与且只能是mac电脑

**前提要素:你已经注册好 Apple 开发者账户,并开通了开发者账户。

这里需要配置好 xcode 基本开发描述文件,简单说明。

  1. 创建开发环境证书:
    1. 下图中的框中的证书,至少也要是画勾的开发模式的证书。(假设你已经正常安装他们了)

  2. 创建你的ID :
    1. (相当于app Id)不然也是无法创建 描述文件的。选择你需要的插件,并勾选 Push  Notifications。并在后面创建你的通知证书下载到本地,双击安装它。创建证书需要上传 Mac电脑钥匙串程序颁发请求证书,请按要求操作。

  3. 导出P12文件:
    1. 找到 Mac 电脑里的(钥匙串)程序打开它,你更刚刚安装的 通知证书在这里 。鼠标右键点击你对应的证书导出 p12 文件。导出过程需要设置证书密码(未来设置推送要用到务必记住)
  4. 上传P12文件
  5. 配置Xcode
    1. 前提:请保证你的开发环境 描述文件已经在apple开发者账号创建并在xcode中正常使用。如下图
    2. 配置推送项目
  6. 完成。
    1. 如果启动报错 请确保ios 依赖已经安装,在科学上网 下可能会导致pod依赖下载超时,断开代理。 flutter 项目中命令行 cd ios 进入文件夹内手动执行 一遍 pod install.

四、结束(测试):

到这里就结束了 可以启动运行你的项目了。

**Android**

很重要的前提是 模拟器一定要有 谷歌商店等全套服务。 否则可以启动但无法使用推送服务。

如何辨别看模拟器 是否安装全家桶即可,如没有(可以去Andorid studio 中增加有谷歌商店的 模拟器)

**Ios**

Ios 前提需要真机才能接到推送通知,Simulator 模拟器无法接到推送通知。

**测试** 

如上图所示:启动后可以看到 打印的token,复制此token

来到 firebase官网,你的账户中 点击它

 

点击 制作一个新的宣传活动-> 发送测试消息-> 添加Token

你可以在 Android模拟器/iphone 中看见它了!

即便应用不在后台进程中运行, 它依然是有效的。 

你仍然可以进行对它的扩展 比如使用  flutter_local_notifications 插件 修改进行应用内的推送效果

相关文章:

flutter + firebase 云消息通知教程 (android-安卓、ios-苹果)

如果能看到这篇文章的 一定已经对手机端的 消息推送通知 有了一定了解。 国内安卓厂商这里不提都有自己的FCM 可自行查找。&#xff08;国内因无法科学原因 &#xff0c;不能使用谷歌服务&#xff09;只说海外的。 目前 adnroid 和 ios 推送消息分别叫 FCM 和 APNs。这里通过…...

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析

从战争中学习战争。对于参加2024年PMP考试的小伙伴来说&#xff0c;最有效的学习方式是这样地&#xff1a;①阅读了教材&#xff08;PMBOK6、7和敏捷&#xff09;&#xff0c;了解基本概念&#xff1b;②反复刷近期的PMP考试真题&#xff0c;查漏补缺。 为此&#xff0c;华研荟…...

vscode开发python环境配置

前言 vscode作为一款好用的轻量级代码编辑器&#xff0c;不仅支持代码调试&#xff0c;而且还有丰富的插件库&#xff0c;可以说是免费好用&#xff0c;对于初学者来说用来写写python是再合适不过了。下面就推荐几款个人觉得还不错的插件&#xff0c;希望可以帮助大家更好地写…...

数据库客户案例:每个物种都需要一个数据库!

1、GERDH——花卉多组学数据库 项目名称&#xff1a;GERDH&#xff1a;花卉多组学数据库 链接地址&#xff1a;https://dphdatabase.com 项目描述&#xff1a;GERDH包含了来自150多种园艺花卉植物种质的 12961个观赏植物。将不同花卉植物转录组学、表观组学等数据进行比较&am…...

数据分析思维导图

参考&#xff1a; https://zhuanlan.zhihu.com/p/567761684?utm_id0 1、数据分析步骤地图 2、数据分析基础知识地图 3、数据分析技术知识地图 4、数据分析业务流程 5、数据分析师能力体系 6、数据分析思路体系 7、电商数据分析核心主题 8、数据科学技能书知识地图 9、数据挖掘…...

网络基础【网线的制作、OSI七层模型、集线器、交换机介绍、路由器的配置】

目录 一.网线的制作 1.1.网线的标准 1.2.水晶头的做法 二.OSI七层模型、集线器、交换机介绍 集线器&#xff08;Hub&#xff09;&#xff1a; 交换机&#xff08;Switch&#xff09;&#xff1a; 三.路由器的配置 3.1.使用 3.2.常用的功能介绍 1、如何管理路由器 2、家…...

C++中的继承(二)

文章目录 前言多继承虚继承虚继承的底层组合 前言 上一篇文章我们C的正常继承其实已经讲完了&#xff0c;但是后面还有一个大坑。 实际当中继承有单继承和多继承。 单继承就是直接继承一个类。 只有一个直接父类的就叫做单继承。 如果是单继承那就比较简单。 现实世界除了有…...

sklearn多项式回归和线性回归

什么是线性回归&#xff1f; 回归分析是一种统计学方法&#xff0c;用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法&#xff0c;可以帮助我们预测和解释变量之间的相互作用。 回归分析通常用于预测一个或多个因变量的值&#xff0c;这些因变量的值是由一个或多…...

Postman报:400 Bad Request

● 使用Postman发送Post请求报400&#xff0c;入参为JSON&#xff1b; 二、分析 1、Postman请求并没有请求到后台Api&#xff08;由于语法错误&#xff0c;服务器无法理解请求&#xff09;&#xff1b; 2、入参出错范围&#xff1a;cookie、header、body、form-data、x-www-f…...

apache poi_5.2.5 实现表格内某一段单元格的复制

apache poi_5.2.5 实现表格内&#xff0c;某一段单元格的复制。 实现思路 1.定位开始位置 2.从开始位置之后&#xff0c;在行索引集合中添加行索引下标 3.截至到结束位置。 4.对行索引集合去重&#xff0c;并循环行索引集合 5.利用XWPFTableRow对像的getCtRow().copy()方法&a…...

Oracle重建索引详解

更新&#xff1a;2023-05-17 18:08 一、Oracle重建索引命令 Oracle重建索引可以通过ALTER INDEX命令来完成。下面是示例代码&#xff1a; ALTER INDEX index_name REBUILD [PARAMETERS];其中&#xff0c;index_name是需要重建的索引名称&#xff0c;PARAMETERS是可选的重建参…...

众和策略证券开户首选:股票增持是好还是坏?大股东增持规定?

股票增持是好仍是坏&#xff1f; 股东增持在一定程度上反映股东对个股比较看好&#xff0c;大量的买单&#xff0c;增加了市场上的多方力气&#xff0c;会推动股价上涨&#xff0c;是一种利好消息。 一般大股东会增持可能是上市公司运营成绩较好&#xff0c;具有较大的发展前…...

UE4移动端最小包优化实践

移动端对于包大小有着严苛的要求,然而UE哪怕是一个空工程打出来也有90+M,本文以一个复杂的工程为例,探索怎么把包大小降低到最小。 一、工程简介 工程包含代码、插件、资源、iOS原生库工程。 二、按官方文档进行基础优化 官方文档 1、勾选Use Pak File和Create comp…...

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…...

java开发面试:常见业务场景之单点登录SSO(JWT)、权限认证、上传数据的安全性的控制、项目中遇到的问题、日志采集(ELK)、快速定位系统的瓶颈

单点登录&#xff08;SSO&#xff09; 单点登录&#xff0c;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统。 如果是单个tomcat服务&#xff0c;session可以共享&#xff0c;如果是多个tomcat&#xff0c;那么服务s…...

Java网络编程原理与实践--从Socket到BIO再到NIO

文章目录 Java网络编程原理与实践--从Socket到BIO再到NIOSocket基本架构Socket 基本使用简单一次发送接收客户端服务端 字节流方式简单发送接收客户端服务端 双向通信客户端服务端 多次接收消息客户端服务端 Socket写法的问题BIO简单流程BIO写法客户端服务端 BIO的问题 NIO简述…...

ARM GIC(三) gicv2架构

ARM的cpu,特别是cortex-A系列的CPU,目前都是多core的cpu,因此对于多core的cpu的中断管理,就不能像单core那样简单去管理,由此arm定义了GICv2架构,来支持多核cpu的中断管理 一、gicv2架构 GICv2,支持最大8个core。其框图如下图所示: 在gicv2中,gic由两个大模块组成: …...

第4章Netty第二节入门案例+channel,future,promise介绍

需求 开发一个简单的服务器端和客户端 客户端向服务器端发送 hello, world服务器仅接收&#xff0c;不返回 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.39.Final</version> </d…...

【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering

原文链接&#xff1a;https://arxiv.org/abs/2308.04079 1. 引言 网孔和点是最常见的3D场景表达&#xff0c;因其是显式的且适合基于GPU/CUDA的快速栅格化。神经辐射场&#xff08;NeRF&#xff09;则建立连续的场景表达便于优化&#xff0c;但渲染时的随机采样耗时且引入噪声…...

【生物信息学】层次聚类过程

文章目录 一、理论二、实践过程1过程2 一、理论 层次聚类是一种基于树状结构的聚类方法&#xff0c;它试图通过在不同层次上逐步合并或分裂数据集来构建聚类结构。这个树状结构通常被称为“树状图”&#xff08;dendrogram&#xff09;&#xff0c;其中每个节点代表一个数据点或…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

RabbitMQ 各类交换机

为什么要用交换机&#xff1f; 交换机用来路由消息。如果直发队列&#xff0c;这个消息就被处理消失了&#xff0c;那别的队列也需要这个消息怎么办&#xff1f;那就要用到交换机 交换机类型 1&#xff0c;fanout&#xff1a;广播 特点 广播所有消息​​&#xff1a;将消息…...

linux设备重启后时间与网络时间不同步怎么解决?

linux设备重启后时间与网络时间不同步怎么解决&#xff1f; 设备只要一重启&#xff0c;时间又错了/偏了&#xff0c;明明刚刚对时还是对的&#xff01; 这在物联网、嵌入式开发环境特别常见&#xff0c;尤其是开发板、树莓派、rk3588 这类设备。 解决方法&#xff1a; 加硬件…...

7种分类数据编码技术详解:从原理到实战

在数据分析和机器学习领域&#xff0c;分类数据&#xff08;Categorical Data&#xff09;的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型&#xff0c;如性别&#xff08;男/女&#xff09;、颜色&#xff08;红/绿/蓝&#xff09;或产品类…...