获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在 Flutter 上设置 Firebase 云消息传递客户端应用

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

按照以下步骤在 Flutter 上设置 FCM 客户端。

特定于平台的设置和要求

一些必需的步骤取决于您的目标平台。

iOS+

在 Xcode 中启用应用功能

在您的应用程序可以开始接收消息之前,您必须在 Xcode 项目中启用推送通知和后台模式。

  1. 打开您的 Xcode 项目工作区 ( ios/Runner.xcworkspace )。
  2. 启用推送通知
  3. 启用后台获取远程通知后台执行模式

上传您的 APNs 身份验证密钥

在使用 FCM 之前,请将您的 APNs 证书上传到 Firebase。如果您还没有 APNs 证书,请在Apple Developer Member Center创建一个。

  1. 在 Firebase 控制台的项目内,选择齿轮图标,选择Project Settings ,然后选择Cloud Messaging选项卡。
  2. 为您的开发证书、生产证书或两者选择上传证书按钮。至少需要一个。
  3. 对于每个证书,选择 .p12 文件,并提供密码(如果有)。确保此证书的捆绑包 ID 与您的应用程序的捆绑包 ID 匹配。选择保存

方法调配

要在 Apple 设备上使用 FCM Flutter 插件,您不得禁用方法调配。 Swizzling 是必需的,如果没有它,FCM 令牌处理等关键 Firebase 功能将无法正常运行。

安卓

谷歌播放服务

FCM 客户端需要运行 Android 4.4 或更高版本且安装了 Google Play 服务的设备,或者运行带有 Google API 的 Android 4.4 的模拟器。请注意,您不仅限于通过 Google Play 商店部署您的 Android 应用程序。

依赖 Play 服务 SDK 的应用在访问 Google Play 服务功能之前,应始终检查设备是否有兼容的 Google Play 服务 APK。建议在两个地方执行此操作:在主活动的onCreate()方法中,以及在其onResume()方法中。 onCreate()中的检查可确保在未成功检查的情况下无法使用该应用程序。 onResume()中的检查可确保如果用户通过其他方式返回正在运行的应用程序,例如通过后退按钮,检查仍会执行。

如果设备没有兼容版本的 Google Play 服务,您的应用可以调用GoogleApiAvailability.makeGooglePlayServicesAvailable()以允许用户从 Play 商店下载 Google Play 服务。

网络

使用 FCM 配置 Web 凭据

FCM Web 界面使用称为“自愿应用程序服务器标识”或“VAPID”密钥的 Web 凭据来授权向支持的 Web 推送服务发送请求。要为您的应用订阅推送通知,您需要将一对密钥与您的 Firebase 项目相关联。您可以生成新的密钥对,也可以通过 Firebase 控制台导入现有的密钥对。

生成新的密钥对
  1. 打开 Firebase 控制台设置窗格的云消息传递选项卡并滚动到Web 配置部分。

  2. Web Push certificates选项卡中,单击Generate Key Pair 。控制台显示生成密钥对的通知,并显示公钥字符串和添加日期。

导入现有密钥对

如果您有一个已用于 Web 应用程序的现有密钥对,则可以将其导入 FCM,以便您可以通过 FCM API 访问现有的 Web 应用程序实例。要导入密钥,您必须拥有 Firebase 项目的所有者级别访问权限。以 base64 URL 安全编码形式导入您现有的公钥和私钥:

  1. 打开 Firebase 控制台设置窗格的云消息传递选项卡并滚动到Web 配置部分。

  2. 在“ Web 推送证书”选项卡中,找到并选择链接文本“导入现有密钥对”。

  3. Import a key pair对话框中,在相应字段中提供您的公钥和私钥,然后单击Import 。控制台显示公钥字符串和添加日期。

有关密钥格式以及如何生成它们的更多信息,请参阅应用程序服务器密钥

安装 FCM 插件

  1. 如果您还没有安装并初始化 Flutter 的 Firebase 插件,请执行此操作。

  2. 从 Flutter 项目的根目录,运行以下命令来安装插件:

    flutter pub add firebase_messaging
    
  3. 完成后,重建您的 Flutter 应用程序:

    flutter run
    

访问注册令牌

要向特定设备发送消息,您需要知道该设备的注册令牌。由于您需要在通知控制台的字段中输入令牌才能完成本教程,因此请务必复制令牌或在检索后安全地存储它。

要检索应用程序实例的当前注册令牌,请调用getToken() 。如果未授予通知权限,此方法将向用户询问通知权限。否则,它会返回一个令牌或由于错误而拒绝未来。

final fcmToken = await FirebaseMessaging.instance.getToken();

在网络平台上,将您的 VAPID 公钥传递给 getToken getToken()

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

要在令牌更新时收到通知,请订阅onTokenRefresh流:

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

防止自动初始化

生成 FCM 注册令牌后,库会将标识符和配置数据上传到 Firebase。如果您希望阻止令牌自动生成,请在构建时禁用自动初始化。

iOS

在 iOS 上,将元数据值添加到您的Info.plist

FirebaseMessagingAutoInitEnabled = NO

安卓

在 Android 上,通过将这些元数据值添加到您的AndroidManifest.xml来禁用 Analytics 收集和 FCM 自动初始化(您必须同时禁用两者):

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

在运行时重新启用 FCM 自动初始化

要为特定应用程序实例启用自动初始化,请调用setAutoInitEnabled()

await FirebaseMessaging.instance.setAutoInitEnabled(true);

一旦设置,此值将在应用重新启动时持续存在。

下一步

设置客户端应用程序后,您就可以开始使用Notifications composer发送下游消息。请参阅向后台应用程序发送测试消息

要向您的应用程序添加其他更高级的行为,您需要一个服务器实现

然后,在您的应用程序客户端中: