Określ na iPhonie, czy użytkownik włączył powiadomienia push

Szukam sposobu, aby określić, czy użytkownik, poprzez ustawienia, włączył lub wyłączył powiadomienia push dla mojej aplikacji.

Author: Suraj Sonawane, 2009-10-08

19 answers

Zadzwoń enabledRemoteNotificationsTypes i sprawdź maskę.

Na przykład:

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

IOS8 i wyżej:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]
 299
Author: Zac Bowling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 13:29:05

Nie mogę skomentować (za mało reputacji), ale Re: Problem quantumpotato:

Gdzie types jest podane przez

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

Można użyć

if (types & UIRemoteNotificationTypeAlert)

Zamiast

if (types == UIRemoteNotificationTypeNone) 

Pozwoli Ci sprawdzić tylko, czy powiadomienia są włączone (i nie martw się o Dźwięki, odznaki, Centrum powiadomień itp.). Pierwsza linia kodu (types & UIRemoteNotificationTypeAlert) zwróci YES Jeśli "styl alertu" jest ustawiony na" Banery " lub "Alerty", a NO Jeśli" styl alertu "jest ustawiony na" brak", niezależnie od innych ustawienia.

 99
Author: Tim Camber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-15 16:23:24

W najnowszej wersji iOS ta metoda jest teraz przestarzała. Aby obsługiwać iOS 7 i iOS 8, Użyj:

UIApplication *application = [UIApplication sharedApplication];

BOOL enabled;

// Try to use the newer isRegisteredForRemoteNotifications otherwise use the enabledRemoteNotificationTypes.
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
    enabled = [application isRegisteredForRemoteNotifications];
}
else
{
    UIRemoteNotificationType types = [application enabledRemoteNotificationTypes];
    enabled = types & UIRemoteNotificationTypeAlert;
}
 52
Author: Kevin Sylvestre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-19 23:53:52

Zaktualizowany kod swift4. 0 , iOS11

import UserNotifications

UNUserNotificationCenter.current().getNotificationSettings { (settings) in
   print("Notification settings: \(settings)")
   guard settings.authorizationStatus == .authorized else { return }

   //Not authorised 
   UIApplication.shared.registerForRemoteNotifications()
}

Kod dla swift3. 0, iOS10

    let isRegisteredForRemoteNotifications = UIApplication.shared.isRegisteredForRemoteNotifications
    if isRegisteredForRemoteNotifications {
        // User is registered for notification
    } else {
        // Show alert user is not registered for notification
    }

Z iOS9 , Swift 2.0 UIRemoteNotificationType jest przestarzały, użyj następującego kodu

let notificationType = UIApplication.shared.currentUserNotificationSettings!.types
if notificationType == UIUserNotificationType.none {
        // Push notifications are disabled in setting by user.
    }else{
  // Push notifications are enabled in setting by user.

}

Po prostu sprawdź, czy powiadomienia Push są włączone

    if notificationType == UIUserNotificationType.badge {
        // the application may badge its icon upon a notification being received
    }
    if notificationType == UIUserNotificationType.sound {
        // the application may play a sound upon a notification being received

    }
    if notificationType == UIUserNotificationType.alert {
        // the application may display an alert upon a notification being received
    }
 44
Author: ViJay Avhad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-15 08:02:51

Poniżej znajdziesz pełny przykład, który obejmuje zarówno iOS8, jak i iOS7 (oraz niższe wersje). Należy pamiętać, że przed iOS8 nie można odróżnić "powiadomienia zdalne wyłączone" i "tylko widok w lockscreen włączone".

