iOS - 在初始拒绝后要求启用推送通知

39

我想知道是否可以在应用程序内部,在用户拒绝后强制出现“XXXX想发送推送通知”的弹窗。使用情况如下:

  • 用户安装应用程序,收到关于推送通知的警报,并拒绝了,因为他们还不了解/信任该应用程序。

  • 他们使用应用程序,并主动要求在某些情况下收到通知(例如,所需购买的物品售罄,因此他们希望在其再次有货时得到通知)。

  • 因此,现在用户已要求应用程序通知他们某些特定事项,但已在操作系统级别禁用了推送通知。

  • 因此,如果用户请求警报,但我检测到它们在第一次运行时拒绝了警报,则需要通知他们并让他们开启推送通知以使提醒起作用。

  • 理想情况下,此时我希望强制出现“XXXX想发送推送通知”警报(自他们安装应用程序以来的第二次)。

  • 我猜计划B将向他们显示我的消息,告诉他们必须进入其系统设置并手动打开它,以便接收所需的提醒。 这远非理想。

任何帮助将不胜感激。谢谢。


注意 - 网上有一些评论说,如果你只是删除了应用程序,等待24小时以上,然后重新安装,实际上它会给你第二次机会。希望能帮到你。 - Fattie
3个回答

53

你无法使iOS再次显示警报框,以下是更好的方法:

  1. 在你的NSUserDefaults中保留一个标志来指示是否在启动时注册推送通知。默认情况下,该标志为false。
  2. 启动应用程序时,请检查标志。如果标志为true,则立即进行注册。否则,不要注册。
  3. 当用户第一次执行会导致推送通知的操作时,进行推送通知的注册并在NSUserDefaults中设置标志。

通过这种方式,当用户收到推送通知警报时,他可以了解为什么会收到它,并可能会同意。


感谢您的快速回复。在阅读了这篇文章https://dev59.com/3XE95IYBdhLWcg3wI6ft 的答案后,我得出了完全相同的结论(在发布之前我进行了多次搜索,但当然是在发布之后找到了答案)。我想知道为什么几乎所有的应用程序都在第一次启动时注册?似乎在用户体验应用程序后再进行注册会更好。 - Joel
4
实际上,首次启动时注册是文档中提出的建议:“每次应用启动都应该注册并向其提供程序提供当前令牌。/…/ 通过请求设备令牌并在每次应用程序启动时传递它给提供程序,您有助于确保提供程序拥有设备的当前令牌。 如果用户将备份恢复到与创建备份的设备或计算机不同的设备或计算机上,则必须至少启动一次应用程序才能再次接收通知。” - Matej Balantič
我已经修改了我的答案,以澄清只有在没有注册原因的情况下才应该推迟注册。 - rob mayoff
1
在iOS 8中,您可以在应用程序启动时检查[[UIApplication sharedApplication] isRegisteredForRemoteNotifications],仅在返回YES时注册。然后,您可以在任何时候显示提示。 - Jeff Bowen
不确定PsychoDad的意思,但您可以通过创建新方案并将“运行构建配置”设置为“发布”来进行测试。 - Arnaud

4

我也遇到了类似的问题。经过大量搜索,我决定采取你所说的备选方案B。即向用户显示我的自定义警告,提示需要启用推送功能以获得更好的体验,或者类似的内容。

要检查所需的推送类型是否已启用,请使用以下方法:

- (UIRemoteNotificationType)enabledRemoteNotificationTypes

UIApplication参考文档

我认为这是一个简洁的解决方案。考虑一种情况,即用户在首次接受请求后关闭了推送功能,这个方法即使在这种情况下也可以正常工作。


它在iOS8上已被弃用,请查看此答案:https://dev59.com/k18f5IYBdhLWcg3wB-3E#25197833 - guilherme.minglini

3

最好的方法是(如果你正在制作一款游戏),提前问他们一个问题(例如“您是否希望我们在您的庄稼可以收获时通知您?” - 是 - 否),当他们回答“是”时,触发本地iOS推送弹出窗口。然后您可以在用户漏斗中添加多个问题,并最终捕捉到所有用户。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Zorayr
这是一个不错的解决方案,但是针对的是另一个问题。与原始问题并不完全相关。 - Brian Sachetta

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