插件
共享通知委托
@nativescript/shared-notification-delegate
该项目旨在防止 iOS 实现中仅允许单个委托带来的缺点。
安装
CLI
npm install @nativescript/shared-notification-delegate
使用
导入 SharedNotificationDelegate
并添加观察者
TypeScript
import { SharedNotificationDelegate } from '@nativescript/shared-notification-delegate';
...
SharedNotificationDelegate.addObserver({
delegateUniqueKey: "myUniqueKey", // ensures uniqueness, if not set or is null/undefined, allows multiple of the same
userNotificationCenterWillPresentNotificationWithCompletionHandler: (notificationCenter, notification, handler, stop, next) => {
console.log("notification received by observer");
// is this notification something I should handle?
if (shouldHandleThis) {
// do stuff
// intercept it and show alert
handler(UNNotificationPresentationOptions.Alert);
return;
}
// not mine, next should handle
next();
}
});
API
SharedNotificationDelegate 方法
方法 | 返回值 | 描述 |
---|---|---|
addObserver(observer: DelegateObserver, priority?: number) | void | 添加具有特定优先级的委托观察者(数字越小,优先级越高)。默认优先级为 100 。 |
removeObserver(observer: DelegateObserver) | void | 移除 DelegateObserver |
removeObserverByUniqueKey(key: any) | void | 根据其唯一键移除 DelegateObserver |
DelegateObserver 接口
DelegateObserver 可以实现来自 UNUserNotificationCenterDelegate 的 3 个方法,并添加一些细节
TypeScript
interface DelegateObserver {
userNotificationCenterDidReceiveNotificationResponseWithCompletionHandler?(
center: UNUserNotificationCenter,
response: UNNotificationResponse,
completionHandler: () => void,
next: () => void
): void
userNotificationCenterOpenSettingsForNotification?(
center: UNUserNotificationCenter,
notification: UNNotification,
stop: () => void,
next: () => void
): void
userNotificationCenterWillPresentNotificationWithCompletionHandler?(
center: UNUserNotificationCenter,
notification: UNNotification,
completionHandler: (p1: UNNotificationPresentationOptions) => void,
next: () => void
): void
/**
* if set to not null/undefined, will ensure only one is registered
*/
delegateUniqueKey?: any
}
DelegateObserver 对象方法的参数的所有函数都是异步地按顺序调用的。
立即调用
completionHandler
将停止观察者链。如果该方法不处理通知,则必须调用next()
。在
userNotificationCenterOpenSettingsForNotification
上调用stop()
将阻止事件冒泡到其余部分。一次只会处理一个方法,这意味着你可以花费任意长的时间(包括进行 http 调用,例如),只要你在完成后调用
completionHandler
、stop
和next
即可。如果 DelegateObserver 具有
delegateUniqueKey
,SharedNotificationDelegate
将确保只存在该观察者的最新副本。这在使用 HMR 调试时特别有用,HMR 可能会在应用程序重新加载时添加多个观察者。
许可证
Apache 许可证 2.0 版,2004 年 1 月