BOOL remoteNotificationsEnabled = false, noneEnabled,alertsEnabled, badgesEnabled, soundsEnabled;

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    // iOS8+
    remoteNotificationsEnabled = [UIApplication sharedApplication].isRegisteredForRemoteNotifications;

    UIUserNotificationSettings *userNotificationSettings = [UIApplication sharedApplication].currentUserNotificationSettings;

    noneEnabled = userNotificationSettings.types == UIUserNotificationTypeNone;
    alertsEnabled = userNotificationSettings.types & UIUserNotificationTypeAlert;
    badgesEnabled = userNotificationSettings.types & UIUserNotificationTypeBadge;
    soundsEnabled = userNotificationSettings.types & UIUserNotificationTypeSound;

} else {
    // iOS7 and below
    UIRemoteNotificationType enabledRemoteNotificationTypes = [UIApplication sharedApplication].enabledRemoteNotificationTypes;

    noneEnabled = enabledRemoteNotificationTypes == UIRemoteNotificationTypeNone;
    alertsEnabled = enabledRemoteNotificationTypes & UIRemoteNotificationTypeAlert;
    badgesEnabled = enabledRemoteNotificationTypes & UIRemoteNotificationTypeBadge;
    soundsEnabled = enabledRemoteNotificationTypes & UIRemoteNotificationTypeSound;
}

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    NSLog(@"Remote notifications enabled: %@", remoteNotificationsEnabled ? @"YES" : @"NO");
}

NSLog(@"Notification type status:");
NSLog(@"  None: %@", noneEnabled ? @"enabled" : @"disabled");
NSLog(@"  Alerts: %@", alertsEnabled ? @"enabled" : @"disabled");
NSLog(@"  Badges: %@", badgesEnabled ? @"enabled" : @"disabled");
NSLog(@"  Sounds: %@", soundsEnabled ? @"enabled" : @"disabled");
 32
Author: tilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-28 07:01:05

Swift 3+

    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { (settings: UNNotificationSettings) in
            // settings.authorizationStatus == .authorized
        })
    } else {
        return UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert) ?? false
    }

Rxswift obserwowalna wersja dla iOS10+:

import UserNotifications
extension UNUserNotificationCenter {
    static var isAuthorized: Observable<Bool> {
        return Observable.create { observer in
            DispatchQueue.main.async {
                current().getNotificationSettings(completionHandler: { (settings: UNNotificationSettings) in
                    if settings.authorizationStatus == .authorized {
                        observer.onNext(true)
                        observer.onCompleted()
                    } else {
                        current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in
                            observer.onNext(granted)
                            observer.onCompleted()
                        }
                    }
                })
            }
            return Disposables.create()
        }
    }
}
 24
Author: Adam Smaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 11:05:46

Próbując wspierać zarówno iOS8, jak i lower, nie miałem zbyt wiele szczęścia używając isRegisteredForRemoteNotifications, Jak zasugerował Kevin. Zamiast tego użyłem currentUserNotificationSettings, który świetnie sprawdzał się w moich testach.

+ (BOOL)notificationServicesEnabled {
    BOOL isEnabled = NO;

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){
        UIUserNotificationSettings *notificationSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];

        if (!notificationSettings || (notificationSettings.types == UIUserNotificationTypeNone)) {
            isEnabled = NO;
        } else {
            isEnabled = YES;
        }
    } else {
        UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
        if (types & UIRemoteNotificationTypeAlert) {
            isEnabled = YES;
        } else{
            isEnabled = NO;
        }
    }

    return isEnabled;
}
 17
Author: Shaheen Ghiassy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-05 11:00:36

Niestety żadne z tych rozwiązań nie zapewniło naprawdę rozwiąże problem, ponieważ na koniec dnia interfejsy API są poważnie pozbawione, jeśli chodzi o dostarczanie istotnych informacji. Możesz jednak zgadnąć, że użycie currentUserNotificationSettings (iOS8+) nie wystarczy w obecnej formie, aby odpowiedzieć na to pytanie. Chociaż wiele rozwiązań tutaj wydaje się sugerować, że albo To albo isRegisteredForRemoteNotifications jest bardziej ostateczną odpowiedzią, tak naprawdę nie jest.

Rozważ to:

Z isRegisteredForRemoteNotifications dokumentacją stwierdza:

