registerUserNotificationSettings没有显示提示iOS 8

问题描述 投票:6回答:3

我似乎无法在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);
}

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

ios objective-c uilocalnotification
3个回答
17
投票

iOS 11+更新:

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


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

Permissions Prompt Behavior

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

First usage

In the Settings App you can configure Notifications for each app

  1. 向下滚动,选择您的应用
  2. 选择Notifications
  3. 启用/禁用它们,或调整它们的行为

Resetting the Push Notifications Permissions Alert on iOS

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

如果您想模拟首次运行的应用,可以将应用程序卸载一天。您可以通过以下步骤实现后者而无需等待一天:

  1. 从设备中删除您的应用。
  2. 完全关闭设备并重新打开。
  3. 转到设置>常规>日期和时间,并将日期设置为一天或更长时间。
  4. 再次完全关闭设备并重新打开。

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


1
投票

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

- (void)registerLocalNotification{

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

0
投票

如果有人仍然被卡住,切换为我工作的选项。就是这个

UNAuthorizationOptions options = UNAuthorizationOptionAlert & UNAuthorizationOptionSound;

我把它改成了这个

UNAuthorizationOptions options = UNAuthorizationOptionAlert;

并回到

UNAuthorizationOptions options = UNAuthorizationOptionAlert & UNAuthorizationOptionSound;

© www.soinside.com 2019 - 2024. All rights reserved.