我读过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?五次。
我一次又一次地在Simulator中运行我的应用程序,但是第一次运行时,该应用程序从未提示用户获得推送通知权限。
我使用了Registering for Push Notifications in Xcode 8/Swift 3.0?中的代码,并不断尝试不同的答案,并将代码移到不同的位置,以便仅在按下某个按钮后才向用户询问权限,而不是在应用启动时立即向用户询问。
是否需要向Apple ID等注册,才能使推送通知代码甚至在Simulator中工作?
最佳答案
首先,您只应提示用户一次是否要获取推送通知。因此,将其绑定(bind)到按钮上并尝试每次都运行它是一个糟糕的UX决定。仅当按钮实际执行更多操作(需要启用“推送通知”)时,才将“推送通知”提示绑定(bind)到按钮。
要为您的用户注册推送通知,您应该使用UIApplication
registerForRemoteNotifications
方法。运行此方法时,将提示您的用户是否要接收推送通知-只能接收一次!他们设置的设置将被认为是确定的,并且不会再次提示您用户。如果他们想开始接收推送通知,则必须在应用程序的设置中进行更改。这是预期的行为,也是您应该如何做。
如果只想在用户按下按钮时提示用户,则从应用程序的启动代码中删除对registerForRemoteNotifications
的所有调用,并从与按钮相关的操作中调用该方法。
如果要出于测试目的重置推送通知权限,this is how Apple says it's possible:
关于ios - 按下按钮后如何提示用户输入推送通知权限?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43625614/