【发布时间】:2015-05-18 18:10:40
【问题描述】:
我正在构建一个应用程序,该应用程序会在用户启用开关时询问用户是否允许发布通知。我正在使用此代码:
- (IBAction)mySwitchValueChanged:(id)sender {
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; // ask the user for permission
}
if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) { // Check it's iOS 8 and above
UIUserNotificationSettings *grantedSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (grantedSettings.types != UIUserNotificationTypeNone)
{
// Accepted
} else
{
[self.mySwitch setOn:NO]; // Declined
}
}
}
期望的行为如下:
- 用户滑动开关
- 警报请求许可
- 代码等待用户决定
- 要么执行我在接受的地方编写的任何代码,要么禁用开关。
当前行为使代码立即运行,不等待用户决定。如何更改它以获得所需的行为?
谢谢!
【问题讨论】:
-
你看过你得到的委托回调了吗?
-
阅读
registerUserNotificationSettings的文档中的讨论。它会告诉你如何处理。 -
@rmaddy 正在阅读。我看到文档告诉您:“如果您的应用程序显示警报、播放声音或标记其图标,您必须在启动周期内调用此方法以请求以这些方式提醒用户的权限。”。但是当用户滑动一个开关时,我会调用它,因为他们知道他们在“注册”什么,从而为用户提供了更多的上下文。这是否允许?
-
阅读讨论的第二段。
-
@rmaddy 我读过它,但我不太确定。讨论的第一部分说“您必须在启动周期内调用此方法以请求以这些方式提醒用户的权限”,而再往下则说“建议您在安排任何本地之前调用此方法通知或注册推送通知服务。”
标签: ios objective-c uialertview uilocalnotification uiswitch