2017-04-26 70 views
3

我读How to control when to prompt user for push notification permissions in iOS以及类似的问题,但他们没有写在Swift 3中。按下按钮后,如何提示用户推送通知权限?

我已经读了Registering for Push Notifications in Xcode 8/Swift 3.0?五次。

我一遍又一遍在模拟器中运行我的应用程序,但第一次后,应用程序从未提示用户推送通知权限。

我使用的代码从Registering for Push Notifications in Xcode 8/Swift 3.0?和不断尝试不同的答案和代码移动到不同的地方,这样用户将被要求同意后,才按下某个按钮,而不是立即时,应用程序启动。

我是否必须注册一个Apple ID等等的推送通知代码才能在模拟器中工作工作

+0

“后的第一时间,应用程序不会提示用户推送通知权限的用户” 嘛,没它提示的第一次?你回答了什么? –

+0

我不认为模拟器提示推送通知。 –

回答

2

首先,您应该只提示您的用户一次关于他们是否要获取推送通知。因此,将它绑定到按钮并尝试每次运行它都是一个糟糕的用户体验决定。如果按钮实际上做了更多需要启用推送通知的内容,则只能将推送通知提示与按钮绑定。

要向用户注册推送通知,您应该使用UIApplicationregisterForRemoteNotifications方法。当此方法运行时,系统会提示您的用户是否要接收推送通知 - 但仅限一次!他们设置的设置将被视为确定性的,您的用户将会再次提示而不是。如果他们想要开始接收推送通知,则必须在应用的设置中更改该通知。这是预期的行为,是你应该怎么做的。

如果你想,当他们按一个按钮,仅提示用户,然后从你的应用程序的启动代码中删除,以registerForRemoteNotifications任何呼叫和呼叫从绑定到您的按钮,而不是操作的方法。

如果要重置推送通知权限用于测试目的this is how Apple says it's possible:

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

第一时间推送通知启用推送应用寄存器,iOS会询问用户是否希望收到该应用程序的通知。一旦用户对此警报作出响应,除非设备已恢复或应用程序已卸载至少一天,否则不会再次出现。

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

  1. 从设备上删除您的应用程序。
  2. 完全关闭设备并重新打开设备。
  3. 转到设置>常规>日期&时间和日期提前一天或更多。
  4. 再次完全关闭设备并重新打开设备。
+0

“首先,您应该只提示用户一次是否要获取推送通知,因此将其绑定到按钮并尝试每次运行都是一个糟糕的用户体验决定。” 绝对!每次应用启动时,我都不会尝试运行它,这是初始入门体验的一部分。 “仅在按下按钮时提示用户......从与按钮相关的操作中调用该方法。” 这意味着将代码放入View Controller中的App Delegate中吗?我尝试过,但它仍然要求在应用程序打开后立即获得许可。 – jfjldsfjljfkls

+0

它可能会根据您在Info.plist中指定的通知类型进行询问。但奇怪的是,因为每个可用资源都似乎表明只有在调用registerForRemoteNotifications时才会显示推送通知提示。不幸的是,我现在无法对此进行测试。 –