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

2023-12-22 18:20

本文主要是介绍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("打开通知");print("Handling a background message: ${message.messageId}");print("title: ${message.notification?.title}");print("body: ${message.notification?.body}");print("payload: ${message.data}");}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中正常使用。如下图 (单击 provisioning profile 右侧感叹号 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-苹果)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524982

相关文章

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll