alicanbatur
5/24/2016 - 1:22 PM

Swift Background Fetch

Swift Background Fetch

Step 1: Enable capabilities "background fetch"

Step2 : Setup AppDelegate.swift 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        let settings = UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert, categories: nil)
        UIApplication.sharedApplication().registerUserNotificationSettings(settings)
        UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
        return true;
     

    }

Step 3: Register application event in AppDelegate.swift, to register completion handler


 
    func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
        println("Complete");
        completionHandler(UIBackgroundFetchResult.NewData)
        
        getData();
        
    }
    
    func getData() -> Void{
        var url = "http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?apikey=xxxxxx&limit=20";
        var request = NSURLRequest(URL: NSURL(string: url));
        
        NSURLConnection.sendAsynchronousRequest(request,queue: NSOperationQueue.mainQueue()) {
            (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            var moviesResult = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as NSDictionary;
            var movies: [NSDictionary]=[];
            movies = moviesResult["movies"] as [NSDictionary];
            var localNotification:UILocalNotification = UILocalNotification()
            localNotification.alertAction = "Testing notifications on iOS8"
            localNotification.alertBody = "Movie Count : \(movies.count)"
            localNotification.fireDate = NSDate(timeIntervalSinceNow: 1)
            UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
        }
        
        
    }