Kullanıcının anında bildirimleri etkinleştirip etkinleştirmediğini iPhone'da belirleme


Yanıtlar:


300

enabledRemoteNotificationsTypesMaskeyi arayın ve kontrol edin.

Örneğin:

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

iOS8 ve üstü:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]

19
iOS 5: Bu, uygulamanın telefonunuzun bildirim merkezindeki hava durumuna bakılmaksızın uygulamanın ne tür push bildirimlerini kullandığını kontrol eder. Uygulamam için push bildirimlerini devre dışı bıraktım ve hala türleri == 6 aldım. Ses ve uyarı stilini devre dışı bıraktıktan sonra, == UIRemoteNotificationTypeNone türleri aldım.
Quantumpotato

4
Quantumpotato'nun işaret ettiği gibi, bu cevap artık tüm vakaları ele almıyor ve tam bir çözüm değil.
DBD

5
Apple'da neler oluyor? Keşke bu konudaki yanıtlarını duyabilseydim. Böyle temel bilgileri bilmeden nasıl harika uygulamalar geliştirebiliriz?
Oded Regev

15
@ZacBowling - çözümü iOS 8ve üstü için yanlış çünkü yalnızca kullanıcının uzaktan bildirim için kayıtlı olup olmadığını kontrol eder. Belgelere göre:This method reflects only the successful completion of the remote registration process that begins when you call the registerForRemoteNotifications method. This method does not reflect whether remote notifications are actually available due to connectivity issues. The value returned by this method takes into account the user’s preferences for receiving remote notifications.
Apan

5
Bu yüzden bence de kontrol etmelisin[[UIApplication sharedApplication] currentUserNotificationSettings];
Apan

99

kuantumpotato sorunu:

Nerede typesverilir?

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

biri kullanabilir

if (types & UIRemoteNotificationTypeAlert)

onun yerine

if (types == UIRemoteNotificationTypeNone) 

yalnızca bildirimlerin etkin olup olmadığını kontrol etmenizi sağlar (ve sesler, rozetler, bildirim merkezi vb. hakkında endişelenmeyin). "Uyarı Stili", "Afişler" veya "Uyarılar " olarak ayarlanırsa ve "Uyarı Stili", diğer ayarlardan bağımsız olarak "Yok" olarak ayarlanırsa, ilk kod satırı ( types & UIRemoteNotificationTypeAlert) döndürülür .YESNO


bu kuantumpotato konusunu ele almaz. Yalnızca uyarılarla ilgilenmiyor, ancak kullanıcının Bildirim Merkezi ayarını açık veya kapalı olarak değiştirip değiştirmediğini etkinRemoteNotifications üzerinden ayırt edemeyeceğinizi gösteriyor.
Joey

8
Cevabım doğrudan "uygulamanın Bildirim Merkezi'nde olup olmadığını belirleme" şeklinde yanıt vermeyebilir, ancak kullanıcının uygulamanız için bildirim alıp almayacağını kontrol etmenin bir yolunu sunar , ki bu da sorunun ruhunda bir cevap olduğunu düşünüyorum . İlkini kontrol etmenin mümkün olduğunu sanmıyorum.
Tim Camber

2
"İf (types & UIRemoteNotificationTypeAlert)" ifadesi çok iyi.
nembleton

Hilenin neden işe yaradığını anladığınızdan emin olun! Bitsel operatörler çok faydalıdır ve Kakao'da bit maskeleri yaygındır. Check out stackoverflow.com/a/3427633/1148702
Tim Kamber

2
Swift2 / XCode7'de, ikili operatör '&' hatasıyla iki yönlü işlem başarısız oluyor, iki 'UIUserNotificationType' işlenenine uygulanamaz . Bunun yerine grantedSettings.types.contains(notificationType)
Philipp Otto

54

İOS'un en son sürümünde bu yöntem artık kullanımdan kaldırıldı. Hem iOS 7 hem de iOS 8'i desteklemek için şunu kullanın:

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

2
Yerel bildirimler ne olacak? iOS 8 artık kullanıcının izin vermesini gerektiriyor. Ama sonra bunlara izin verilip verilmediğini nasıl kontrol edebilirim?
Frédéric Adda

@FredA. Kontrol edin UserNotifications. Maalesef şimdi tam bir cevabım yok.
Mazyod


3
Swift'te etkin = type & UIRemoteNotificationTypeAlert yapamam. Hata:
Türler

53

Swift4.0, iOS11 için güncellenmiş kod

import UserNotifications

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

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

Swift3.0, iOS10 için kod

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

İOS9'dan, swift 2.0 UIRemoteNotificationType kullanımdan kaldırıldı, aşağıdaki kodu kullanın

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.

}

Push bildirimlerinin etkin olup olmadığını kontrol edin

    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
    }

33

Aşağıda hem iOS8 hem de iOS7'yi (ve daha düşük sürümleri) kapsayan eksiksiz bir örnek bulacaksınız. İOS8'den önce "uzaktan bildirimler devre dışı" ile "yalnızca kilit ekranında görüntüle etkin" arasında ayrım yapamayacağınızı lütfen unutmayın .

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");

