繁体   English   中英

重置应用的推送通知设置

[英]Reset push notification settings for app

我正在使用推送通知开发应用程序。 要检查所有可能的用户交互方式,我想在用户拒绝在第一次启动时为我的应用启用推送通知时测试我的应用。

但是,对话框(由registerForRemoteNotificationTypes启动)每个应用程序只出现一次。 如何重置iPhone OS的应用程序内存。 删除应用程序并重新安装没有帮助。

技术说明TN2265:推送通知故障排除

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

如果您想模拟首次运行的应用,可以将应用程序卸载一天。 通过将系统时钟向前设置一天或更长时间,完全关闭设备,然后重新打开设备,您可以实现后者而无需实际等待一天。

更新:如下面的评论中所述,此解决方案自iOS 5.1起停止工作。 我鼓励向Apple提交一个错误,以便他们可以更新他们的文档。 目前的解决方案似乎是重置设备的内容和设置。

更新:技术说明已更新,其中的新步骤在iOS 7中正常运行。

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

从iOS 9开始更新

只需删除并重新安装应用程序,通知状态就会重置为notDetermined (意味着会出现提示)。

感谢Gomfucius的回答: https ://stackoverflow.com/a/33247900/704803

另一个仅用于测试解决方案的方法是简单地更改您的包ID。 一旦完成,别忘了改回来!

在iOS 9.0.2上,每次删除应用程序并重新安装时,我都会收到“注册推送通知警报”。 这适用于AppStore生产下载和adhoc模式。

更新:已确认这适用于iOS 9.x.

如前所述,重置iOS3上的应用程序的通知状态的方法更新为iOS5。

这适用于iOS6:

  • 从设备中删除应用程序
  • 将设备日期时间设置为提前两天或更长时间
  • 重启设备
  • 将设备日期时间设置为提前两天或更长时间
  • 重启设备
  • 再次安装并运行该应用程序

但是这只会使初始提示再次出现 - 它不会删除任何其他推送状态相关的东西。

plist:/private/var/mobile/Library/RemoteNotification/Clients.plist

...包含推送通知的注册客户端。 删除应用程序的条目将导致提示重新出现

以编程方式执行它似乎每次都适合我。 我有一个没有注释以下行的构建:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

我每次想从PN取消注册时都会运行它。 您可能必须从最近列表中明确地结束应用,并在“设置”应用中使用“通知中心”以使其正确。

此外,要求用户注册PN的UI提示可能不会显示。 不确定是否已在任何最新的iOS版本中禁用。

正如ianolito所说,设置日期应该有效:

通过将系统时钟向前设置一天或更长时间,完全关闭设备,然后重新打开设备,您可以实现后者而无需实际等待一天。

我注意到我的设备(iPhone 4,iOS 6.1.2)将系统时钟设置为前一天甚至几天都不适合我。 所以我将日期设置为一个月 ,然后它确实有效,我的应用程序再次显示通知提示。

希望这对任何人都有帮助,它可能有点头痛!

我同意micmdk ..我有一个推送通知的开发环境设置,需要一种方法来重置我的手机看起来像一个初始安装...只有这些精确的步骤适合我...需要重新启动设备:

来自APPLE TECH DOC:

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

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

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

  2. 完全关闭设备并重新打开。

  3. 转到设置>常规>日期和时间,并将日期设置为一天或更长时间。

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

在已接受的答案中提到的相同技术说明( TN2265 - 故障排除推送通知)已经针对iOS 5及更高版本的解决方案进行了更新。

简而言之:每次都创建一个备份并从中恢复。

在iOS 5及更高版本中,通过从备份还原设备来重置推送通知权限警报(r.11450187)。 以下是有效执行此操作的步骤:

  1. 使用Xcode Organizer在设备上安装您的应用程序。 关键是首次安装应用程序而不运行它。
  2. 使用iTunes备份设备。
  3. 运行应用程序。 将显示推送通知权限警报。
  4. 如果要重置推送通知权限警报,请从您在第一步中创建的备份中还原设备。

我过去一直在想这个,并得出结论,它实际上并不是我的代码的有效测试用例。 我不认为您的应用程序代码实际上可以区分第一次拒绝通知或稍后从iPhone通知设置禁用通知的人之间的区别。 确实,用户体验不同,但隐藏在对registerForRemoteNotificationTypes的调用中。

调用unregisterForRemoteNotifications不会从通知设置中完全删除应用程序 - 尽管它确实删除了该应用程序的设置内容。 所以这仍然不会导致在下次应用程序运行时第二次向用户显示对话框(至少在我目前正在测试的v3.1.3上没有)。 但正如我上面所说,你可能不应该担心这一点。

Apple Tech Note还描述了您可以恢复设备以重置推送通知对话框。

它并没有说你也可以在设备本身(iOS 5.x)上使用“常规 - >重置 - >擦除所有内容和设置”选项。

除了ianolito的答案。

与我一年前下载的应用程序存在同样的问题并且最初拒绝推送通知。 现在想要回推推送通知,这些步骤适用于iOS 7测试版。 不确定哪个点完全触发了它。

  • 关闭并删除该应用。
  • 转到您的iCloud设置并从iCloud中删除该应用程序。 在已启用应用程序的iCloud备份的所有其他设备上执行此操作。 停用并删除后进行全新备份。 应该不再在备份下列出该应用程序。 (这可能是为什么ianolito描述的Apple技术说明停止在iOS 5中工作的原因,因为iCloud是在iOS 5中引入的,并且许多都启用了iCloud备份以启用应用程序。)
  • 转到您的时间设置并提前超过1个月设置时间。
  • 关闭iPhone(不重置)。
  • 等一下,再次打开并再次下载应用程序。
  • 启动应用程序,我再次出现了对话框。
  • 再次启用应用备份,因为它仍处于停用状态。 纠正时间。

感谢上帝,我没有“删除所有内容和设置”。 也许它会帮助别人。

经过几个小时的搜索,并没有上述建议的运气,这就像3.x +的魅力

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM