【问题标题】:How to get back "Allow Push Notifications" dialog after it was dismissed once?关闭一次后如何返回“允许推送通知”对话框?
【发布时间】:2014-03-01 13:44:56
【问题描述】:

我正在构建一个严重依赖 APN 的应用程序。在我的应用程序第一次启动时,iOS 会询问是否允许此应用程序使用 APN(作为registerForRemoteNotificationTypes: 调用的结果)。但是,一旦关闭,此对话框将永远不会弹出。我必须手动转到Settings->Notifications->MyApp 以启用/禁用那里的东西。那么,有没有一种方法可以避免这种喧嚣,并在每次我以调试模式启动我的应用程序时真正体验用户在第一次启动时会体验到的体验?

【问题讨论】:

标签: ios iphone objective-c push-notification apple-push-notifications


【解决方案1】:

目前,他们没有程序化方式来提示用户在他们已经决定拒绝后重新接受推送通知。

您只需检查您是否已被授予访问权限,如果未获得访问权限,则在隐私设置中显示提醒用户手动授予权限的视图,以启用应用程序的推送通知功能。

【讨论】:

  • 我什至不是在寻找一种方法来问同样的事情。我所需要的基本上就是将系统带入初始状态。但我明白你的意思。这就是我稍后通过调用[[UIApplication sharedApplication] enabledRemoteNotificationTypes] 所做的事情。问题是我想在应用程序启动时采取不同的行动。我可以尝试使用我认为的相同方法。
  • 我了解您想要做什么,但不幸的是这是不可能的(除非有一些未记录的私有 API 可以这样做)。
【解决方案2】:

Apple say 你可以这样做:

在 iOS 上重置推送通知权限警报

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

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

  1. 从设备中删除您的应用。

  2. 完全关闭设备,然后重新打开。

  3. 转到设置 > 常规 > 日期和时间,然后将日期提前一天或更长时间。

  4. 再次完全关闭设备并重新打开。

【讨论】:

  • 哇...苹果干得好 :) 但是谢谢!总比没有好。我试试看。
  • 副作用:如果您在启用了 iMessage 的 iDevice 上执行此操作,则将时钟移到未来某一天将禁用 iMessage。所以在完成上述操作并重置时钟后,请记得再次启用 iMessages,否则您将无法发送或接收
  • 我刚刚发现的东西:重置权限后,每当再次出现提示时,您可以关闭/打开手机而不是接听提示,这样它就会再次提示下一个应用程序运行。对于更改代码以尝试确定某些代码路径是否/何时会导致提示很有用。
  • @ThomasWatson:打开飞行模式会避免 iMessage 被关闭吗?
  • @Mojo66 我认为它会产生相同的效果,因为打开/关闭 iMessage 与您的在线状态无关 - 但试一试......我没有测试过跨度>
【解决方案3】:

由于时间就是金钱,而其他方法需要永远——只需在调试时一遍又一遍地更改您的捆绑 ID,每次通知都会得到新的查询。对代码满意后,返回原始捆绑 ID。


以下来自 cmets 的主要说明:

  • 暂时关闭所有其他功能(如 IAP)以避免需要更改配置文件。

【讨论】:

  • 我认为这绝对是让应用恢复初始状态的最佳、最快和最安全的方法。
  • 但是您不需要一直更改配置文件吗?
  • @VanDuTran 我不需要,push 仍然对我有用。但即使你必须这样做,它也会比当前标记的解决方案快得多。哈哈!
  • @AlbertRenshaw 哦,天哪,当前的解决方案甚至对我都不起作用......我将其设置为提前两天......
  • 暂时关闭所有其他功能(如 IAP)以避免需要更改配置文件。
【解决方案4】:

在 iOS 9.x 上,您可以在每次删除应用并重新安装时收到提示。这对于 AppStore 生产下载和 adhoc 模式都是如此。设备令牌每次都是唯一的。

@chengsam 验证了这在 iOS 10 中也是如此。 @WongWray 在 iOS 11 中也证实了这一点。

【讨论】:

  • 在 iOS 9.2 (13C75) 上通过 HockeyApp 分发到 iPad Mini(型号 A1489 aka ME276LL/A)的应用程序的临时版本的测试中,我没有看到重新提示)。其他人可以权衡一下吗?
  • 我也没有看到提示:(
  • 谢谢!它在我的 iOS 10 上运行良好。我刚刚将应用程序从 xCode 运行到 iPhone,并在下次运行之前卸载了该应用程序。最简单的答案在这里。
  • 我已经在我的 iOS 10 上进行了测试,它运行良好。这应该是自 2017 年以来的正确答案。
  • 也针对 iOS 11.x 进行了测试。适用于生产和开发
【解决方案5】:

我的问题是没有注册 UserNotificationSettings。这允许 APN 工作,但不能工作背景声音或徽章。

      [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];

【讨论】:

    【解决方案6】:

    如果您只是测试推送通知提示是否正确显示,请使用模拟器。您只需卸载应用程序并重新安装,当您尝试注册推送通知时会再次出现提示。

    【讨论】:

    • 这绝对比整个 change-date-reset 更好。虽然它只适用于 iOS 12 而不是 13 :/
    【解决方案7】:

    在 IOS10 上,我现在只需删除应用程序即可再次获得提示。

    【讨论】:

    • 这在 iOS 8 的时代已经过去了
    【解决方案8】:

    从 iOS 13 及更高版本开始,您需要完成整个更改日期重置的事情,正如 Eran 指出的那样。

    iOS 12 及以下版本,卸载应用即可。这也适用于模拟器,但由于模拟器不支持推送通知,因此您不会获得令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多