registerUserNotificationSettings没有显示提示iOS 8

时间:2015-03-25 20:02:25

标签: ios objective-c uilocalnotification

我似乎无法在iOS 8.1或8.2中显示registerUserNotificationSettings的提示。

以下是我在didFinishLaunchingWithOptions中所做的事情:

  if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
       #ifdef __IPHONE_8_0
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert
                                                                                             |UIUserNotificationTypeSound | UIUserNotificationTypeBadge) categories:nil];
        NSLog(@"Reg settings %@", settings);
        [application registerUserNotificationSettings:settings];
    #endif
    }

此处也可以回复正确的电话:

- (void)application:(UIApplication *)application
didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{
    NSLog(@"Did register - %@", notificationSettings);
}

然而,没有显示任何提示。更令人讨厌的是,当设备被锁定时会显示警报,但不会发出通知警报声。关于解决方案的任何想法?

3 个答案:

答案 0 :(得分:17)

iOS 11 +更新:

因为iOS 11 Resetting the Push Notifications Permissions Alert on iOS程序似乎不再需要了。只需取消/重新安装应用程序。


使用您的代码,我会在第一次启动应用时收到提示,并且仅在第一次启动时收到提示。但是afaik,这是iOS中的预期行为。 至少它对于照片库,麦克风访问等是相同的:

权限提示行为

  1. 首次使用时弹出(或至少使用它的请求)
  2. Apple在设置中添加条目(例如隐私,或仅在通知设置下)
  3. 首次使用

    Permissions promt

    Settings应用中,您可以为每个应用配置Notifications

    1. 向下滚动,选择您的应用
    2. 选择Notifications
    3. 启用/禁用它们,或调整其行为
    4. 重置iOS上的推送通知权限警报

        

      推送启用的应用首次注册推送通知,   iOS会询问用户是否希望接收该应用的通知。   一旦用户响应此警报,则不再显示该警报   除非设备已恢复或已卸载应用程序   至少一天。

           

      如果您想模拟首次运行的应用,可以离开   该应用程序已卸载一天。没有你可以实现后者   实际上是按照以下步骤等待一天:

           
          
      1. 从设备中删除您的应用。
      2.   
      3. 完全关闭设备并重新打开。
      4.   
      5. 转到设置>一般>日期&时间并将日期设定为一天   或更多。
      6.   
      7. 再次完全关闭设备并重新打开。
      8.   

      来源:https://developer.apple.com/library/ios/technotes/tn2265/_index.html

答案 1 :(得分:1)

更改构建目标最新版本,您将看到弹出消息。 在iOS 8中我没有显示相同的问题,但在iOS 10中显示警报弹出消息,此警报消息将仅显示一次应用程序周期。除非您删除并重新安装新的。

- (void)registerLocalNotification{

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}

答案 2 :(得分:0)

如果仍然有人卡住,请切换对我有用的选项。就是这个

UNAuthorizationOptions options = UNAuthorizationOptionAlert & UNAuthorizationOptionSound;

我将其更改为此

UNAuthorizationOptions options = UNAuthorizationOptionAlert;

然后返回

UNAuthorizationOptions options = UNAuthorizationOptionAlert & UNAuthorizationOptionSound;