Zwraca Yes, jeśli aplikacja jest obecnie zarejestrowana do powiadomień zdalnych, biorąc pod uwagę dowolne ustawienia systemowe...

Jednak jeśli wrzucisz po prostu NSLog do delegata aplikacji, aby obserwować zachowanie, jest jasne, że nie zachowuje się to tak, jak przewidujemy, że zadziała. Dotyczy to bezpośrednio powiadomień zdalnych, które zostały aktywowane dla tej aplikacji / urządzenia. Po aktywacji dla za pierwszym razem zawsze zwróci YES. Nawet wyłączenie ich w Ustawieniach (powiadomienia) nadal spowoduje powrót YES dzieje się tak dlatego, że od iOS8 aplikacja może rejestrować powiadomienia zdalne, a nawet wysyłać do urządzenia bez włączania powiadomień przez użytkownika, po prostu może nie wykonywać alertów, odznak i dźwięków bez włączania tego przez użytkownika. Ciche powiadomienia są dobrym przykładem czegoś, co możesz nadal robić nawet po wyłączeniu powiadomień.

As far jako currentUserNotificationSettings wskazuje jedną z czterech rzeczy:

Alarmy są włączone Odznaki są na Sound is on Żaden nie jest włączony.

Daje to absolutnie żadnych wskazówek na temat innych czynników lub samego przełącznika powiadomień.

Użytkownik może w rzeczywistości wyłączyć odznaki, dźwięk i alerty, ale nadal mają Pokaż na lockscreen lub w centrum powiadomień. Ten użytkownik powinien nadal otrzymywać powiadomienia push i widzieć je zarówno na ekranie blokady, jak i w centrum powiadomień. Oni Włącz powiadomienia. Ale currentUserNotificationSettings zwróci: UIUserNotificationTypeNone W takim przypadku. Nie jest to tak naprawdę wskaźnikiem rzeczywistych ustawień użytkowników.

Kilka domysłów można zrobić:

  • Jeśli isRegisteredForRemoteNotifications jest NO, możesz założyć, że to urządzenie nigdy nie zostało pomyślnie zarejestrowane do zdalnych powiadomień.
  • po pierwszej rejestracji do powiadomień zdalnych wywołanie zwrotne do application:didRegisterUserNotificationSettings: jest wykonane zawierające ustawienia powiadomień użytkownika w tym czasie, ponieważ jest to pierwszy raz a użytkownik został zarejestrowany ustawienia powinny wskazywać, co użytkownik wybrał w zakresie żądania uprawnień. Jeśli ustawienia są równoważne z czymkolwiek innym niż: UIUserNotificationTypeNone, wtedy pozwolenie push zostało udzielone, w przeciwnym razie zostało odrzucone. Powodem tego jest to, że od momentu rozpoczęcia procesu zdalnej rejestracji użytkownik ma tylko możliwość zaakceptowania lub odrzucenia, przy czym początkowe ustawienia akceptacji są ustawieniami ustawionymi podczas procesu rejestracji.
 15
Author: iYorke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-25 14:36:11

Aby uzupełnić odpowiedź, może zadziałać coś takiego...

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
switch (types) {
   case UIRemoteNotificationTypeAlert:
   case UIRemoteNotificationTypeBadge:
       // For enabled code
       break;
   case UIRemoteNotificationTypeSound:
   case UIRemoteNotificationTypeNone:
   default:
       // For disabled code
       break;
}

Edit: to nie w porządku. ponieważ są to bitowe rzeczy, nie będzie działać z przełącznikiem, więc skończyłem z tym: {]}

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
UIRemoteNotificationType typesset = (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge);
if((types & typesset) == typesset)
{
    CeldaSwitch.chkSwitch.on = true;
}
else
{
    CeldaSwitch.chkSwitch.on = false;
}
 8
Author: pojomx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-08 18:33:37

