如何从 React Native Expo 推送通知中取消订阅(删除监听器)

Posted

技术标签:

【中文标题】如何从 React Native Expo 推送通知中取消订阅(删除监听器)【英文标题】:How to unsubscribe(remove a listener) from React Native Expo push notifications 【发布时间】:2019-02-25 14:18:49 【问题描述】:

我想为用户提供能够取消订阅通知的选项。我已经浏览了 Expo 文档,但我仍然不确定如何在我的代码中实现它。

这是我想要实现的:https://docs.expo.io/versions/latest/sdk/notifications/#eventsubscription

Notifications.addListener(listener) EventSubscription 然后 remove() (function) -- 取消订阅监听器未来的通知。通知

这里是componentDidMount 方法:

  componentDidMount() 
registerForPushNotificationsAsync();

// Handle notifications that are received or selected while the app
// is open. If the app was closed and then opened by tapping the
// notification (rather than just tapping the app icon to open it),
// this function will fire on the next tick after the app starts
// with the notification data.
this._notificationSubscription = Notifications.addListener(this._handleNotification);

一些帮助会很棒

最好的问候 穆萨耶布

【问题讨论】:

致电this._notificationSubscription.remove() 是啊,我也在想,够吗?如果我在另一个页面上配置我的通知并且我在另一个页面上有取消订阅的按钮,那么我将如何调用该函数? 作为道具传递下去 我正在打电话给this._notificationSubscription.remove();,但仍然收到通知 是的,您将继续收到通知。当你removethis._handleNotification 不应该被调用。 【参考方案1】:

只是一个快速的回复,因为我认为大多数答案或 cmets 至少都错过了你的观点。 您可以通过执行此操作停止应用程序侦听通知。_notificationSubscription.remove(); 但是我假设您正在寻找一种取消订阅用户所有未来通知的方法(您通常会在设置菜单或选项菜单中提供什么,因此如果他们要求您的应用不向他们发送通知,您就不会向用户发送垃圾邮件),这个当然可以在大多数手机中通过手机的实际设置完成,因此您的应用程序需要遵守此请求,或者像谷歌和苹果这样的应用程序商店将阻止您的应用程序被允许向任何用户发送通知,无论订阅状态如何。

目前处理此问题的唯一方法是远程通知的服务器端,本地通知您可以使用 asyncstorage 存储设置并在推送任何定时通知之前引用它。 您需要设置对通知服务器的调用以从数据库中删除通知令牌,从而防止您的系统向该设备发送任何未来的通知。

【讨论】:

好答案。通知订阅与接收或不通知无关,它是管理已收到通知的方式。如果您不希望您的用户收到通知,您只需不要从服务器端发送它。

以上是关于如何从 React Native Expo 推送通知中取消订阅(删除监听器)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Expo react native (android) 收听 FCM 推送通知传递

收件人未与任何设备React Native Expo相关联

如何在 react-native App 上获取推送通知?

如何使用搜索文本输入(expo、react-native)在屏幕上显示项目

如何在 expo/react-native 应用程序中添加自定义节点模块?

Stripe 付款后如何从 Webview 重定向到 React Native Expo 应用程序?