7

Tôi đang cố thực hiện cuộc gọi ở chế độ nền như POST, GET chính xác hơn trong phương thức didReceiveRemoteNotification, vì chúng bắt đầu hoạt động như một thông báo đẩy đến. Vấn đề của tôi là tất cả các Alamofire.request không bao giờ gọi trong chế độ Background cho đến khi tôi mở ứng dụng. Tôi có bây giờYêu cầu nền không thực thi Alamofire Swift

Tôi đang cố gắng mở phiên nhưng nó sẽ không làm cho yêu cầu hoạt động.

Những là những gì tôi muốn thực hiện ở chế độ nền (điện thoại di động ở chế độ nền)

Alamofire.Manager(configuration: configuration).request(.GET, url, parameters: nil) 
         .responseJSON { (_, _, JSON, _) in 
          //println(JSON) 
           println(JSON) 
       REST OF THE CODE 

Nhưng nó sẽ không làm việc, thậm chí nếu tôi thêm mã bên dưới những yêu cầu nó hoạt động nhưng sự trở lại của các yêu cầu hoặc thậm chí yêu cầu không được thực hiện.

Trả lời

14

Trong khi phương pháp cho biết "cấu hình nền", ý nghĩa của nó là phiên mạng được cấu hình to allow for interruptions and continuation của tải lên/tải xuống. Thay vào đó, những gì bạn cần làm là kéo dài thời gian thực thi của ứng dụng để nó hoạt động trong một khoảng thời gian ngay cả trong nền

Có thiết kế đặc biệt để thực hiện điều đó. Khi bạn sử dụng nó, bạn sẽ nhận được thêm vài phút để thực hiện bất cứ điều gì bạn cần (sau giới hạn đó, đơn của bạn sẽ bị chấm dứt bất kể điều gì, bây giờ đơn của bạn bị chấm dứt ngay lập tức).

Bạn có thể viết phương pháp sau đây:

func beginBackgroundTask() -> UIBackgroundTaskIdentifier { 
    return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({}) 
} 

func endBackgroundTask(taskID: UIBackgroundTaskIdentifier) { 
    UIApplication.sharedApplication().endBackgroundTask(taskID) 
} 

Khi bạn muốn sử dụng nó, bạn chỉ đơn giản bắt đầu/kết thúc nhiệm vụ khi bắt đầu/kết thúc cuộc gọi download:

// Start task 
let task = self.beginBackgroundTask() 

// Do whatever you need, like download of the images 
self.someBackgroundTask() 

... 

// End task once everything you need to do is done 
self.endBackgroundTask(task) 

Hy vọng nó giúp !

Sửa 1:

Nếu vấn đề được rằng phương pháp tải về của bạn không bao giờ được gọi, sau đó nó có nghĩa là bạn không gửi dữ liệu thích hợp trong thông báo tải trọng:

Đối với một thông báo đẩy để kích hoạt tải xuống hoạt động, trọng tải của thông báo phải bao gồm khóa có sẵn nội dung với giá trị được đặt thành 1. Khi khóa đó xuất hiện, hệ thống sẽ bật ứng dụng ở nền (hoặc khởi chạy nền) và gọi ứng dụng của đại biểu ứng dụng: didReceiveRemoteNotification: fetchCompletionHandler: phương pháp. Việc triển khai phương thức đó của bạn nên tải xuống nội dung có liên quan và tích hợp nó vào ứng dụng của bạn. https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

Hi, cảm ơn cho câu trả lời, nhưng vấn đề của tôi là kết hợp một phiên Alamofire hoặc những gì tôi cần phải chạy theo yêu cầu gây ra những chức năng mà bạn viết chạy mã nhưng là whos yêu cầu không bao giờ quay trở lại hoặc thậm chí có thể gọi cho đến khi tôi mở ứng dụng. Cảm ơn bạn lần nữa. –

+0

Xem câu trả lời cập nhật của tôi - nếu vấn đề là bạn không nhận được phương thức của mình, hãy giúp :) –

+0

Tôi biết về nội dung có sẵn mà tôi đã gây ra là thông báo im lặng, ví dụ: nếu tôi nhận được thông báo đẩy, kích hoạt didReceiveRemoteNotification và sau đó tôi muốn thực hiện yêu cầu với alamofire, vấn đề chính của tôi là mã trong didReceiveRemoteNotification hoạt động nhưng cuộc gọi hoặc yêu cầu không làm bất cứ điều gì khi iphone không hoạt động/nền (không mở) khi đó Tôi mở ứng dụng nó chạy như thế. –

Các vấn đề liên quan