2011-09-29 32 views
7

Tôi đã triển khai tất cả các phương pháp được đề xuất trong AppDelegate để nhận dịch vụ Thông báo từ xa.Xử lý thông báo từ xa APNS trong khi ở nền

Tôi có thể chấp nhận chúng khi đang chạy, trong khi khởi chạy và trong khi bị tắt.

Nhưng có vấn đề, vì tôi không thể làm việc với nhiều thông báo nhận được trong khi ở chế độ nền. Tôi chỉ có thể làm việc với thông báo mới nhất.

Hướng dẫn được khuyến nghị để làm điều đó là gì? Làm thế nào tôi có thể nhận được tất cả các thông báo nhận được trong khi ở chế độ nền? Có phải nó chỉ có thể giải quyết được thông qua cuộc gọi thủ công đến nhà cung cấp dịch vụ của tôi (người gửi dữ liệu apns)?

+1

Nếu bạn thực sự triển khai đúng APNS, ứng dụng của bạn sẽ không bao giờ "xử lý" thông báo. iOS nhận được tất cả các thông báo và người dùng có thể sử dụng các thông báo đó để mở ứng dụng của bạn. Đó là nó. –

+1

Hệ thống thông báo không được sử dụng để gửi dữ liệu quan trọng giữa máy chủ và thiết bị. Nó chỉ có nghĩa là để bump thiết bị để nó có thể liên lạc với máy chủ và tìm hiểu những gì đang thực sự xảy ra. Ngoài việc không phù hợp với thông báo đẩy này cũng không đủ đáng tin cậy để làm bất cứ điều gì quan trọng. Nếu tải trên máy chủ là một vấn đề đối với bạn, thì hãy tăng giá của ứng dụng hoặc thứ gì đó để trang trải nó. Người dùng sẽ vui lòng trả tiền nếu ứng dụng của bạn tốt. –

Trả lời

6

Với tất cả các dự án tôi đã làm việc trên đó chưa có cách nào để lưu trữ cục bộ thông tin này nếu thông báo đẩy bị loại bỏ. Trong tất cả các trường hợp đó, chúng tôi đã sử dụng một tệp nhỏ trên máy chủ mà ứng dụng sẽ kết nối và kéo khi nó hoạt động trở lại. Cũng có một số nơi trong ứng dụng mà người dùng có thể xem tất cả các thông báo của họ, một lần nữa, được lưu trữ trên máy chủ để truy xuất nhanh.

Với cách tôi hiểu thông báo đẩy sẽ được thiết lập, nếu thông báo bị loại bỏ, hệ thống sẽ loại bỏ thông báo đó. Nó sẽ thực hiện bất cứ điều gì nó phải làm (chẳng hạn như cập nhật số huy hiệu và phát âm thanh chính xác) nhưng mọi thông tin bổ sung cụ thể cho thông báo đó sẽ bị mất.

+0

Cảm ơn bạn đã trả lời. Những gì tôi tự hỏi là, khi ứng dụng ở phía trước, thông báo đẩy được gửi ngay đến AppDelegate. Nhưng khi tôi chạy tác vụ dài trong nền, tôi cũng muốn nhận các thông báo này. Bạn có nghĩ rằng nó có thể? –

+0

Tôi không nghĩ là có thể. Từ tất cả mọi thứ tôi đã làm việc với chúng tôi luôn luôn phải đi đến máy chủ để nhận được thông báo 'bị nhỡ'. Nếu thông báo bị loại bỏ trong khi ứng dụng ở chế độ nền, điều duy nhất cần thay đổi là số hiệu huy hiệu. –

3

Không chắc chắn nếu điều này có ích, nhưng nếu bạn chỉ muốn biết có bao nhiêu thông báo bạn đã bỏ lỡ khi bạn ở chế độ nền. Bạn có thể tạo biến chứa số thông báo và lưu trữ biến này trong ứng dụng mỗi khi bạn xử lý thông báo. Khi bạn ra khỏi nền và nhận được một thông báo mới, bạn có thể trừ số mới với số được lưu trữ để tìm ra số lượng thông báo bị nhỡ. Tôi không nghĩ rằng có một cách mà iOS có thể cung cấp cho bạn dữ liệu hoàn chỉnh được liên kết với tất cả các thiết bị thông báo đã nhận được trong khi ứng dụng ở chế độ nền.

+0

gợi ý tốt, nhưng tôi đang tìm cách lưu trữ chúng cục bộ, bởi vì nó nặng trên máy chủ trong tình huống của tôi để nhận thông báo sau một số id thông báo cho mã thông báo ứng dụng khách ... –

+0

bạn có muốn lưu trữ thông tin nhận được bằng cách nhấn cục bộ không khi ứng dụng ở chế độ nền? – Nilesh

+0

@Nilesh vâng, tôi muốn lưu trữ các thông báo đã nhận, trong khi ứng dụng của tôi đang chạy tác vụ dài trong nền. –

3

Giải pháp tốt nhất là giữ một danh sách các thông báo đã gửi với tất cả dữ liệu có liên quan trên máy chủ của bạn, vì vậy ứng dụng có thể truy cập dữ liệu đó khi khởi chạy. Gửi nhiều thông báo với dữ liệu không được lưu trữ trên máy chủ có thể nguy hiểm, vì ứng dụng chỉ nhận được thông báo khi người dùng mở ứng dụng từ thông báo đó, vì vậy nếu họ chạm vào một thông báo, ứng dụng sẽ chỉ nhận được một.

Nếu bạn có tất cả trong danh sách trên máy chủ, ứng dụng có thể chỉ cần kéo và kéo danh sách đó xuống và xử lý danh sách, đảm bảo không có dữ liệu nào bị mất.

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