6
userNotificationSettings.types & UIUserNotificationTypeNone her zaman yanlış olacaktır, çünkü UIUserNotificationTypeNone boş bir bit maskesi olduğundan, diğer bitlerin olmamasıdır. Hiçbiri için sadece eşitliği kontrol etmek istiyorsunuz.
dberwick

25

Hızlı 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
    }

İOS10 + için RxSwift Gözlenebilir Sürüm:

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

1
günümü kurtarıyorsun. :)
Chetan Dobariya

1
Teşekkürler ben bir saat boyunca bu arıyordum.
Chanchal Warde

4
getNotificationSettings(...)eşzamansızdır, bu nedenle içerideki geri dönüş yok
sayılır

17

Hem iOS8 hem de daha düşük sürümlerini desteklemeye çalışırken isRegisteredForRemoteNotifications, Kevin'in önerdiği gibi kullanmakta şansım yoktu . Bunun yerine currentUserNotificationSettingstestlerimde harika sonuç verdi.

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

Uygulama yeni yüklendiğinde bu geçerli değildir. Yöntem her zaman HAYIR döndürür ve push bildirimleri için açılır izin hiçbir zaman görünmez. Böylece, cihazın ayarlarında, söz konusu uygulamanın bildirim ayarlarını değiştirmek istiyorsanız (izin ver / reddet) uygulama görünmez. Herkes bu soruna geçici bir çözüm bulmak için herhangi bir fikri var mı?
tyegah123

Bir uygulama silinse bile bildirim ayarları kalıcı olur. Uygulamanız tamamen yepyeni ise, bu yöntem işe yarayacaktır. Uygulamanız silinmiş ancak daha sonra yeniden yüklenmişse, izinler hala sistemdedir ve Apple size izinleri yeniden isteme fırsatı sunmaz.
Shaheen Ghiassy

Bazı gereksiz kod bakın: isEnabled = NO;sizin de ifo kadar başlatıldı edildiği gibi durumlarda gerekli değildirNO
Jasper

15

Ne yazık ki bu çözümlerin hiçbiri sorunu gerçekten çözmemektedir, çünkü günün sonunda API'ler ilgili bilgileri sağlama konusunda ciddi şekilde eksiktir. Birkaç tahmin yapabilirsiniz, ancak currentUserNotificationSettings(iOS8 +) kullanmak mevcut formda soruyu gerçekten cevaplamak için yeterli değildir. Her ne kadar burada birçok çözüm ya bu ya isRegisteredForRemoteNotificationsda daha kesin bir cevap olduğunu düşündürüyor olsa da , gerçekten değil.

Bunu düşün:

ile isRegisteredForRemoteNotificationsdokümantasyon devletler:

Uygulama şu anda sistem çapındaki ayarları dikkate alarak uzaktan bildirimler için kayıtlıysa EVET döndürür ...

Ancak NSLog, davranışı gözlemlemek için uygulama temsilcinize basitçe atarsanız , bunun çalışacağını tahmin ettiğimiz şekilde davranmadığı açıktır. Aslında bu uygulama / cihaz için etkinleştirilen uzaktan bildirimlerle doğrudan ilgilidir. İlk kez etkinleştirildiğinde bu her zaman geri dönecektir YES. Bunları ayarlarda (bildirimlerde) kapatmak bile, bunun geri dönmesine neden olacaktır YES, çünkü iOS8'den itibaren, bir uygulama uzaktan bildirimler için kaydolabilir ve hatta kullanıcı bildirimleri etkinleştirilmeden bir cihaza gönderebilir, Uyarı yapamayabilir, Kullanıcı açmadan Rozetler ve Ses. Sessiz bildirimler, bildirimler kapalı olsa bile yapmaya devam edebileceğiniz şeylere iyi bir örnektir.

Bildiğim kadarıyla currentUserNotificationSettingsbu dört şeyden birini gösterir:

Uyarılar açık Rozetler açık Ses açık Hiçbiri açık.

Bu, diğer faktörler veya Bildirim anahtarının kendisi hakkında kesinlikle hiçbir belirti vermez.

Bir kullanıcı aslında rozetleri, sesleri ve uyarıları kapatabilir, ancak yine de kilit ekranında veya bildirim merkezinde gösterebilir. Bu kullanıcı yine de push bildirimleri almalı ve bunları hem kilit ekranında hem de bildirim merkezinde görebilmelidir. Bildirim düğmesi açıktır. AMA currentUserNotificationSettingsdönecektir: UIUserNotificationTypeNonebu durumda. Bu, kullanıcıların gerçek ayarlarının gerçek bir göstergesi değildir.

