我有一个使用以下代码启用了推送通知的iOS应用

 if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
    // iOS 8 Notifications
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

    [application registerForRemoteNotifications];
}
else
{
    // iOS < 8 Notifications
    [application registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
}

当此应用程序在iOS9设备上运行时,它一开始就要求权限,但是在iOS7和iPhone 4上使用时,它不要求权限,但收到通知就很好,无法理解问题。

最佳答案

看到您的用户尽管未显示权限对话框,但仍收到推送通知,因此必须满足以下条件:

  • 他曾在iPhone 4s上使用过以前的版本,并已授权用于推送通知。
  • 他迅速卸载了先前的版本并安装了您给他的最新版本,而无需等待一天的时间重新安装设备。
  • 结果是,由于先前已授予该权限,因此他没有与他进行任何对话以请求推送通知权限。

  • 根据Apple Technical Note 2265:

    启用推送功能的应用首次注册推送通知时,
    iOS询问用户是否希望接收该应用程序的通知。
    用户响应此警报后,不再显示
    除非设备已还原或已在卸载了该应用
    至少一天。


    如果要模拟应用程序的首次运行,可以离开
    该应用卸载了一天。您可以实现后者而无需
    请按照以下步骤实际等待一天:

    从设备中删除您的应用。完全关闭设备,然后
    重新打开。转到设置>常规>日期和时间,然后设置
    提前一天或更长时间约会。再次完全关闭设备,然后
    重新打开

    如果您要求用户在“设置”菜单中检查应用程序特定的权限,他肯定会看到“推送”权限。否则,他将根本不会收到推送通知。

    10-06 13:25
    查看更多