2015-06-12 20 views
6

Tôi cần một cái gì đó tương tự như khả năng đăng bài ngoại tuyến của Facebook. Về cơ bản, tôi muốn người dùng tạo nội dung cục bộ trên thiết bị bất kể trạng thái kết nối và bất cứ khi nào internet có sẵn, nó sẽ POST/PUT tới máy chủ.Tôi có thể sử dụng NSURLSessionUploadTask cho các tác vụ đồng bộ hóa ngoại tuyến không?

Tôi đã tìm kiếm trên Internet giải pháp và tôi thấy rằng NSURLSessionUploadTask có thể được sử dụng để BẬT trong nền. Nhưng tôi không thể tìm hiểu xem các tình huống sau có được hỗ trợ hay không:

  • Nhiệm vụ của tôi vẫn ở hàng đợi nền khi người dùng ngoại tuyến và hệ điều hành sẽ cố gắng thực hiện các mục trong hàng đợi khi kết nối lại với mạng ?
  • Điều gì sẽ xảy ra nếu ứng dụng bị đóng bởi người dùng hoặc bị treo?
  • Điều gì sẽ xảy ra nếu hoạt động không thành công?

Trả lời

1

Trước hết, nền NSURLSession chỉ cho phép tải tệp lên. Nếu điều đó phù hợp với bạn:

  • Nhiệm vụ sẽ nằm trong hàng đợi cho đến khi nhận được câu trả lời của máy chủ.
  • Nếu ứng dụng của bạn bị đóng, nhiệm vụ vẫn sẽ được thực hiện. Khi yêu cầu được thực hiện, ứng dụng của bạn sẽ được khởi chạy ở trạng thái nền không tương tác và nhận được application:handleEventsForBackgroundURLSession:completionHandler:. Sau khi bạn xử lý tín hiệu và gọi trình xử lý hoàn thành hoặc hết 30 giây, ứng dụng sẽ bị đóng.
  • tôi hoạt động thất bại, bạn sẽ nhận được URLSession:task:didCompleteWithError:

Có một tốt tutorial trên nền NSURLSessions. Tôi đề nghị bạn đọc tất cả 4 phần của bài viết tuyệt vời này.
Nếu tệp tải lên không phải là tùy chọn cho bạn, tôi khuyên bạn nên lưu thông tin vào cơ sở dữ liệu cục bộ và sau đó đợi internet có thể truy cập được. (một cách tiếp cận tốt ở đây là sử dụng thư viện Reachability, Alamofire cũng cho phép thực hiện điều đó). Khi internet khả dụng, chỉ cần gọi các yêu cầu http của bạn bằng dữ liệu đã lưu.

+0

Điều này trả lời câu hỏi. Đã hy vọng có một cách để sử dụng các phiên nền như hàng đợi HTTP riêng của tôi: D. Tôi đang đi một con đường khác nhau mặc dù và có một shot lúc cố gắng để thực hiện điều này với nền 'lấy' chế độ. – Hless

+0

Tìm nạp nền không phải là một viên đạn bạc mà tôi sợ. Đây là một tính năng tuyệt vời, nhưng iOS quyết định khi nào ứng dụng có thể nhận tín hiệu tìm nạp, tùy thuộc vào hoạt động của người dùng, vì vậy bạn có thể không bao giờ nhận được nó. Một cách tiếp cận khác là định kỳ gửi thông báo đẩy im lặng từ máy chủ, vì vậy ứng dụng có thể được đánh thức và thực hiện một số thao tác trong nền. Xem [câu trả lời khác của tôi] (http://stackoverflow.com/a/30834566/1254172) về cách bạn có thể nhận được lợi ích của chế độ này và một nền tảng của nó. –

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