【问题标题】:how to activate the ios notification settings programmatically?如何以编程方式激活 ios 通知设置?
【发布时间】:2012-04-19 01:28:40
【问题描述】:

我的应用注册这样的通知:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

但如果我手动进入通知设置,禁用所有内容(通知中心、警报、声音、徽章)然后卸载并重新安装应用程序(或者只是重新安装而不先卸载),我的 iPhone 会保留旧设置。如何在重新安装时强制重新激活这些设置?

【问题讨论】:

    标签: ios settings apple-push-notifications


    【解决方案1】:

    你不能。在 iOS 5.0 中,有一个未记录的功能可以通过 url 方案从您的应用程序打开通知设置页面(或任何设置页面)。然后您可以要求用户启用通知。但它在 5.1 中被删除,无论如何可能不会被 Apple 接受。

    registerForRemoteNotificationTypes 仅在第一次您调用它时询问用户他是否想接受来自您的应用程序的通知。如果稍后用户更改通知设置,则它不会再询问它。您可以使用enabledRemoteNotificationTypes 检查是否为您的应用程序启用了通知,并在需要时自行警告用户,但用户必须手动进入设置并重新启用它们。您不能再通过您的应用程序执行此操作了。

    自 iOS 8.0 起更新

    从 iOS 8.0 开始,Apple 返回了打开您应用的系统设置页面的可能性:

    NSURL* settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:settingsURL];
    

    【讨论】:

    • 那么 registerForRemoteNotificationTypes: 打算做什么?
    • 我将此信息添加到答案中。
    • 然后如果我卸载并重新安装该应用程序,是否仍会保留此设置?有没有办法重置它? (重置菜单中的所有设置除外)
    • iOS 会保留一些关于您的应用程序的信息,即使它已被卸载。其中包括钥匙串中应用程序的条目、应用程序图标的位置,显然,用户曾经手动禁用通知这一事实。恐怕你的问题的答案是否定的。
    【解决方案2】:

    您需要重置推送通知权限。Apple 提供了一种重置权限的方法-

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

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

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

    1.Delete your app from the device.
    2.Turn the device off completely and turn it back on.
    3.Go to Settings > General > Date & Time and set the date ahead a day or more.
    4.Turn the device off completely again and turn it back on.
    

    更多详情见:https://developer.apple.com/library/ios/technotes/tn2265/_index.html

    【讨论】:

      【解决方案3】:

      尝试将您的设备日期更改为当前日期后 1 天或 2 天。有时它存储在设备的钥匙串中并存储 1 或 2 天。在日历和位置权限的情况下,它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多