Dla iOS7 i przed powinieneś rzeczywiście użyć enabledRemoteNotificationTypes i sprawdzić, czy jest równe (lub nie jest równe w zależności od tego, co chcesz) do UIRemoteNotificationTypeNone.

Jednak dla iOS8 jest to nie zawsze wystarczy sprawdzić tylko isRegisteredForRemoteNotifications Jak wiele stanów powyżej. Należy również sprawdzić, czy application.currentUserNotificationSettings.types jest równe (lub nie jest równe w zależności od tego, co chcesz) UIUserNotificationTypeNone!

isRegisteredForRemoteNotifications może zwrócić true, nawet jeśli currentUserNotificationSettings.types zwraca UIUserNotificationTypeNone.

 5
Author: Peter Verhage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-04 14:23:27
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types & UIRemoteNotificationTypeAlert)
    // blah blah blah
{
    NSLog(@"Notification Enabled");
}
else
{
    NSLog(@"Notification not enabled");
}

Tutaj otrzymujemy Typ UIRemoteNotificationType z UIApplication. Reprezentuje stan powiadomienia push tej aplikacji w ustawieniu, niż można łatwo sprawdzić jej typ

 4
Author: Hossam Ghareeb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 13:59:57

Staram się wspierać iOS 10 i nowsze za pomocą rozwiązania dostarczonego przez @ Shaheen Ghiassy, ale znaleźć problem deprywacji enabledRemoteNotificationTypes. Tak więc rozwiązanie znajduję za pomocą isRegisteredForRemoteNotifications zamiast enabledRemoteNotificationTypes, który jest przestarzały w iOS 8. Poniżej znajduje się moje zaktualizowane rozwiązanie, które działało idealnie dla mnie:

- (BOOL)notificationServicesEnabled {
    BOOL isEnabled = NO;
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){
        UIUserNotificationSettings *notificationSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];

        if (!notificationSettings || (notificationSettings.types == UIUserNotificationTypeNone)) {
            isEnabled = NO;
        } else {
            isEnabled = YES;
        }
    } else {

        if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) {
            isEnabled = YES;
        } else{
            isEnabled = NO;
        }
    }
    return isEnabled;
}

I możemy łatwo wywołać tę funkcję i uzyskać dostęp do jej wartości Bool i możemy przekonwertować ją na wartość ciągu znaków następująco:

NSString *str = [self notificationServicesEnabled] ? @"YES" : @"NO";

Mam nadzieję, że pomoże to również innym :) Szczęśliwego kodowania.

 4
Author: Irfan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-10 11:30:03

IOS8+ (OBJECTIVE C)

#import <UserNotifications/UserNotifications.h>


[[UNUserNotificationCenter currentNotificationCenter]getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

    switch (settings.authorizationStatus) {
          case UNAuthorizationStatusNotDetermined:{

            break;
        }
        case UNAuthorizationStatusDenied:{

            break;
        }
        case UNAuthorizationStatusAuthorized:{

            break;
        }
        default:
            break;
    }
}];
 4
Author: Ofir Malachi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-06 10:54:36

Chociaż odpowiedź Zaca była idealnie poprawna do iOS 7, zmieniła się od czasu przybycia iOS 8. Ponieważ enabledRemoteNotificationTypes jest przestarzały od iOS 8. W przypadku iOS 8 i nowszych, musisz użyć isregistered forremotenotifications.

  • dla iOS 7 i wcześniej -- > użyj enabledRemoteNotificationTypes
  • dla iOS 8 i nowszych -- > Use isregistered forremotenotifications.
 3
Author: Rashmi Ranjan mallick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-15 15:01:26

To Swiftyrozwiązanie działało dobrze dla mnie ( iOS8+),

Metoda :

func isNotificationEnabled(completion:@escaping (_ enabled:Bool)->()){
    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { (settings: UNNotificationSettings) in
            let status =  (settings.authorizationStatus == .authorized)
            completion(status)
        })
    } else {
        if let status = UIApplication.shared.currentUserNotificationSettings?.types{
            let status = status.rawValue != UIUserNotificationType(rawValue: 0).rawValue
            completion(status)
        }else{
            completion(false)
        }
    }
}

