我正在寻找一种方法来确定用户是否有,通过设置,启用或禁用他们的推送通知我的应用程序。


当前回答

尽管Zac的答案在iOS 7之前是完全正确的,但自从iOS 8到来后,它就发生了变化。因为enabledRemoteNotificationTypes从iOS 8开始就已经弃用了。对于iOS 8和更高版本,你需要使用isregisteredforremotenotifizations。

—>使用enabledRemoteNotificationTypes >使用isregisteredforremotenotifizations。

其他回答

调用enabledremotenotificationsttypes并检查掩码。

例如:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) 
   // blah blah blah

iOS8及以上:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]

quantumpotato的问题:

类型是由

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

可以使用

if (types & UIRemoteNotificationTypeAlert)

而不是

if (types == UIRemoteNotificationTypeNone) 

将允许你只检查通知是否启用(不用担心声音,徽章,通知中心等)。第一行代码(types & UIRemoteNotificationTypeAlert)如果“Alert Style”设置为“横幅”或“警报”将返回YES,如果“Alert Style”设置为“None”则返回NO,与其他设置无关。

下面是如何在Xamarin.ios中做到这一点。

public class NotificationUtils
{
    public static bool AreNotificationsEnabled ()
    {
        var settings = UIApplication.SharedApplication.CurrentUserNotificationSettings;
        var types = settings.Types;
        return types != UIUserNotificationType.None;
    }
}

如果你支持iOS 10+,只使用UNUserNotificationCenter方法。

尽管Zac的答案在iOS 7之前是完全正确的,但自从iOS 8到来后,它就发生了变化。因为enabledRemoteNotificationTypes从iOS 8开始就已经弃用了。对于iOS 8和更高版本,你需要使用isregisteredforremotenotifizations。

—>使用enabledRemoteNotificationTypes >使用isregisteredforremotenotifizations。

在iOS7和之前,你应该使用enabledRemoteNotificationTypes并检查它是否等于(或不等于取决于你想要什么)UIRemoteNotificationTypeNone。

然而,对于iOS8来说,仅仅检查isregisteredforremotenotifations并不总是足够的,因为上面有许多状态。你还应该检查application.currentUserNotificationSettings.types是否等于(或不等于取决于你想要什么)UIUserNotificationTypeNone!

isregisteredforremotenotifations可能返回true,即使currentUserNotificationSettings。types返回UIUserNotificationTypeNone。