objective c - 当用户更改应用程序的通知设置时检测

时间:2012-04-17 12:12:28

标签: iphone objective-c push-notification apple-push-notifications appsettings

我需要始终了解用户在推送通知设置中选择的选项 (选项包括 - 警报,声音和徽章)

因此,当我的应用启动时,我致电:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

并检测用户选择的内容。

但是如何在应用程序生命周期内检测用户是否稍后更改设置? 是否有一些委托方法在使用此设置发生更改时被调用?

4 个答案:

答案 0 :(得分:22)

没有代表。您需要定期查询UIApplication属性enabledRemoteNotificationTypes,例如applicationDidBecomeActive:

详情请查看以下答案:

Determine on iPhone if user has enabled push notifications

View In Lock Screen and enabledRemoteNotificationTypes - iOS5

修改
如果您需要重置推送通知设置和权限提醒,请查看Apple technical note TN2265。在“重置iOS上的推送通知权限警报”部分中,他们解释了如何重置iOS上的设置。但是,许多开发人员抱怨该程序不起作用。不确定this link是否有效,您需要访问Apple论坛,但这是关于这个问题的主题之一。

我自己想知道苹果是否已经删除了iOS 5.1中的权限对话框。否则他们为什么要求应用程序显示警报?根据{{​​3}}:

5.3在未事先征得用户同意的情况下发送推送通知的应用将被拒绝

例如,Path(应用程序)要求用户在单一过程中选择加入推送通知,而不是在应用程序第一次启动时。

由于应用程序无法查询通知设置的状态,因此无法确定提示的目的是什么。特别是,应用程序可以检查启用或禁用特定应用程序的推送通知的启用通知类型(使用enabledRemoteNotificationTypes),但不是(顶部的通知中心ON / OFF开关)。至少这是iOS 5.1中的行为。即使用户禁用该应用程序的通知,应用程序仍然可以注册推送通知(使用registerForRemoteNotificationTypes)并将收到APNS令牌。

答案 1 :(得分:7)

当您的应用变为活动状态而不仅仅是在发布时检查它。

答案 2 :(得分:0)

这是Push通过UrbanAirship实施的一个例子。每当用户选择加入/选择退出以进行代理火灾时,以及使用此方法,您可以检查(是/否)。

如果不使用UrbanAirship,UIApplication委托也可以实现同样的目标。

- (void)registrationSucceededForChannelID:(NSString )channelID deviceToken:(NSString )deviceToken
    {
        NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification]?@"YES":@"NO");
    }


    - (BOOL)appRegisterForPushNotification {
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
            UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
            return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound));
        }
        return NO;
    }

答案 3 :(得分:0)

除了答案@ Nick Bull 将您敏感的ViewController订阅到 UIApplicationWillEnterForegroundNotification 用户完成“设置”工作并返回到您的应用后的监听:

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(appEnterForeground:)
                                             name: UIApplicationWillEnterForegroundNotification object:nil];

Swift变体在这里:How to check that user is back from Settings