npm i --save nativescript-shared-notification-delegate
- 版本:1.0.0
- GitHub: https://github.com/edusperoni/nativescript-shared-notification-delegate
- NPM: https://npmjs.net.cn/package/nativescript-shared-notification-delegate
- 下载量
- 昨日: 3
- 上周: 55
- 上月: 433
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 调用等),只要你完成时只调用 completionHandler
、stop
和 next
即可。
如果 DelegateObserver 有 delegateUniqueKey
,则 SharedNotificationDelegate
将确保只有最新的观察者副本存在。这在使用 HMR 进行调试时特别有用,因为应用重新加载可能会添加多个观察者。
许可证
Apache 许可证版本 2.0,2004 年 1 月