2015-04-12 13 views
6

Kullanıcı yerel bildirimlere izin verdiyse, test etmenin kolay bir yolu yok mu? Yerel bildirimlerin gönderilmesini reddettikten sonra konsolumda bir uyarı fark ettim. İlgili olay gerçekleştiğinde, kullanıcının izin vermediği halde uygulamanın bir bildirim göndermeye çalıştığı belirtildi. Bir bildirim görüntülemeye çalışmadan önce izin verilip verilmediğini kontrol etmek istiyorum. Benim durumumdaki yorumu görün, bunu nasıl yaparım?Kullanıcının yerel bildirimlere izin verip vermediğini kontrol edin. iOS 8. Obj-C

Benim kodudur:

app = [UIApplication sharedApplication]; 
-(void)showBackgroundNotification:(NSString *) message { 
//check if app is in background and check if local notifications are allowed. 
    if (app.applicationState == UIApplicationStateBackground /*&& LocalNotificationsAreAllowed*/){ 
     UILocalNotification *note = [[UILocalNotification alloc]init]; 
     note.alertBody = message; 
     note.fireDate = [NSDate dateWithTimeIntervalSinceNow:0.0]; 
     [app scheduleLocalNotification :note]; 
    } 
} 

ben şöyle kullanıcıdan izin istemi olsun:

UIUserNotificationSettings *settings; 
if ([app  respondsToSelector:@selector(registerUserNotificationSettings:)]) 
{ 
    settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotification TypeSound) categories:nil]; 
    [app registerUserNotificationSettings:settings]; 
} 

Ben ayarları nesne kullanamadı?

DÜZENLEME: Sanırım çözdüm. Bu işe yarıyor.

-(void)showBackgroundNotification:(NSString *) message { 
    if (app.applicationState == UIApplicationStateBackground && [app currentUserNotificationSettings].types != UIUserNotificationTypeNone){ 
     UILocalNotification *note = [[UILocalNotification alloc]init]; 
     note.alertBody = message; 
     note.fireDate = [NSDate dateWithTimeIntervalSinceNow:0.0]; 
     [app scheduleLocalNotification :note]; 
    } 
} 
+0

Cevabımı buradan kontrol edin: http://stackoverflow.com/a/33779144/1463604 – Nishant

cevap

9

Burada daha az spesifik durumlar için kullanmak budur:

+ (BOOL)notificationsEnabled { 
    UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings]; 
    return settings.types != UIUserNotificationTypeNone; 
} 

Genellikle bir bildirim yöneticisi yöntemlerin bu tür bir dizi tutun.

+0

/* */- yorumunu ** settings.types! = UIUserNotificationTypeNone ** ile değiştirmeyi denedim. Ne yazık ki işe yaramadı. Hala bildirimi göndermeye çalışır. Ayrıca _types_ adında bir şeyin bir sayı değeri içerdiğini (evet ama yine de enumlar) karıştırdığını düşünüyorum. Daha çok bir koleksiyona benziyor. – VeryPoliteNerd

+0

Bu kodu bir süredir üretimde kullanıyorum ve her zaman güvenilir bir şekilde test ediliyor. Başka bir şey olmadığından emin misin? – Logan

+0

Sadece bir işlev bildirimleri göndermek için kullanıyorum. Ama bir şeyi yanlış yazmış olabilirim. Şimdi çalışıyor. En azından simülatörde. – VeryPoliteNerd