Użycie :

isNotificationEnabled { (isEnabled) in
            if isEnabled{
                print("Push notification enabled")
            }else{
                print("Push notification not enabled")
            }
        }

Ref

 1
Author: Zaid Pathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 10:00:16

Re:

To jest poprawne

if (types & UIRemoteNotificationTypeAlert)

Ale podążanie też jest poprawne ! (jak UIRemoteNotificationTypeNone jest 0)

if (types == UIRemoteNotificationTypeNone) 

Zobacz następujące

NSLog(@"log:%d",0 & 0); ///false
NSLog(@"log:%d",1 & 1); ///true
NSLog(@"log:%d",1<<1 & 1<<1); ///true
NSLog(@"log:%d",1<<2 & 1<<2); ///true
NSLog(@"log:%d",(0 & 0) && YES); ///false
NSLog(@"log:%d",(1 & 1) && YES); ///true
NSLog(@"log:%d",(1<<1 & 1<<1) && YES); ///true
NSLog(@"log:%d",(1<<2 & 1<<2) && YES); ///true
 0
Author: wavespread,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-16 02:48:57

Oto Jak to zrobić w Xamarin.ios.

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

Jeśli obsługujesz iOS 10+, skorzystaj tylko z metody UNUserNotificationCenter.

 0
Author: Sune Kjærgård,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 11:18:26

W Xamarin wszystkie powyższe rozwiązania nie działają dla mnie. To jest to, czego używam zamiast:

public static bool IsRemoteNotificationsEnabled() {
    return UIApplication.SharedApplication.CurrentUserNotificationSettings.Types != UIUserNotificationType.None;
}

To dostaje aktualizację na żywo również po zmianie statusu powiadomienia w Ustawieniach.

 0
Author: mr5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-21 03:58:44

Pełny, łatwy do kopiowania i wklejania kod zbudowany z rozwiązania @ ZacBowling ( https://stackoverflow.com/a/1535427/2298002 )

Spowoduje to również przeniesienie użytkownika do ustawień aplikacji i umożliwienie mu natychmiastowego włączenia

Dodałem również rozwiązanie do sprawdzania, czy usługi lokalizacji są włączone (i przynosi do ustawień, jak również)

// check if notification service is enabled
+ (void)checkNotificationServicesEnabled
{
    if (![[UIApplication sharedApplication] isRegisteredForRemoteNotifications])
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Notification Services Disabled!"
                                                            message:@"Yo don't mess around bro! Enabling your Notifications allows you to receive important updates"
                                                           delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Settings", nil];

        alertView.tag = 300;

        [alertView show];

        return;
    }
}

// check if location service is enabled (ref: https://stackoverflow.com/a/35982887/2298002)
+ (void)checkLocationServicesEnabled
{
    //Checking authorization status
    if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)
    {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled!"
                                                            message:@"You need to enable your GPS location right now!!"
                                                           delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Settings", nil];

        //TODO if user has not given permission to device
        if (![CLLocationManager locationServicesEnabled])
        {
            alertView.tag = 100;
        }
        //TODO if user has not given permission to particular app
        else
        {
            alertView.tag = 200;
        }

        [alertView show];

        return;
    }
}

// handle bringing user to settings for each
+ (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if(buttonIndex == 0)// Cancel button pressed
    {
        //TODO for cancel
    }
    else if(buttonIndex == 1)// Settings button pressed.
    {
        if (alertView.tag == 100)
        {
            //This will open ios devices location settings
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];
        }
        else if (alertView.tag == 200)
        {
            //This will open particular app location settings
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        }
        else if (alertView.tag == 300)
        {
            //This will open particular app location settings
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        }
    }
}

GLHF!

 -1
Author: greenhouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:24