🚧 PushNotificationIOS
已废弃。 请改用社区包。
处理应用的通知,包括调度和权限。
开始使用
要启用推送通知,请使用 Apple 配置您的通知以及您的服务器端系统。
然后,在您的项目中启用远程通知。这将自动启用所需的设置。
启用对 `register` 事件的支持
在您的 `AppDelegate.m` 中,添加
#import <React/RCTPushNotificationManager.h>
然后实现以下内容以处理远程通知注册事件
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// This will trigger 'register' events on PushNotificationIOS
[RCTPushNotificationManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
// This will trigger 'registrationError' events on PushNotificationIOS
[RCTPushNotificationManager didFailToRegisterForRemoteNotificationsWithError:error];
}
处理通知
您需要在 `AppDelegate` 中实现 `UNUserNotificationCenterDelegate`
#import <UserNotifications/UserNotifications.h>
@interface YourAppDelegate () <UNUserNotificationCenterDelegate>
@end
在应用启动时设置代理
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
return YES;
}
前台通知
实现 `userNotificationCenter:willPresentNotification:withCompletionHandler:` 以处理应用在前台时到达的通知。使用 completionHandler 来确定通知是否会显示给用户,并相应地通知 `RCTPushNotificationManager`
// Called when a notification is delivered to a foreground app.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
// This will trigger 'notification' and 'localNotification' events on PushNotificationIOS
[RCTPushNotificationManager didReceiveNotification:notification];
// Decide if and how the notification will be shown to the user
completionHandler(UNNotificationPresentationOptionNone);
}
后台通知
实现 `userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:` 以处理通知被点击的情况,通常用于用户点击以打开应用的后台通知。但是,如果您已将前台通知设置为在 `userNotificationCenter:willPresentNotification:withCompletionHandler:` 中显示,则当前台通知被点击时,此方法也会被调用。在这种情况下,您应该只在其中一个回调中通知 `RCTPushNotificationManager`。
如果点击的通知导致应用启动,请调用 `setInitialNotification:`。如果通知之前未由 `userNotificationCenter:willPresentNotification:withCompletionHandler:` 处理,则也调用 `didReceiveNotification:`
- (void) userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler
{
// This condition passes if the notification was tapped to launch the app
if ([response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) {
// Allow the notification to be retrieved on the JS side using getInitialNotification()
[RCTPushNotificationManager setInitialNotification:response.notification];
}
// This will trigger 'notification' and 'localNotification' events on PushNotificationIOS
[RCTPushNotificationManager didReceiveNotification:response.notification];
completionHandler();
}
参考
方法
presentLocalNotification()
static presentLocalNotification(details: PresentLocalNotificationDetails);
调度一个本地通知以立即呈现。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
details | 对象 | 是 | 见下文。 |
`details` 是一个包含以下内容的`对象`
- `alertTitle` : 作为通知提示标题显示的文本。
- `alertBody` : 通知提示中显示的消息。
- `userInfo` : 包含额外通知数据的对象(可选)。
- `category` : 此通知的类别,可操作通知所需(可选)。例如,具有“回复”或“点赞”等附加操作的通知。
- `applicationIconBadgeNumber` 作为应用图标角标显示的数字。此属性的默认值为 0,表示不显示任何角标(可选)。
- `isSilent` : 如果为 true,通知将无声显示(可选)。
- `soundName` : 通知触发时播放的声音(可选)。
- `alertAction` : 已废弃。这曾用于 iOS 的旧版 UILocalNotification。
scheduleLocalNotification()
static scheduleLocalNotification(details: ScheduleLocalNotificationDetails);
调度一个本地通知以供将来呈现。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
details | 对象 | 是 | 见下文。 |
`details` 是一个包含以下内容的`对象`
- `alertTitle` : 作为通知提示标题显示的文本。
- `alertBody` : 通知提示中显示的消息。
- `fireDate` : 通知将被触发的时间。使用 `fireDate` 或 `fireIntervalSeconds` 调度通知,其中 `fireDate` 优先。
- `fireIntervalSeconds` : 从现在起多少秒后显示通知。
- `userInfo` : 包含额外通知数据的对象(可选)。
- `category` : 此通知的类别,可操作通知所需(可选)。例如,具有“回复”或“点赞”等附加操作的通知。
- `applicationIconBadgeNumber` 作为应用图标角标显示的数字。此属性的默认值为 0,表示不显示任何角标(可选)。
- `isSilent` : 如果为 true,通知将无声显示(可选)。
- `soundName` : 通知触发时播放的声音(可选)。
- `alertAction` : 已废弃。这曾用于 iOS 的旧版 UILocalNotification。
- `repeatInterval` : 已废弃。请改用 `fireDate` 或 `fireIntervalSeconds`。
cancelAllLocalNotifications()
static cancelAllLocalNotifications();
取消所有已调度的本地通知。
removeAllDeliveredNotifications()
static removeAllDeliveredNotifications();
从通知中心移除所有已送达的通知。
getDeliveredNotifications()
static getDeliveredNotifications(callback: (notifications: Object[]) => void);
提供当前在通知中心显示的应用通知列表。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
callback | 函数 | 是 | 接收已送达通知数组的函数。 |
已送达的通知是一个包含以下内容的`对象`
- `identifier` : 此通知的标识符。
- `title` : 此通知的标题。
- `body` : 此通知的正文。
- `category` : 此通知的类别(可选)。
- `userInfo` : 包含额外通知数据的对象(可选)。
- `thread-id` : 此通知的线程标识符(如果有)。
removeDeliveredNotifications()
static removeDeliveredNotifications(identifiers: string[]);
从通知中心移除指定的通知。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
identifiers | 数组 | 是 | 通知标识符数组。 |
setApplicationIconBadgeNumber()
static setApplicationIconBadgeNumber(num: number);
设置主屏幕上应用图标的角标数字。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
number | number | 是 | 应用图标的角标数字。 |
getApplicationIconBadgeNumber()
static getApplicationIconBadgeNumber(callback: (num: number) => void);
获取主屏幕上应用图标的当前角标数字。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
callback | 函数 | 是 | 处理当前角标数字的函数。 |
cancelLocalNotifications()
static cancelLocalNotifications(userInfo: Object);
取消任何与所提供的 `userInfo` 字段匹配的已调度本地通知。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
userInfo | 对象 | 否 |
getScheduledLocalNotifications()
static getScheduledLocalNotifications(
callback: (notifications: ScheduleLocalNotificationDetails[]) => void,
);
获取当前已调度的本地通知列表。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
callback | 函数 | 是 | 处理描述本地通知的对象数组的函数。 |
addEventListener()
static addEventListener(
type: PushNotificationEventName,
handler:
| ((notification: PushNotification) => void)
| ((deviceToken: string) => void)
| ((error: {message: string; code: number; details: any}) => void),
);
将监听器附加到通知事件,包括本地通知、远程通知和通知注册结果。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
type | 字符串 | 是 | 要监听的事件类型。见下文。 |
handler | 函数 | 是 | 监听器。 |
有效的事件类型包括
- `notification` : 接收到远程通知时触发。处理程序将通过 `PushNotificationIOS` 实例调用。这将处理在前台到达或从后台点击以打开应用的通知。
- `localNotification` : 接收到本地通知时触发。处理程序将通过 `PushNotificationIOS` 实例调用。这将处理在前台到达或从后台点击以打开应用的通知。
- `register`: 用户成功注册远程通知时触发。处理程序将通过表示 deviceToken 的十六进制字符串调用。
- `registrationError`: 用户注册远程通知失败时触发。通常由于 APNS 问题或设备是模拟器而发生。处理程序将通过 `{message: string, code: number, details: any}` 调用。
removeEventListener()
static removeEventListener(
type: PushNotificationEventName,
);
移除事件监听器。在 `componentWillUnmount` 中执行此操作以防止内存泄漏。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
type | 字符串 | 是 | 事件类型。有关选项,请参阅 `addEventListener()`。 |
requestPermissions()
static requestPermissions(permissions?: PushNotificationPermissions[]);
从 iOS 请求通知权限,并向用户弹出对话框。默认情况下,这将请求所有通知权限,但您可以选择指定要请求的权限。支持以下权限
alert
badge
sound
如果向方法提供一个映射(map),则只请求具有真实值的权限。
此方法返回一个 Promise,当用户接受或拒绝请求,或权限之前已被拒绝时,该 Promise 将被解决。该 Promise 解析为请求完成后权限的状态。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
permissions | 数组 | 否 | alert、badge 或 sound |
abandonPermissions()
static abandonPermissions();
注销通过 Apple Push Notification 服务接收的所有远程通知。
您只应在极少数情况下调用此方法,例如当新版本的应用移除对所有类型远程通知的支持时。用户可以通过“设置”应用暂时阻止应用接收远程通知。通过此方法注销的应用可以随时重新注册。
checkPermissions()
static checkPermissions(
callback: (permissions: PushNotificationPermissions) => void,
);
检查当前启用了哪些推送权限。
参数
名称 | 类型 | 必需 | 描述 |
---|---|---|---|
callback | 函数 | 是 | 见下文。 |
`callback` 将通过一个 `permissions` 对象调用
alert: boolean
badge: boolean
sound: boolean
getInitialNotification()
static getInitialNotification(): Promise<PushNotification | null>;
此方法返回一个 Promise。如果应用是通过推送通知启动的,则此 Promise 解析为被点击的通知的 `PushNotificationIOS` 类型对象。否则,它解析为 `null`。
getAuthorizationStatus()
static getAuthorizationStatus(): Promise<number>;
此方法返回一个 Promise,它解析为当前通知授权状态。有关可能的值,请参阅 UNAuthorizationStatus。
finish()
finish(result: string);
此方法适用于通过 application:didReceiveRemoteNotification:fetchCompletionHandler:
接收到的远程通知。但是,此方法已被 UNUserNotificationCenterDelegate
取代,并且如果同时实现了 application:didReceiveRemoteNotification:fetchCompletionHandler:
和 UNUserNotificationCenterDelegate
中的新处理程序,则此方法将不再被调用。
如果由于某种原因您仍依赖于 application:didReceiveRemoteNotification:fetchCompletionHandler:
,则需要在 iOS 端设置事件处理
- (void) application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
[RCTPushNotificationManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler];
}
在 JS 端处理完通知后,调用 `finish()` 来执行原生完成处理程序。调用此块时,传入最能描述操作结果的获取结果值。有关可能值的列表,请参阅 `PushNotificationIOS.FetchResult`。
如果您正在使用 `application:didReceiveRemoteNotification:fetchCompletionHandler:`,则必须调用此处理程序,并且应尽快调用。有关更多详细信息,请参阅官方文档。
getMessage()
getMessage(): string | Object;
`getAlert` 的别名,用于获取通知的主要消息字符串。
getSound()
getSound(): string;
从 `aps` 对象获取声音字符串。对于本地通知,此值将为 `null`。
getCategory()
getCategory(): string;
从 `aps` 对象获取类别字符串。
getAlert()
getAlert(): string | Object;
从 `aps` 对象获取通知的主要消息。另请参阅别名:`getMessage()`。
getContentAvailable()
getContentAvailable(): number;
从 `aps` 对象获取 content-available 数字。
getBadgeCount()
getBadgeCount(): number;
从 `aps` 对象获取角标计数数字。
getData()
getData(): Object;
获取通知上的数据对象。
getThreadID()
getThreadID();
获取通知上的线程 ID。