此问题特定于iOS 10 APNS更改。
这是我应用的流程:
我只是在用户登录时请求推送通知(步骤4)。因此,在用户注销之前,我将无法重新请求推送。
有没有任何简洁明了的解决方案,以便我们可以支持iOS 10更改,同时仍然支持iOS 8或9?
答案 0 :(得分:6)
使用此代码 -
if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) {
// yes
}else{
// no
}
答案 1 :(得分:6)
UIUserNotificationSettings在iOS8中已弃用。如果要访问应用程序设置的常规状态,请查看新框架UNUserNotifications。我的理解是它将推动和本地视为一件事。注册通知后,您可以调用注册推送。但是对于本地权限 - 标记等,您仍需要请求用户权限。也就是说,您的设备可以在没有用户许可的情况下接受推送通知以接收数据更新,但您只能通过具有权限的中心显示通知。以下是如何查看已授予的权限。
将框架导入您的班级
@import UserNotifications;
查询设置
- (void)_queryNotificationsStatus
{
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *settings){
//1. Query the authorization status of the UNNotificationSettings object
switch (settings.authorizationStatus) {
case UNAuthorizationStatusAuthorized:
NSLog(@"Status Authorized");
break;
case UNAuthorizationStatusDenied:
NSLog(@"Status Denied");
break;
case UNAuthorizationStatusNotDetermined:
NSLog(@"Undetermined");
break;
default:
break;
}
//2. To learn the status of specific settings, query them directly
NSLog(@"Checking Badge settings");
if (settings.badgeSetting == UNAuthorizationStatusAuthorized)
NSLog(@"Yeah. We can badge this puppy!");
else
NSLog(@"Not authorized");
}];
}
答案 2 :(得分:2)
只要您的应用进入前台,就可以使用currentUserNotificationSettings。
UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (grantedSettings.types == UIUserNotificationTypeNone) {
NSLog(@"No permiossion granted");
}
else if (grantedSettings.types & UIUserNotificationTypeSound & UIUserNotificationTypeAlert ){
NSLog(@"Sound and alert permissions ");
}
else if (grantedSettings.types & UIUserNotificationTypeAlert){
NSLog(@"Alert Permission Granted");
}
如果您想检查状态是否与之前的状态有所改变,您可以将currentUserNotificationSettings
的先前值保留为某个变量,并将其与applicationWillEnterForeground
方法中的当前值进行比较。