当我删除我的 iOS 应用程序推送通知状态仍然存在

Posted

技术标签:

【中文标题】当我删除我的 iOS 应用程序推送通知状态仍然存在【英文标题】:When I delete my iOS application push notification state remains 【发布时间】:2012-09-04 09:28:18 【问题描述】:

当我第一次使用 Xcode 安装我的 ios 应用程序时,我的 iPhone 会询问我是否要启用推送通知。

我可以发送通知,并且徽章会显示我发送的号码。

当我从我的 iPhone 中删除应用程序并在 Xcode 中重建它并在我的 iPhone 上重新安装它(使用 Xcode)时:

设备没有询问我是否要启用推送。 徽章在那里并且记住最后一个数字。

我在新设备(安装了 IPA)上尝试了相同的应用程序,它要求我提供权限。

我怎样才能让我的设备完全忘记应用程序?

谢谢

【问题讨论】:

@KananVora 你确定你复制了正确的问题吗? 抱歉,不小心贴在这里了…… 嗯,Xcode 和 Appstore 的安装过程肯定是不一样的,你最好按照 Apple 指南中的 Release .ipa 进行预生产测试。我有一个问题 - 您是否在每次启动应用程序时注册应用程序以获取通知? @A-Live 创建 ipa 很痛苦,将其复制到设备上,每次我对我的应用程序进行轻微更改时,难道还有其他原因吗?根据 Xcode 上的日志(我记录设备号),我想我每次都会注册。 我以前从未见过这样的行为,如果那是 iOs 6 预览版,您可能想在 Apple 论坛上解决这个问题。我能给出的唯一建议是尝试从 Organizer - Devices - specific-device-Applications 中删除该应用程序。 【参考方案1】:

首先,iOS 没有任何关系,记住 push settings,badge 值,你没有得到 push notification。我确信还有其他问题。是的,iOS 会记住应用程序的 push settingsbadge 值。当您第一次在设备上安装时,它会要求您确认推送。你可以通过调用setApplicationIconBadgeNumber:来重置badge的值

如果你想重置push settings,那么你可以通过重置你设备的所有setting来实现。

【讨论】:

当然。我刚刚收到我昨天发送的通知(在我发布问题之后)!!【参考方案2】:

对此有一个解决方法,包括将系统时间提前两天,重新启动设备,然后将系统时间改回当前时间。 iOS 设计为每个应用程序每天只请求一次推送权限。

在 iOS 上重置推送通知权限警报 当支持推送的应用注册推送通知时,iOS 会询问 用户是否希望接收该应用程序的通知。一旦用户 已对此警报做出响应,除非 设备已恢复或应用已卸载至少一天。

如果您想模拟您的应用的首次运行,您可以离开 该应用程序卸载了一天。您可以在没有的情况下实现后者 通过将系统时钟提前一天或 更多,完全关闭设备,然后将设备转回 开。

http://developer.apple.com/library/ios/#technotes/tn2265/_index.html

【讨论】:

我提前两天让我的设备计时,然后重新启动但无法正常工作。我正在使用 iPhone 5。 查看下面的 iOS 5.1+ 答案 模拟应用程序的第一次运行..您可以更改捆绑标识符并启动应用程序...只是一个简单的修复..【参考方案3】:

从 Apple 的文档中针对 iOS 7 及更高版本进行了更新:

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

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

    从设备中删除您的应用。 完全关闭设备,然后重新打开。 转到设置 > 常规 > 日期和时间,然后将日期提前一天或更长时间。 再次完全关闭设备,然后重新打开。

对于 iOS 5 和 iOS6:

通过从备份中恢复设备来重置推送通知权限警报 (r. 11450187)。以下是有效执行此操作的步骤:

    使用 Xcode Organizer 在设备上安装您的应用程序。关键是第一次安装应用程序时不要运行它。 使用 iTunes 备份设备。 运行应用程序。将显示推送通知权限警报。 当您要重置推送通知权限警报时,请从您在第一步中创建的备份中恢复设备。

https://developer.apple.com/library/content/technotes/tn2265/_index.html

【讨论】:

这是完美的,截至 2014 年 5 月,iOS7。谢谢!! 这对我有用(iOS 7,XCode 5)。就我而言,问题是我最初不允许推送通知。之后,调用了 didRegisterForRemoteNotificationsWithDeviceToken nor didFailToRegisterForRemoteNotificationsWithError。执行上述步骤后,您可以再次启用它们。 令人难以置信的 Apple - 为您的开发人员打造捷径!【参考方案4】:

我和你在同一条船上。我发现最有帮助的是稍微更改捆绑标识符。

示例: 您的捆绑包标识符是 com.company.app。如果您需要测试启用推送通知,请将标识符更改为 com.company.app1。它将作为新应用安装并具有新的推送通知权限设置。

只需确保在完成测试后将其改回即可。

【讨论】:

【参考方案5】:

如果您有任何应用程序初始化代码(例如,当文档文件夹中没有可用的数据库时复制/初始化数据库。因此您知道它已重新安装)您可以将徽章计数重置为零。

同样,如果用户从包中手动删除 db 文件,或者您的应用没有此类初始化设置,这可能会失败。

【讨论】:

【参考方案6】:

按照以下步骤通过这些步骤刺激您的应用的首次运行:

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

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

3)。转到“设置”>“通用”>“日期和时间”,然后将日期提前一天或更长时间。

4)。再次完全关闭设备,然后重新打开。

【讨论】:

以上是关于当我删除我的 iOS 应用程序推送通知状态仍然存在的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 仅带声音的推送通知

如何从我的 iOS 应用程序中删除推送通知?

当我在 FB Desktop 上看到消息时,FB messenger 如何从 iOS 应用程序中删除推送通知?

iOS 8 和 Cordova:应用程序在首次启动时立即请求推送通知权限

如何在应用程序处于非活动状态时获取推送通知ios swift3

如何清除 iOS 的远程推送通知?