跳至主要内容

🚧 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:如果为真,则通知将静默显示(可选)。
  • soundName:触发通知时播放的声音(可选)。
  • alertAction:已弃用。这用于 iOS 的旧版 UILocalNotification。

scheduleLocalNotification()

static scheduleLocalNotification(details: ScheduleLocalNotificationDetails);

计划将来显示的本地通知。

参数

名称类型必填描述
details对象见下文。

details 是一个包含以下内容的对象

  • alertTitle:显示为通知警报标题的文本。
  • alertBody:在通知警报中显示的消息。
  • fireDate:触发通知的时间。使用 fireDatefireIntervalSeconds 计划通知,其中 fireDate 优先。
  • fireIntervalSeconds:从现在开始显示通知的秒数。
  • userInfo:包含其他通知数据(可选)的对象。
  • category:此通知的类别,可操作通知需要此类别(可选)。例如,具有其他操作(如回复或点赞)的通知。
  • applicationIconBadgeNumber 应用图标上显示的数字。此属性的默认值为 0,表示不显示任何徽章(可选)。
  • isSilent:如果为真,则通知将静默显示(可选)。
  • soundName:触发通知时播放的声音(可选)。
  • alertAction:已弃用。这用于 iOS 的旧版 UILocalNotification。
  • repeatInterval:已弃用。请改用 fireDatefireIntervalSeconds

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);

设置主屏幕上应用图标的徽章数字。

参数

名称类型必填描述
数字数字应用图标的徽章数字。

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

如果向方法提供映射,则仅请求具有真值的权限。

此方法返回一个 promise,当用户接受或拒绝请求时,或如果之前拒绝了权限时,该 promise 将解析。promise 在请求完成后解析为权限的状态。

参数

名称类型必填描述
permissions数组alert、badge 或 sound

abandonPermissions()

static abandonPermissions();

取消注册通过 Apple 推送通知服务收到的所有远程通知。

您应该仅在极少数情况下调用此方法,例如,当应用的新版本删除对所有类型的远程通知的支持时。用户可以通过“设置”应用临时阻止应用接收远程通知。通过此方法取消注册的应用始终可以重新注册。


checkPermissions()

static checkPermissions(
callback: (permissions: PushNotificationPermissions) => void,
);

检查当前启用了哪些推送权限。

参数

名称类型必填描述
callback函数见下文。

callback 将使用 permissions 对象调用

  • alert: 布尔值

  • badge:布尔值
  • sound:布尔值

getInitialNotification()

static getInitialNotification(): Promise<PushNotification | null>;

此方法返回一个 Promise。如果应用是由推送通知启动的,则此 Promise 会解析为一个 PushNotificationIOS 类型的对象,该对象表示被点击的通知。否则,它会解析为 null


getAuthorizationStatus()

static getAuthorizationStatus(): Promise<number>;

此方法返回一个 Promise,该 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。