2015-02-21 5 views
0

Я пытаюсь отправить локальное уведомление с быстрым, немедленным (чтение: не запланировано на будущее).Отправить local Push Notification

Я пытаюсь

  var localNotification:UILocalNotification = UILocalNotification() 
     localNotification.alertAction = "Testing notifications on iOS8" 
     localNotification.alertBody = "Some text here" 
     localNotification.fireDate = NSDate(timeIntervalSinceNow: 1) 
     UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

с разрешения для отправки уведомления толчка будучи уже само собой разумеющееся.

Хотя код вызывается, никакое push-уведомление не отправляется. Что я делаю не так?

Спасибо!

+0

Я думаю, ваша проблема в том, что вы просто не видите ответ. (Проверьте мой ответ на более) – Christian

ответ

2

вы просто должны установить timeZone в localTimeZone

Дата, указанная в fireDate интерпретируется в соответствии со значением этого свойства. Если вы укажете nil (по умолчанию), дата пожара будет интерпретирована как абсолютное время по Гринвичу, что подходит для таких случаев, как в качестве таймеров обратного отсчета. Если вы назначаете действительный объект NSTimeZone этому свойству , дата огня интерпретируется как время настенных часов, которое автоматически корректируется при изменении часовых поясов; пример , подходящий для этого случая, является будильником.

// App делегат

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 

     application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert], categories: nil)) 
     return true 
    } 

/// View Controller

import UIKit 

class ViewController: UIViewController { 
    var localNotification = UILocalNotification() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     localNotification.alertAction = "Testing notifications on iOS8" 
     localNotification.alertBody = "Some text here" 
     localNotification.timeZone = NSTimeZone.localTimeZone() 

     localNotification.fireDate = NSDate(timeIntervalSinceNow: 1) 
     UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 
1

У вас есть регистрационные уведомления для вашего приложения (например, в AppDelegate).
В Objective-C, мне удалось это сделать с помощью:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 


    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; 
    [[UIApplication sharedApplication] registerForRemoteNotifications]; 

#else 

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
    (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

#endif 

Тогда ваш код будет выполнен.

Другое дело, что вы можете просто не видеть их, если используете приложение на переднем плане - попробуйте открыть Notification Center, прокрутив вниз.

+0

Уже сделано, и все же оно все еще не выполняется. – rocket101

1

Возможно, проблема заключается в том, что вы не видите уведомление, но оно на самом деле там. Просто откройте уведомление-центр и он должен быть там:

enter image description here

Чтобы проверить, что реализовать метод didReceiveLocalNotification в ваш AppDelegate:

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) { 
     println("Notification done") 
    } 

После этого вы можете обработать ваши уведомления и показать PopUp или что вы хотите.