iOS7 – enabledRemoteNotificationTypes返回UIRemoteNotificationTypeNone但在Settings.app中启用警报,徽章和声音

我在视图控制器按钮操作中有以下代码:
- (IBAction)requestPermissions:(id)sender
{
  DDLogInfo(@"Start permission requesting.");

  if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]){
    [[UIApplication sharedApplication] registerForRemoteNotifications];
  } else {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didBecomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];
    [[UIApplication sharedApplication]
     registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound];
  }
}

注册完成后,发布了成功活动通知,我正在检查用户做了什么:

-(void)didBecomeActive:(NSNotification *)notification
{
   if([[UIApplication sharedApplication] enabledRemoteNotificationTypes] == UIRemoteNotificationTypeNone){
// if user decline 
}
} else {
 // if user accept
}

所以我的问题是:如果用户拒绝接收推送通知并稍后决定启用它们(设置 – >通知中心 – >我的应用程序),则会出现意外:启用“警报”,“徽章”和“声音”在“设置”中,但应用程序返回UIRemoteNotificationTypeNone.

有什么想法有什么不对?

注意:我知道这些方法已被弃用,所以请不要告诉我使用registerForRemoteNotifications:和UIUserNotificationSettings,它已经完成了.

解决方法

好吧,可能它在应用程序重启后返回一个正确的值,你能检查一下吗?我发现当你的应用程序在后台时更改权限时iOS会自动杀死你的应用程序的情况,例如:照片供稿访问;我想在这种情况下它只是iOS中的一个错误实现,这不会让我感到惊讶.我想我已经完成了你描述的这种情况,并且在发现它返回无效/旧值直到重新启动之后,我放弃了并且在需要重启时进行流量计数.

无论如何,我认为你无能为力.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...