8.7 发布—WinterCG 合规性第一部分
了解更多

在 GitHub 上查看

@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 调用,例如),只要你在完成后调用 completionHandlerstopnext 即可。

  • 如果 DelegateObserver 具有 delegateUniqueKeySharedNotificationDelegate 将确保只存在该观察者的最新副本。这在使用 HMR 调试时特别有用,HMR 可能会在应用程序重新加载时添加多个观察者。

许可证

Apache 许可证 2.0 版,2004 年 1 月

上一个
Rive