你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本教程介绍如何使用 Azure 通知中心和 Firebase Cloud Messaging (FCM) SDK(版本 1.0.0-preview1)的更新版本将推送通知发送到 Android 应用程序。 在本教程中,你将创建一个空白的 Android 应用,该应用使用 Firebase Cloud Messaging (FCM) 接收推送通知。
重要
截至 2024 年 6 月,FCM 旧 API 不再受支持且已停用。 要避免推送通知服务发生任何中断,必须尽快迁移到 FCM v1 协议。
可以从 GitHub 下载本教程的完整代码。
本教程涵盖以下步骤:
- 创建 Android Studio 项目。
- 创建支持 Firebase Cloud Messaging 的 Firebase 项目。
- 创建通知中心。
- 将应用连接到中心。
- 测试应用。
先决条件
要完成本教程,必须有一个有效的 Azure 帐户。 如果没有帐户,只需花费几分钟就能创建一个免费试用帐户。 有关详细信息,请参阅 Azure 免费试用。
注释
Azure 中国区域不支持 Google/Firebase API。
还需要以下项:
- 建议使用最新版本的 Android Studio 。
- 最低支持为 API 级别 19。
创建 Android Studio 项目
第一步是在 Android Studio 中创建项目:
启动 Android Studio。
依次选择“ 文件”、“ 新建”和“ 新建项目”。
在“选择项目”页上选择“空活动”,选择“下一步”。
在 “配置项目 ”页上,执行以下作:
- 输入应用程序的名称。
- 指定项目文件的保存位置。
- 选择完成。
创建支持 FCM 的 Firebase 项目
登录到 Firebase 控制台。 如果还没有 Firebase 项目,创建一个新项目。
创建项目后,选择“向 Android 应用添加 Firebase”。
在 “将 Firebase 添加到 Android 应用 ”页上,执行以下作:
对于 Android 包名称,请在应用程序的 build.gradle 文件中复制 applicationId 的值。 在此示例中,它是
com.fabrikam.fcmtutorial1app。
选择“注册应用”。
选择“下载 google-services.json”,将该文件保存到项目的 app 文件夹中,然后选择“下一步”。
在 Firebase 控制台中,选择与项目相对应的齿轮图标。 然后,选择“项目设置”。
如果尚未将 google-services.json 文件下载到 Android Studio 项目 的应用 文件夹中,则可以在此页上执行此作。
切换到 “云消息传送 ”选项卡。
复制并保存服务器密钥以供将来使用。 您可以使用此值来配置集线器。
如果在 Firebase Cloud Messaging 选项卡上看不到服务器密钥,请执行以下步骤:
- 选择“Cloud Messaging API (旧版)已禁用”标题的三点菜单。
- 按照链接在 Google Cloud Console 中管理 API。
- 在 Google Cloud Console 中,选择用于启用 Google Cloud Messaging API 的按钮。
- 稍等几分钟。
- 返回到 Firebase 控制台项目 Cloud Messaging 选项卡并刷新页面。
- 注意 Cloud Messaging API 标题已更改为“Cloud Messaging API (旧版)已启用”,并且现在显示服务器密钥。
配置通知中心
登录到 Azure 门户。
在左侧菜单上选择“所有服务” ,然后在“移动”部分中选择“通知中心”。 选择服务名称旁边的星形图标,将服务添加到左侧菜单上的 “收藏夹” 部分。 在将通知中心添加到收藏夹之后,在左侧菜单上选择它。
在“通知中心” 页面上,在工具栏上选择“添加” 。
在 “通知中心 ”页上,执行以下作:
在通知中心中输入一个名称。
在“创建新的命名空间”中输入名称。 命名空间包含一个或多个中心。
从“位置”下拉列表中选择一个值。 此值指定要在其中创建集线器的位置。
在 资源组中选择现有资源组,或创建新的资源组。
选择 创建。
选择“通知”(钟形图标),然后选择“转到资源” 。 还可以刷新通知中心页上的列表,然后选择你的中心。
从列表中选择“访问策略” 。 请注意,有两个连接字符串可用。 稍后在处理推送通知时需要它们。
重要
不要在应用程序中使用 DefaultFullSharedAccessSignature 策略。 此策略仅用于应用后端。
为中心配置 Firebase Cloud Messaging 设置
在左窗格中的“设置”下,选择“Google (GCM/FCM)”。
输入前面保存的 FCM 项目“服务器密钥”。
在工具栏上选择“保存”。
Azure 门户会显示一条消息,指出中心已成功更新。 “保存”按钮已禁用。
通知中心现已配置为使用 Firebase Cloud Messaging。 连接字符串还需要将通知发送到设备并注册应用以接收通知。
将应用连接到通知中心
将 Google Play 服务添加到项目
在 Android Studio 中,在菜单上选择“工具”,然后选择“SDK 管理器”。
选择项目中使用的 Android SDK 的目标版本。 然后选择“显示包详细信息”。
选择“Google API”(如果尚未安装)。
切换到“SDK 工具”选项卡,如果尚未安装 Google Play Services,请选择“Google Play Services”,如下图所示。 然后,选择“应用”以进行安装。 记下 SDK 路径,因为后面的步骤将要用到。
如果看到了“确认更改”对话框,请选择“确定”。 组件安装程序安装请求的组件。 在安装组件后,选择“完成”。
选择“确定”以关闭“新项目的设置”对话框。
添加 Azure 通知中心库
在应用的 build.gradle 文件中,在依赖项部分添加以下行:
implementation 'com.microsoft.azure:notification-hubs-android-sdk-fcm:1.1.4' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.android.volley:volley:1.2.1'在依赖项部分后面添加以下存储库:
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url 'https://example.io' } } }
添加 Google Firebase 支持
在该文件的末尾添加以下插件(如果已经不在那里)。
apply plugin: 'com.google.gms.google-services'在工具栏上选择“立即同步”。
添加代码
创建 一个 NotificationHubListener 对象,该对象处理从 Azure 通知中心截获消息。
public class CustomNotificationListener implements NotificationListener { @override public void onNotificationReceived(Context context, RemoteMessage message) { /* The following notification properties are available. */ Notification notification = message.getNotification(); String title = notification.getTitle(); String body = notification.getBody(); Map<String, String> data = message.getData(); if (message != null) { Log.d(TAG, "Message Notification Title: " + title); Log.d(TAG, "Message Notification Body: " + message); } if (data != null) { for (Map.Entry<String, String> entry : data.entrySet()) { Log.d(TAG, "key, " + entry.getKey() + " value " + entry.getValue()); } } } }在
OnCreate类的方法MainActivity中,添加以下代码,以在创建活动时启动通知中心初始化过程:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NotificationHub.setListener(new CustomNotificationListener()); NotificationHub.start(this.getApplication(), "Hub Name", "Connection-String"); }在 Android Studio 的菜单栏中,选择“ 生成”,然后选择“ 重新生成项目 ”以确保代码中没有错误。 如果收到有关 ic_launcher 图标的错误,请从 AndroidManifest.xml 文件中删除以下语句:
android:icon="@mipmap/ic_launcher"确保你有一个用于运行应用的虚拟设备。 如果没有,请添加一个,如下所示:
在所选设备上运行应用,并验证它是否已成功注册到中心。
注释
除非已调用实例 ID 服务的
onTokenRefresh()方法,否则最初启动期间注册可能会失败。 刷新即可成功注册到通知中心。
发送测试通知
可以从 Azure 门户将推送通知发送到通知中心,如下所示:
在 Azure 门户中,打开您的中心的通知中心页面,在“故障排除”部分中选择测试发送。
在 “平台”中,选择 “Android”。
选择发送。 目前在 Android 设备上还看不到通知,因为尚未在其上运行移动应用。 运行移动应用以后,再次选择“发送”按钮即可看到通知消息。
请在门户页面底部的列表中查看操作结果。
设备上会显示通知消息。
推送通知通常在后端服务(如移动应用或 ASP.NET)中使用兼容的库发送。 如果后端没有可用库,也可使用 REST API 直接发送通知消息。
在仿真器中运行移动应用
在模拟器中测试推送通知之前,请确保模拟器映像支持你为应用程序选择的 Google API 级别。 如果映像不支持原生 Google API,可能会收到 SERVICE_NOT_AVAILABLE 异常。
另外,请确保已在“设置”>“帐户”下将 Google 帐户添加到正在运行的模拟器中。 否则,尝试向 FCM 注册可能会导致 AUTHENTICATION_FAILED 异常。
后续步骤
在本教程中,你已使用 Firebase Cloud Messaging 将通知广播到在该服务中注册的所有 Android 设备。 若要了解如何向特定的设备推送通知,请转到以下教程:
下面是发送通知的其他一些教程的列表:
Azure 移动应用:有关如何从与通知中心集成的移动应用后端发送通知的示例,请参阅 向 iOS 应用添加推送通知。
ASP.NET:使用通知中心向用户发送推送通知。
Azure 通知中心 Java SDK:有关从 Java 发送通知的信息,请参阅 如何通过 Java 使用通知中心 。 这种方法已在 Eclipse for Android 开发环境中进行测试。
PHP: 如何通过 PHP 使用通知中心。