nativescript-shared-notification-delegate
适用于 iOS 的共享委托辅助工具。
npm i --save nativescript-shared-notification-delegate

NativeScript 共享通知委托

本项目旨在解决仅允许单个委托的 iOS 实现带来的不足。

安装

tns plugin add nativescript-shared-notification-delegate

用法

导入 SharedNotificationDelegate 并添加观察者

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) 移除委托观察者
removeObserverByUniqueKey(key: any) 通过唯一键移除委托观察者

DelegateObserver 接口

DelegateObserver 可以实现 UNUserNotificationCenterDelegate 的 3 个方法,并添加一些细节

interface DelegateObserver {
userNotificationCenterDidReceiveNotificationResponseWithCompletionHandler?(center: any /* UNUserNotificationCenter */, response: any /* UNNotificationResponse */, completionHandler: () => void, next: () => void): void;
userNotificationCenterOpenSettingsForNotification?(center: any /* UNUserNotificationCenter */, notification: any /* UNNotification */, stop: () => void, next: () => void): void;
userNotificationCenterWillPresentNotificationWithCompletionHandler?(center: any /* UNUserNotificationCenter */, notification: any /* UNNotification */, completionHandler: (p1: any /* UNNotificationPresentationOptions */) => void, next: () => void): void;
/**
* if set to not null/undefined, will ensure only one is registered
*/
delegateUniqueKey?: any;
}

所有函数都是异步链式调用的。

调用 completionHandler 立即停止观察者链。如果方法不会处理通知,则必须调用 next()

userNotificationCenterOpenSettingsForNotification 上调用 stop() 阻止事件冒泡到其他部分。

一次只能处理一个方法,这意味着你可以花费尽可能多的时间(包括进行 http 调用等),只要你完成时只调用 completionHandlerstopnext 即可。

如果 DelegateObserver 有 delegateUniqueKey,则 SharedNotificationDelegate 将确保只有最新的观察者副本存在。这在使用 HMR 进行调试时特别有用,因为应用重新加载可能会添加多个观察者。

许可证

Apache 许可证版本 2.0,2004 年 1 月