1

我有一个使用以下代码启用推送通知的 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 上使用时,它不会要求权限,但它接收到通知就好了,无法理解问题。

4

1 回答 1

3

看到您的用户在没有出现权限对话框的情况下正在接收推送通知,必须是以下场景:

  1. 他在他的 iPhone 4s 上安装了之前的版本,他已授权推送通知。
  2. 他迅速卸载了以前的版本并安装了您给他的最新版本,而在重新安装之前没有给设备留出一天的时间。
  3. 结果是他没有看到任何要求推送通知权限的对话,因为之前已经授予了权限。

根据Apple 技术说明 2265

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

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

从设备中删除您的应用程序。完全关闭设备并重新打开。前往“设置”>“通用”>“日期和时间”,将日期提前一天或更长时间。再次完全关闭设备并重新打开

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

于 2016-01-11T10:00:26.137 回答