@capacitor/push-notifications
Push Notifications API 提供了对本机推送通知的访问能力。
安装
npm install @capacitor/push-notifications
npx cap sync
iOS
在 iOS 上,你必须启用推送通知功能。有关如何启用该功能的说明,请参阅 设置功能 。
启用推送通知功能后,将以下代码添加到应用的 AppDelegate.swift 中:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
NotificationCenter.default.post(name: .capacitorDidRegisterForRemoteNotifications, object: deviceToken)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
NotificationCenter.default.post(name: .capacitorDidFailToRegisterForRemoteNotifications, object: error)
}
Android
推送通知插件使用 Firebase Cloud Messaging SDK 来处理通知。请参阅 在 Android 上设置 Firebase Cloud Messaging 客户端应用 并按照说明创建 Firebase 项目和注册应用。
无需将 Firebase SDK 添加到你的应用或编辑应用清单文件——推送通知插件已为你提供。唯一需要做的就是将 Firebase 项目的 google-services.json 文件添加到应用的模块(应用级)目录中。
Android 13 要求进行权限检查才能接收推送通知。当目标 SDK 为 33 时,你需要相应地调用 checkPermissions() 和 requestPermissions()。
从 Android 15 开始,用户可以在 私人空间 中安装应用。用户可以随时锁定其私人空间,这意味着在用户解锁之前,推送通知将不会显示。
无法检测应用是否安装在私人空间中。因此,如果你的应用显示任何重要通知,请告知用户避免将应用安装在私人空间。
有关与私人空间相关的应用行为变化的更多信息,请参阅 Android 文档。
变量
本插件将使用以下项目变量(定义在应用的 variables.gradle 文件中):
firebaseMessagingVersion:com.google.firebase:firebase-messaging的版本(默认:25.0.1)
推送通知图标
在 Android 上,应该将具有适当名称的推送通知图标添加到 AndroidManifest.xml 文件中:
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@mipmap/push_icon_name" />
如果未指定图标,Android 将使用应用图标,但推送图标应该是透明背景上的白色像素。由于应用图标通常不是这样的,它会显示一个白色方块或圆圈。因此,建议为推送通知提供单独的图标。
Android Studio 有一个图标生成器,可以用来创建推送通知图标。
推送通知通道
从 Android 8.0(API 级别 26)及更高版本开始,支持并推荐使用通知通道。SDK 将按以下顺序获取传入推送通知的 channelId:
- 首先检查传入的通知是否设置了
channelId。 从 FCM 控制台或通过其 API 发送推送通知时 ,可以指定channelId。 - 然后检查
AndroidManifest.xml中可能给出的值。 如果你希望创建并使用自己的默认通道,请将default_notification_channel_id设置为你的通知通道对象的 ID,如下所示;当传入消息未明确设置通知通道时,FCM 将使用此值。
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
- 最后将使用 Firebase SDK 为我们提供的备用
channelId。 FCM 默认提供了一个具有基本设置的通知通道。Firebase SDK 将在接收第一条推送消息时创建此通道。
警告 使用选项 1 或 2 时,你仍然需要在代码中创建通知通道,其 ID 与所选选项中使用的 ID 匹配。你可以使用
createChannel(...)来实现这一点。如果不这样做,SDK 将回退到选项 3。
应用在前台时的推送通知显示方式
你可以配置应用在前台时推送通知的显示方式。
| 属性 | 类型 | 描述 | 始于 |
|---|---|---|---|
presentationOptions | PresentationOption[] | 这是一个可以组合的字符串数组。数组中的可能值有: - badge:更新应用图标上的角标计数(默认值) - sound:收到推送通知时设备会响铃/振动 - alert:推送通知以原生对话框形式显示 如果不希望使用任何选项,可以提供空数组。badge 仅适用于 iOS。 | 1.0.0 |
示例
在 capacitor.config.json 中:
{
"plugins": {
"PushNotifications": {
"presentationOptions": ["badge", "sound", "alert"]
}
}
}
在 capacitor.config.ts 中:
/// <reference types="@capacitor/push-notifications" />
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
PushNotifications: {
presentationOptions: ["badge", "sound", "alert"],
},
},
};
export default config;
静默推送通知 / 仅数据通知#### iOS
此插件不支持 iOS 静默推送(远程通知)。我们建议使用原生代码解决方案来处理这类通知,详见向应用推送后台更新。