向后台应用发送测试消息

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

设置 SDK

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

准备工作

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

  • 确保您的 Android 应用符合以下条件:

    • 目标为 API 级别 16 (Jelly Bean) 或更高版本
    • 使用 Gradle 4.1 或更高版本
  • 设置用于运行您应用的设备或模拟器。

    • 模拟器必须使用 Google Play 提供的模拟器映像。
  • 使用您的 Google 帐号登录 Firebase

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

创建 Firebase 项目

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

在 Firebase 中注册您的应用

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

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

  1. Firebase 控制台的项目概览页面的中心位置,点击 Android 图标以启动设置工作流。

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

  2. Android 软件包名称字段中输入您的应用 ID

    • “应用 ID”有时被称为“软件包名称”。

    • 在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中找到此应用 ID(如 ID:com.yourcompany.yourproject)。

  3. (可选)根据设置工作流的提示输入其他应用信息。

    别名是方便内部使用的标识符,只有您能在 Firebase 控制台中看到。

  4. 点击注册应用

添加 Firebase 配置文件

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

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

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

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

    1. 在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以包含 Google 服务插件。此外,请确认您拥有 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.2'  // 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)的底部,添加一行相应的代码。

      apply plugin: 'com.android.application'
      
      android {
        // ...
      }
      
      // Add the following line to the bottom of the file:
      apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin
      

将 Firebase SDK 添加至您的应用

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

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

    为了获得最佳的 Firebase 云消息传递使用体验,我们建议您在项目中启用 Google Analytics(分析)。在设置 Google Analytics(分析)的过程中,您需要将支持 Google Analytics(分析)的 Firebase SDK 添加到应用中。

    已启用 Analytics(分析)

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

    未启用 Analytics(分析)

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

  2. 同步您的应用以确保所有依赖项都具有所需的版本。

  3. 如果您添加了 Analytics(分析),请运行您的应用,向 Firebase 发送您已成功集成 Firebase 的验证信息。否则,您可以跳过验证步骤。

    您的设备日志将显示说明初始化已完成的 Firebase 验证信息。如果您在具有网络访问权限的模拟器上运行应用,Firebase 控制台会通知您应用连接已完成。

获取注册令牌

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

初次启动您的应用时,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

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

/**
 * 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. 打开通知编辑器,然后选择新建通知

  4. 输入消息内容。

  5. 选择发送测试消息

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

  7. 点击测试

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

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

后续步骤

向前台应用发送消息

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

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

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