2010-10-27 38 views
17

Giả sử điều này là có thể, tôi muốn ứng dụng iOS của tôi, khi được chạy, để thăm dò ý kiến ​​máy chủ (tức là, lấy nội dung của URL sau mỗi 30 phút và thông báo cho người dùng biết "thú vị"), về cơ bản theo cách tương tự như cách trình khách thư tích hợp sẵn được giả định nếu bạn không sử dụng thông báo đẩy.Cách chính xác cho máy chủ thăm dò ý kiến ​​ở chế độ nền

Bây giờ, từ đọc sách của tôi cho đến nay (Tôi là một lập trình viên có kinh nghiệm, nhưng mới cho iOS), tôi nghĩ rằng có thể có hai cách tiềm năng để làm điều này:

  • Phương pháp 1: Trong applicationDidEnterBackground :, bắt đầu một nhiệm vụ nền mà thực hiện cuộc thăm dò định kỳ;
  • Cách 2: Gửi ứng dụng của riêng bạn một UILocalNotification mà không có văn bản hiển thị cho người dùng, mà chỉ đơn giản là phục vụ ứng dụng của bạn trong thời gian X phút để thực hiện bỏ phiếu (và sau đó gửi thông báo khác cho lần tiếp theo vv).

Tôi thấy trong tài liệu của Apple là Scheduling, Registering, and Handling Notifications, chúng dường như có ví dụ về phương pháp usign Phương pháp 1 (ví dụ "trò chuyện" của họ, Liệt kê 2-2). Nhưng điều đáng ngạc nhiên về phương pháp này là dường như chỉ ngồi trong một vòng lặp liên tục làm việc bỏ phiếu, không có giấc ngủ can thiệp; trên các nền tảng tôi quen thuộc hơn, điều này sẽ không thể thực hiện được và sẽ đốt cháy CPU.

Vì vậy subparts của câu hỏi của tôi về cơ bản là: - Là Phương pháp 2 có thể (hoặc phải một UILocalNotification luôn gây ra một cảnh báo rõ ràng cho người sử dụng, mà không phải là những gì tôi muốn) và nếu như vậy nó là cách khuyến khích để làm cái này? - Nếu cách để thực hiện nó là Phương pháp 1, ví dụ "chat" của Apple ngồi trong một vòng lặp liên tục thực sự OK (ví dụ như iOS phân bổ CPU sao cho đây không phải là vấn đề), và nếu không phải là cách trong iOS để cho quá trình nền "ngủ trong X giây/phút"? Và nếu vòng lặp liên tục của Apple là OK cho bất cứ lý do gì, thì sau đó sẽ là cách để thời gian giữa các lần bỏ phiếu?

N.B. Tôi đánh giá cao việc có thể chạy ở chế độ nền là một tính năng iOS 4. Tôi không ngại nếu ứng dụng của tôi chỉ chạy trong iOS 4.

Trả lời

14

Những gì bạn muốn làm, không được đề cập trong các tính năng đa nhiệm của iOS4. Chỉ có một vài loại ứng dụng được phép chạy trong nền trong thời gian dài (hơn 10 phút) và các ứng dụng mạng chung không phải là một trong số chúng.

Tuy nhiên, tất cả đều không bị mất. Những gì bạn có thể làm và những gì tôi tin rằng bạn nên làm là sử dụng thông báo đẩy. Trên máy chủ của bạn, bạn liên kết với dịch vụ thông báo đẩy của Apple, người dùng đăng ký thông báo đẩy và bạn biết "dữ liệu thú vị" là gì hoặc họ cho bạn biết. Khi dữ liệu đó có sẵn, bạn gửi cho người dùng ngay lập tức thông qua thông báo đẩy.

Nó cung cấp trải nghiệm người dùng đẹp hơn và ứng dụng của bạn không cần chạy trong nền. iOS sẽ xử lý việc gửi thông báo đẩy. Nếu họ vuốt để mở khóa điện thoại khi họ nhận được thông báo, ứng dụng của bạn sẽ mở ra và tại thời điểm đó, bạn có thể tải thông tin hữu ích đó trong ứng dụng của mình. Phương pháp 1 của bạn sẽ không hoạt động lâu dài, ngay cả khi bạn quản lý tạm dừng đầu vào trong một thời gian, và đây là lý do: Khởi chạy tác vụ nền chạy một nhiệm vụ KHÔNG quá 10 phút, trừ khi bạn là một trong ba loại ứng dụng được phép chạy. Sau 10 phút, hệ điều hành sẽ tạm ngưng bạn.

Phương pháp 2 của bạn sẽ không hoạt động.Tất cả các thông báo cục bộ đều hiển thị chế độ xem cảnh báo cho người dùng.

+0

Cảm ơn - điều này không phù hợp với những gì tôi đã đọc (không may). Tôi tự hỏi tại sao Apple cho thấy một ví dụ về việc bỏ phiếu cho một máy chủ trò chuyện trong nền trong trường hợp đó. Vấn đề chính với thông báo đẩy cho tôi là tôi muốn giữ thông tin đăng nhập bí mật của khách hàng trên máy khách, nhưng có vẻ như điều này là không thể. Thật thú vị, iPhone được xây dựng trong ứng dụng thư được phép phá vỡ quy tắc này, sau đó? –

+0

Sử dụng cơ chế xác thực/ủy quyền khác. Những thứ như OAuth hoặc whatnot. Thứ hai, tôi không chắc bạn đang chỉ ra ví dụ nào, nhưng điều chính nó có thể hiển thị là các dịch vụ dựa trên vị trí trong nền và ứng dụng khách 'trò chuyện'. Tôi không biết. – jer

3

Giả sử đây là có thể ...

Thật không may đó là một giả định sai (!).

Bạn không thể làm điều đó bằng cách sử dụng "đa tác vụ" trên iPhone vì nó chỉ cho phép một số loại xử lý nền nhất định (GPS, VoIP, âm nhạc). Để thực hiện những gì bạn muốn, bạn sẽ cần phải thực hiện công việc trên máy chủ và sử dụng thông báo đẩy.

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