Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检测用户对“允许推送通知”对话框的响应_Ios_Objective C_Push Notification - Fatal编程技术网

Ios 检测用户对“允许推送通知”对话框的响应

Ios 检测用户对“允许推送通知”对话框的响应,ios,objective-c,push-notification,Ios,Objective C,Push Notification,当使用“允许推送通知”对话框进行升级时,是否有任何方法可以检测用户选择的内容 我想了解用户点击其中一个对话框按钮(“允许”或“不允许”)时选择的内容 我为什么能这样做?恐怕不行。虽然您可以确定是否启用了通知(使用UIApplication的isRegisteredForRemoteNotifications方法),但这并不能告诉您为什么通知未注册时未注册 可能是由于以下任何原因: •从未提示用户输入 •用户已明确拒绝* •用户在某个时候批准了它们,但后来关闭了它们* 不幸的是,苹果没有提供一种方

当使用“允许推送通知”对话框进行升级时,是否有任何方法可以检测用户选择的内容

我想了解用户点击其中一个对话框按钮(“允许”或“不允许”)时选择的内容
我为什么能这样做?

恐怕不行。虽然您可以确定是否启用了通知(使用UIApplication的
isRegisteredForRemoteNotifications
方法),但这并不能告诉您为什么通知未注册时未注册

可能是由于以下任何原因:

•从未提示用户输入

•用户已明确拒绝*

•用户在某个时候批准了它们,但后来关闭了它们*

不幸的是,苹果没有提供一种方法来检测用户在收到提示时拒绝推送通知注册。我怀疑这是一个有意识的设计决策,旨在减少开发人员对用户的长篇大论

我希望这有帮助


(*…您可以通过在第一次注册时存储持久性标志来推断第二个和第三个选项中的哪一个适用,但这似乎不是您想要的…

没有直接的方法,但我已经实现了一个解决方法:


这里有趣的部分是为
uiapplicationidbecomeactivityfication
添加一个观察者,然后显示请求。触发通知后(即请求得到响应),您可以使用
[[UIApplication sharedApplication]isRegisteredForRemoteNotifications]

检查状态,如果我们有,
hasdeclinedRemoteNotificationPermission
,我们可以将用户引导到“设置”选项卡,而不是静默地调用
registerForRemoteNotifications
。我认为下一个最好的方法是在系统对话框中显示天气标志,然后将该标志与注册的推送令牌组合使用,以确定我们是否需要转到“设置”选项卡或显示推送。