我想显示一个自定义屏幕,要求用户在其iOS设备上接受或拒绝通知。仅当用户从未注册或从未接受/拒绝应用的通知时,才应显示此屏幕。
不过,我似乎没有找到一种方法来知道用户是否已经注册。而且我不想使用任何类型的异步存储,因为这可以由用户清理。
我找到了该方法PushNotificationIOS.checkPermissions
但这并没有告诉我用户是否已注册。
我需要一种方法来知道用户是否"尚未注册"、"已接受"或"已拒绝"。
如果用户尚未注册,我将显示屏幕。如果用户已接受或拒绝通知,则不会显示屏幕。
有没有办法用 React-Native 知道这一点?
谢谢
我最终用 Objective-C 创建了一个桥来访问 javascript 的授权状态:
@implementation NotificationPermissions
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(getAuthorizationStatus:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
resolve(@(settings.authorizationStatus));
}];
}
然后它可以在javascript中以这种方式使用:
const authorizationStatus = await NotificationPermissions.getAuthorizationStatus();
authorizationStatus
是介于 0 和 3 之间的数字,基于 UNAuthorizationStatus
这就是我签入本机代码的方式。
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
}
}