目标C - 检测时用户更改应用的通知设置目标C - 检测时用户更改应用的通知设置(objecti

2019-05-13 13:29发布

我需要时刻了解用户在推送通知设置中选择的选项。
(选项为 - 警报,声音和徽章)

所以,当我的应用程序启动我打电话:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

并检测用户选择的内容。

但是,如何检测,如果用户在应用程序生命周期后更改设置?
有一些,当与此设置的变化发生被调用的委托方法?

Answer 1:

没有委托。 您需要查询UIApplication财产enabledRemoteNotificationTypes周期性,例如在applicationDidBecomeActive:

有关详细信息检查这些问题的答案:

确定iPhone,如果用户已启用推送通知

查看在锁屏和enabledRemoteNotificationTypes - iOS5的

编辑:
如果您需要重置推送通知设置和权限警报,看看在苹果公司的技术说明TN2265 。 在部分“重置推送通知警报的权限在iOS上”,他们解释如何重置iOS上的设置。 然而,许多开发商抱怨程序不起作用。 不知道这个链接将工作,你需要有机会获得苹果论坛,但它是关于这个确切问题一个线程。

我自己想,如果苹果公司可能已删除的权限对话框中的iOS 5.1。 否则,为什么他们会要求应用程序显示警报? 据AppStore的审查指南 :

5.3应用程序是发送推送通知未征得用户同意,将被拒绝

例如路径(应用程序)要求用户选择将其推送通知在唱行动进程的中间,而不是在应用程序启动首次。

不知道应该是什么提示的目的,反正作为应用程序无法查询该通知设定的状态。 特别地,该应用程序可以检查哪个通知类型(使用enabledRemoteNotificationTypes )被启用但如果对于特定应用推送通知(在顶部的通知中心ON / OFF开关)启用或禁用。 至少,这是iOS中5.1的行为。 即使用户禁用该应用通知时,应用程序仍可以注册推送通知(使用registerForRemoteNotificationTypes ),并将收到的APNS令牌。



Answer 2:

检查它,当你的应用程序变得活跃,而不仅仅是在发射升空。



Answer 3:

这是当推通过UrbanAirship实施的示例。 每次当用户选择/退出的推动下委托火灾与方法低于此您可以检查(是/否)。

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

- (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;
    }


文章来源: objective c - Detect when user change the app's notifications settings