我如何知道用户是否已接受/拒绝带有React Native的ios通知?

我如何知道用户是否已接受/拒绝带有React Native的ios通知?,ios,react-native,Ios,React Native,我想显示一个自定义屏幕,要求用户接受或拒绝其iOS设备上的通知。仅当用户从未注册或从未接受/拒绝应用程序通知时,才应显示此屏幕 尽管如此,我似乎没有找到一种方法来知道用户是否已经注册。我不想使用任何类型的异步存储,因为这可能会被用户清除 我找到了方法PushNotificationIOS.checkPermissions,但这并没有告诉我用户是否已经注册 我需要一种方法来知道用户是否“尚未注册”、“接受”或“拒绝” 如果用户尚未注册,我将显示屏幕。如果用户已接受或拒绝通知,我将不显示屏幕 有没有

我想显示一个自定义屏幕,要求用户接受或拒绝其iOS设备上的通知。仅当用户从未注册或从未接受/拒绝应用程序通知时,才应显示此屏幕

尽管如此,我似乎没有找到一种方法来知道用户是否已经注册。我不想使用任何类型的异步存储,因为这可能会被用户清除

我找到了方法
PushNotificationIOS.checkPermissions
,但这并没有告诉我用户是否已经注册

我需要一种方法来知道用户是否“尚未注册”、“接受”或“拒绝”

如果用户尚未注册,我将显示屏幕。如果用户已接受或拒绝通知,我将不显示屏幕

有没有办法让React Native知道这一点


谢谢

这就是我如何签入本机代码的方法

import UserNotifications

  UNUserNotificationCenter.current().getNotificationSettings() { settings in
     switch settings.authorizationStatus {
     case .notDetermined:
        //Not asked
        break
     case .authorized:
        //Granted
        break
     case .denied:
        //Denied
        break
     default:
        //Provisional or unknown future value
        break
     }
  }

最后,我使用Objective-C创建了一个桥,以从javascript访问authorizationStatus:

@implementation NotificationPermissions

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(getAuthorizationStatus:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject)
{
  [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
    resolve(@(settings.authorizationStatus));
  }];
}
const authorizationStatus = await NotificationPermissions.getAuthorizationStatus();
然后它可以在javascript中以这种方式使用:

@implementation NotificationPermissions

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(getAuthorizationStatus:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject)
{
  [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
    resolve(@(settings.authorizationStatus));
  }];
}
const authorizationStatus = await NotificationPermissions.getAuthorizationStatus();

authorizationStatus
是一个介于0和3之间的数字,基于

您所说的“无论用户拒绝还是尚未接受,它都返回相同的内容”是什么意思?函数的返回值或回调中返回的参数?另外,在你的问题中发布一些代码可能有助于理解你的问题我没有任何代码,我不知道如何做:)我已经更新了我的问题以更清楚。你是否使用任何库来实现推送通知或仅使用本机代码?OP明确提到他正在寻找一个React本机解决方案。非本机。@Pranay React native支持本机objective-c、swift和Java模块。这是一个有效的解决方案,可以解决OP@RobbieMilejczak我很清楚它支持本地objective-c和swift。如果要实现这个答案,OP需要在运行时进行大量设置和平台检查,以便为iOS加载此模块,然后检查权限。一个反应性的答案会更好,就像贴出的另一个答案一样。而且,如果你要的是我的话,不是我投了反对票。哎呀,伙计,没必要这么防御性,我不想“追求”任何东西。你说OP显然在寻找React原生解决方案,但这是React原生解决方案,你的批评没有帮助。也许你可以说,一个纯javascript的答案会更好,尽管这实际上是由OP来决定的。向你问好,真的,我不是故意的offense@RobbieMilejczak我没有生气。我只是想说出来,以防你认为我因为我的评论而投了反对票。无论如何,我的意思是,OP可能在寻找JS中的纯反应式答案