@nativescript/shared-notification-delegate
适用于 iOS 的共享代理助手。
npm i --save @nativescript/shared-notification-delegate

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 调用等),只要你完成时只是调用 completionHandlerstopnext

如果 DelegateObserver 有 delegateUniqueKey,则 SharedNotificationDelegate 将确保只有一个最新的观察者副本存在。这对于使用 HMR 调试尤其有用,因为应用程序重新加载时可能会添加多个观察者。

许可证

Apache 许可证第 2 版,2004 年 1 月