npm i --save @nativescript/shared-notification-delegate
- 版本:1.0.2
- GitHub: https://github.com/edusperoni/nativescript-shared-notification-delegate
- NPM: https://npmjs.net.cn/package/%40nativescript%2Fshared-notification-delegate
- 下载
- 昨天: 234
- 上周: 1368
- 上个月: 5655
Nativescript 共享通知代理
此项目旨在防止仅允许单个代理的 iOS 实现带来的缺点。
安装
ns 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 版,2004 年 1 月