Kişinin yapabileceği birkaç tahmin:

  • öyleyse isRegisteredForRemoteNotifications, NObu cihazın uzaktan bildirimler için asla başarıyla kaydedilmediğini varsayabilirsiniz.
  • Uzaktan bildirimleri için bir geri arama kaydetme ilk kez için sonra application:didRegisterUserNotificationSettings:bu kullanıcı ayarlarını tescil edilmiştir ilk kez bu yana şu anda kullanıcı bildirim ayarlarını içeren yapılır gerektiğini kullanıcı izni talebi açısından seçilmiş neyi işaret eder. Ayarlar aşağıdakilerden başka bir şeye eşitse: UIUserNotificationTypeNoneitme izni verildi, aksi takdirde reddedildi. Bunun nedeni, uzaktan kayıt işlemine başladığınız andan itibaren kullanıcının yalnızca kabul etme veya reddetme yeteneğine sahip olmasıdır; kabul işleminin başlangıç ​​ayarları kayıt işlemi sırasında ayarladığınız ayarlardır.

8

Cevabı tamamlamak için böyle bir şey işe yarayabilir ...

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: Bu doğru değil. Bunlar biraz bilge şeyler olduğundan, bir anahtarla çalışmaz, bu yüzden bunu kullanarak sona erdi:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
UIRemoteNotificationType typesset = (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge);
if((types & typesset) == typesset)
{
    CeldaSwitch.chkSwitch.on = true;
}
else
{
    CeldaSwitch.chkSwitch.on = false;
}

(
Durumum

5

İOS7 ve öncesi için gerçekten kullanmanızın enabledRemoteNotificationTypeseşit olup olmadığını (veya istediğiniz şeye bağlı olarak eşit olup olmadığını) kullanmanız ve kontrol etmeniz gerekir UIRemoteNotificationTypeNone.

Bununla birlikte, iOS8 için sadece yukarıda belirtilen durumlarla kontrol etmek her zaman yeterli değildirisRegisteredForRemoteNotifications . Ayrıca application.currentUserNotificationSettings.typeseşit olup olmadığını kontrol etmelisiniz (veya istediğiniz şeye bağlı olarak eşit değil) UIUserNotificationTypeNone!

isRegisteredForRemoteNotificationsgerçi gerçek bile döndürebilir currentUserNotificationSettings.typesgetiriler UIUserNotificationTypeNone.


5

iOS8 + (AMAÇ 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
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types & UIRemoteNotificationTypeAlert)
    // blah blah blah
{
    NSLog(@"Notification Enabled");
}
else
{
    NSLog(@"Notification not enabled");
}

Burada UIApplication'dan UIRemoteNotificationType'ı alıyoruz. Kolayca türünü kontrol edebilirsiniz daha, ayarda bu uygulamanın push bildirim durumunu temsil eder


3
Lütfen bu kodun ne yaptığını açıklayın, kod yazmak sadece soruya cevap vermez.
Batty

4

@Shaheen Ghiassy tarafından sağlanan çözümü kullanarak iOS 10 ve üstünü desteklemeye çalışıyorum, ancak yoksunluk sorunu buluyorum enabledRemoteNotificationTypes. Yani, isRegisteredForRemoteNotificationsbunun yerine kullanarak bulduğum çözüm enabledRemoteNotificationTypesiOS 8'de kullanımdan kaldırıldı. Aşağıda benim için mükemmel çalışan güncellenmiş çözümüm var:

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

Ve bu işlevi kolayca çağırabilir ve Booldeğerine erişebilir ve bunu dize değerine dönüştürebiliriz:

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

Umarım başkalarına da yardımcı olur :) Mutlu kodlama.


3

Zac'in cevabı iOS 7'ye kadar mükemmel olsa da, iOS 8'in gelmesinden bu yana değişti. Çünkü enabledRemoteNotificationTypes itibaren iOS 8'den kaldırılmıştır. İOS 8 ve sonraki sürümler için isRegisteredForRemoteNotifications kullanmanız gerekir .

  • iOS 7 ve öncesi için -> enableRemoteNotificationTypes kullanın
  • iOS 8 ve sonraki sürümler için -> Use isRegisteredForRemoteNotifications.

2

Bu Swifty çözümü benim için iyi çalıştı ( iOS8 + ),

Yöntem :

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)
        }
    }
}

Kullanımı :

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

Ref


0

yeniden:

doğru

if (types & UIRemoteNotificationTypeAlert)

ama takip etmek de doğru! (UIRemoteNotificationTypeNone 0 olduğu için)

if (types == UIRemoteNotificationTypeNone) 

aşağıdakilere bakın

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

Bunu Xamarin.ios'da nasıl yapacağınız aşağıda açıklanmıştır.

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

İOS 10+ sürümünü destekliyorsanız yalnızca UNUserNotificationCenter yöntemiyle devam edin.


0

Xamarin'de, yukarıdaki çözümlerin hepsi benim için çalışmıyor. Bunun yerine kullandığım şey:

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

Ayarlar'daki bildirim durumunu değiştirdikten sonra da canlı bir güncelleme oluyor.


-1

@ ZacBowling'in çözümünden oluşturulan tam kolay kopyalama ve yapıştırma kodu ( https://stackoverflow.com/a/1535427/2298002 )

bu ayrıca kullanıcıyı uygulama ayarlarınıza getirecek ve hemen etkinleştirmelerine izin verecektir

Ayrıca konum hizmetlerinin etkin olup olmadığını kontrol etmek için bir çözüm ekledim (ve ayarları da getiriyor)

// 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!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.