2012-08-29 29 views
5

Tôi đã đọc một số câu hỏi ở đây về SO liên quan đến việc nhận thông báo đẩy trong khi ứng dụng không chạy (nhiều hơn nền, nghĩa là tắt hoàn toàn) . This question in particular hữu ích nhất trong việc tìm ra cách xác định xem người dùng có đang sử dụng từ điển launchOptions hay không.Thông báo đẩy trong khi ứng dụng không chạy - từ điển launchOptions rỗng

Tuy nhiên, tôi rất bối rối và tôi thừa nhận điều này có thể là sự giám sát lớn về phía tôi: khi thiết bị của tôi nhận được thông báo đẩy cho ứng dụng này trong khi ứng dụng bị tắt và sau đó tôi mở ứng dụng của mình, từ điển launchOptions là một con trỏ rỗng. Từ mô tả của câu trả lời được chấp nhận trong liên kết được đề cập trước đó, và những nơi khác nữa, tôi thu thập rằng tôi sẽ có thể thấy một trọng tải thông báo; tuy nhiên không có gì. Tôi đang phát triển cho iOS 5.1.1.

Suy nghĩ duy nhất khác của tôi là kiểm tra số huy hiệu khi khởi động (lớn hơn 0, làm điều gì đó ...), nhưng điều này có vẻ rất không đáng tin cậy.

Bất cứ ai có thể cho tôi biết những gì tôi đang thiếu? Cảm ơn rất nhiều về sự trợ giúp của bạn!

+0

Trọng lượng bên trong là gì? – msk

+0

@MSK Tôi xin lỗi tôi không hoàn toàn hiểu - bạn có hỏi những gì đẩy ban đầu (từ máy chủ của tôi) chứa như là tải trọng của nó? Nếu vậy, tải trọng là cơ bản, nó không chứa bất kỳ tùy chỉnh nào ngoài huy hiệu thông thường, cảnh báo và âm thanh. –

+0

xem câu trả lời của tôi bên dưới – msk

Trả lời

7

application:didFinishLaunchingWithOptions: sẽ chỉ được gọi với thông tin tải trọng khi ứng dụng được khởi chạy do thông báo. Ví dụ. điều này có thể xảy ra nếu người dùng chạm vào cảnh báo thông báo (được thêm vào trong trung tâm thông báo) hoặc thông báo nhận được với content-avialble = 1 trong tải trọng (thông báo Newsstand) & miễn là ứng dụng của bạn không ở nền trước.

Nếu ứng dụng của bạn nhận được thông báo khi ứng dụng ở chế độ nền. Nếu đó là thông báo Newsstand hoặc nếu dùng chạm trên nút hành động cảnh báo dưới đây được gọi là phương pháp

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

với [[UIApplication sharedApplication] applicationState] không bằng UIApplicationStateActive.

Trong trường hợp trên nếu người dùng không nhấn vào nút tác vụ của cảnh báo thông báo và khởi chạy ứng dụng bằng cách nhấn vào nó, không phải didFinishLaunchingWithOptions hoặc didReceiveRemoteNotification được gọi.

Nếu ứng dụng của bạn nhận được thông báo trong khi ở tiền cảnh didReceiveRemoteNotification được gọi là [[UIApplication sharedApplication] applicationState] sẽ bằng UIApplicationStateActive.

Đối với huy hiệu trong notification, nếu ứng dụng của bạn không chạy mã không được thực thi và huy hiệu được tăng thêm 1 trong biểu tượng ứng dụng. Khi bạn khởi động ứng dụng (chạm vào biểu tượng ứng dụng) didFinishLaunchingWithOptions được gọi với bình thường. (Nếu ứng dụng ở chế độ nền hoặc nền trước khi thông báo nhận được, giống như trên)

Vì vậy, tôi nghĩ điều này bao gồm mọi trường hợp có thể xảy ra. Cũng lưu ý rằng trường hợp nền hợp lệ cho iOS SDK >= 4.0

+0

Ah ha, cảm ơn bạn đã trả lời. Mục tiêu chính của tôi là lấy một số dữ liệu từ một máy chủ khi nhận được push; chúng tôi có điều này làm việc trong nền và tiền cảnh, và tôi đã hy vọng tôi có thể phát hiện, khi tải, nếu một nhận được đẩy trong khi các ứng dụng đã được offline; nó xuất hiện, dựa trên câu trả lời của bạn, rằng điều này là không thể trừ khi người dùng chạm vào thanh thông báo. Theo ý kiến ​​của bạn, có đáng tin cậy để kiểm tra số lượng huy hiệu khi tải không? –

+0

bạn phải duy trì số lượng huy hiệu trong máy chủ của mình, xem [câu hỏi SO này] (http: // stackoverflow.com/questions/1942605/push-notification-huy hiệu-auto-increment) – msk

+0

Ah yeah cool, tôi đã biết về điều đó. Đó không phải là những gì tôi đã yêu cầu mặc dù: Tôi biết rằng tôi có thể kiểm tra, trong ứng dụng, số lượng huy hiệu bằng cách sử dụng [applicationIconBadgeNumber ứng dụng]. Những gì tôi đã tự hỏi nếu nó là đáng tin cậy để kiểm tra xem số lượng huy hiệu lớn hơn không ('[application applicationIconBadgeNumber]> 0'). Có lý do nào khiến tôi không nên làm việc này không? –

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