向后台应用发送测试消息

如需开始使用 FCM,可构建最简单的使用情形:当应用在设备后台运行时,从通知编辑器向开发设备发送一条测试通知消息。 本页面列出了实现上述目标所需的从设置到验证的所有步骤。如果您已针对 FCM 设置了 Android 客户端应用,则这些步骤中可能也包括您已经完成的步骤。

设置 SDK

如果您的应用已经启用了其他 Firebase 功能,那么您可能已经完成了本部分将要介绍的一些任务。

准备工作

  • 安装 Android Studio 或将其更新为最新版本。

  • 确保您的项目满足以下要求:

    • 目标 API 级别为 16 (Jelly Bean) 或更高
    • 使用 Gradle 4.1 或更高版本
    • 使用 Jetpack (AndroidX),同时需要满足以下版本要求:
      • com.android.tools.build:gradle 3.2.1 版或更高版本
      • compileSdkVersion 28 或更高版本
  • 使用实体设备或模拟器来运行您的应用。
    模拟器必须使用具有 Google Play 的模拟器映像。

  • 使用您的 Google 帐号登录 Firebase

如果您还没有 Android 项目,只是想试用某一 Firebase 产品,则可以下载我们的其中一个快速入门示例

创建 Firebase 项目

您必须先创建一个 Firebase 项目,并将其关联到您的 Android 应用,然后才能将 Firebase 添加到您的 Android 应用。如需了解详情,请访问了解 Firebase 项目

在 Firebase 中注册您的应用

创建 Firebase 项目后,您就可以向其中添加 Android 应用了。

请访问了解 Firebase 项目以详细了解将应用添加到 Firebase 项目的最佳做法和注意事项,包括如何处理多个构建变体。

  1. 访问 Firebase 控制台

  2. 在项目概览页面的中心位置,点击 Android 图标 () 以启动设置工作流。

    如果您已在 Firebase 项目中添加了应用,请点击添加应用以显示平台选项。

  3. Android 软件包名称字段中输入应用的软件包名称。

  4. (可选)输入其他应用信息:应用别名调试签名证书 SHA-1

  5. 点击注册应用

添加 Firebase 配置文件

  1. 将 Firebase Android 配置文件添加到您的应用:

    1. 点击下载 google-services.json 以获取 Firebase Android 配置文件 (google-services.json)。

    2. 将配置文件移动到应用的模块(应用级)目录中。

  2. 如需在应用中启用 Firebase 产品,请将 Google 服务插件添加到 Gradle 文件中。

    1. 在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以纳入 Google 服务 Gradle 插件。此外,请确认您拥有 Google 的 Maven 代码库。

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. 在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,应用 Google 服务 Gradle 插件:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

将 Firebase SDK 添加至您的应用

  1. 在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,添加要在应用中使用的 Firebase 产品的依赖项。

    您可以将任何受支持的 Firebase 产品添加到 Android 应用中。

    为了获得最佳的 Firebase Cloud Messaging 使用体验,我们建议您在项目中启用 Google Analytics(分析)。此外,在设置 Analytics(分析)时,您还需要将适用于 Google Analytics(分析)的 Firebase SDK 添加到您的应用中。

    已启用 Analytics(分析)

    dependencies {
      // ...
    
      // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
      implementation 'com.google.firebase:firebase-messaging:20.2.4'
      implementation 'com.google.firebase:firebase-analytics:17.5.0'
    }
    
    // Getting a "Could not find" error? Make sure that you've added
    // Google's Maven repository to your project-level build.gradle file
    

    未启用 Analytics(分析)

    dependencies {
      // ...
    
      // Add the dependency for the Firebase Cloud Messaging library
      implementation 'com.google.firebase:firebase-messaging:20.2.4'
    }
    
    // Getting a "Could not find" error? Make sure that you've added
    // Google's Maven repository to your project-level build.gradle file
    
  2. 同步您的应用以确保所有依赖项都具有必要的版本。

获取注册令牌

如需将信息发送到特定的设备,您需要知道该设备的注册令牌。您需要在通知控制台的相应字段中输入该令牌才能完成本教程,因此请确保在获得令牌后即进行复制或将其保存在安全可靠的位置。

初次启动您的应用时,FCM SDK 会为客户端应用实例生成一个注册令牌。如果您希望指定单一目标设备或者创建设备组,则需要通过扩展 FirebaseMessagingService 并重写 onNewToken 来获取此令牌。

本部分介绍如何检索令牌以及如何监控令牌的变更。因为令牌会在初始启动后轮替,所以我们强烈建议您检索最近更新的注册令牌。

注册令牌可能会在发生下列情况时更改:

  • 应用删除实例 ID
  • 在新设备上恢复应用
  • 用户卸载/重新安装应用
  • 用户清除应用数据。

检索当前注册令牌

如果需要检索当前令牌,请调用 FirebaseInstanceId.getInstance().getInstanceId()

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

监控令牌的生成

每当生成新令牌时,都会触发 onNewToken 回调函数。

Java

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(token);
}

Kotlin+KTX

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(token)
}

获取该令牌后,您可以将其发送到应用服务器,并使用您偏好的方法进行存储。请参阅 Instance ID API 参考,了解关于此 API 的完整详情。

发送测试通知消息

  1. 在目标设备上安装并运行该应用。

  2. 确保应用在设备的后台中运行。

  3. 打开 Notifications Composer,然后选择新建通知

  4. 输入消息内容。

  5. 选择发送测试消息

  6. 在标签为添加 FCM 注册令牌的字段中,输入您根据本指南的前一部分获得的注册令牌。

  7. 点击测试

在您点击测试后,目标客户端设备(在后台中运行应用)应该会在系统通知栏中接收到通知。

有关发送到您应用的消息的详细情况,请参阅 FCM 报告信息中心,该信息中心记录在 iOS 和 Android 设备上发送和打开的消息数量,以及 Android 应用的“展示次数”(用户看到的通知)数据。

后续步骤

向前台应用发送消息

您在应用处于后台运行的情况下成功发送通知消息后,可参阅在 Android 应用中接收消息,尝试向前台应用发送消息。

除通知消息之外的其他功能

如果除了通知消息之外,您还要向应用添加其他更高级的行为,请参阅以下内容: