iOS本地通知:应用程序没有请求通知用户的权限

4

我不确定这是否是一个奇怪的 bug,但在我的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

中,我有以下代码行来请求用户权限:

// Register for Push Notitications, if running iOS 8
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                        UIUserNotificationTypeBadge |
                                                        UIUserNotificationTypeSound);
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                                 categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    } else {
        // Register for Push Notifications before iOS 8
        [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                         UIRemoteNotificationTypeAlert |
                                                         UIRemoteNotificationTypeSound)];
    }

在模拟器上一切正常,但在我的iPhone上安装应用程序时,它不会询问这些权限。我已经设置了断点以确保代码行得到执行。

当我进入“设置>通知>我的应用程序”时,通知是开启的,所以系统似乎知道我之前已经授予权限,因此不需要再次询问,但这似乎很奇怪。

有人之前看到过这种情况吗?


2
你尝试过从你的设备中卸载该应用,然后重新安装以重置所有内容吗? - BoilingLime
我认为https://dev59.com/ZGcs5IYBdhLWcg3ww2tP也适用于这里:您必须重置隐私设置(或按照评论中的说明更改设备上的时间并重新启动)。 - Martin R
1个回答

6

我在谷歌搜索后找到了答案(之前没有找到答案)

直接引用苹果公司的话:

iOS上重置推送通知权限警告,当一个启用推送功能的应用程序第一次注册推送通知时,iOS会询问用户是否希望接收该应用程序的通知。 一旦用户响应此警报,除非恢复设备或应用程序已卸载至少一天,否则不会再次出现。

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

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

经过这样做之后,请求权限就可以再次工作了。


3
“已经卸载至少一天”,我想知道苹果使用了什么扭曲的逻辑来得出这个结论。删除应用程序应该会删除通知决策。感谢您对此澄清。 - Sam B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接