2012-09-05 31 views
8

Tôi đã cố xử lý việc nhận thông báo trong ứng dụng của mình nhưng không thực sự hoạt động.iOS Xử lý thông báo sau khi khởi động ứng dụng từ trạng thái không hoạt động

Khi tôi sử dụng didReceiveLocalNotification:(UILocalNotification *)notification. Tôi có thể nhận và sử dụng thông báo được sử dụng để nhập ứng dụng, mà không có bất kỳ sự cố nào

Tuy nhiên, chức năng này chỉ được kích hoạt khi ứng dụng đã là chạy (hoạt động, không hoạt động, nền và có thể bị tạm ngưng nhưng tôi vẫn chưa thử).

Hiện tại, có chức năng này didFinishLaunchingWithOptions:(NSDictionary *)launchOptions nơi bạn có thể sử dụng [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey] để trả lại UILocalNotification.

Tuy nhiên, khi bạn khởi chạy ứng dụng từ trạng thái không hoạt động, sự kiện này không được kích hoạt. LocalNotification sau đó mở ứng dụng, nhưng tôi không thể sử dụng nó theo bất kỳ cách nào.

Bây giờ, câu hỏi của tôi là: Làm cách nào để có thể làm cho nó hoạt động, vì vậy tôi có thể nhận và xử lý thông báo khi khởi động ứng dụng, từ thông báo khi ứng dụng ở trạng thái không chạy? Có lẽ có điều gì đó tôi đang làm sai ở đây không?

Dưới đây là một chút mã mẫu từ ứng dụng của tôi:

Thứ nhất, didFinishLaunchingWithOptions chức năng, trong đó, tiếc là không hoạt động. Chức năng [sharedLocalNotificationsInstance processNotification:notification] không bao giờ được đưa ra ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 
[sharedLocalNotificationsInstance checkNotifications]; 

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
if (notification != nil) { 

    // Process the received notification 
    [sharedLocalNotificationsInstance processNotification:notification]; 

    application.applicationIconBadgeNumber = 0; 
} 

return YES; 
} 

Và một mảnh thứ hai của mã: Chức năng didReceiveLocalNotification, mà làm việc một cách hoàn hảo: Tôi nhận được thông báo, và [sharedLocalNotificationsInstance processNotification: Thông báo] hoạt động hoàn hảo.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ 

// Used when the application launches from a notification 
LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 

// Process the received notification 
[sharedLocalNotificationsInstance processNotification:notification]; 
} 
+0

Hi laarsk. Tôi có cùng một vấn đề chính xác. tôi có thể nắm bắt thông báo khi ứng dụng ở trong foreGround hoặc backGround nhưng những điều thú vị xảy ra khi ứng dụng bị đóng. tôi nhấp vào thông báo, mở ứng dụng, ở lại trên màn hình trong 1 giây sau đó màn hình chuyển sang màu đen. tôi thấy ứng dụng ở chế độ nền nhưng không có dấu hiệu của thông báo cập nhật. Tôi thực sự không chắc chắn liệu Thông báo UILocalNotification * = (UILocalNotification *) [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]; có hoạt động hay không. Bạn đã tìm thấy một giải pháp vững chắc cho điều này? – Add080bbA

Trả lời

4

Đây là cách iOS xử lý thông báo địa phương. Tùy thuộc vào trạng thái ứng dụng của bạn, ví dụ: đang hoạt động, đang chạy ở chế độ nền hoặc chưa bắt đầu. IOS sẽ gọi hoặc didFinishLaunchingWithOptions hoặc didReceiveLocalNotification hoặc sẽ không chạm vào ứng dụng của bạn.

hãy xem bài viết này để làm rõ - http://www.thekspace.com/home/component/content/article/62-uilocalnotification-demystified.html

+0

Cảm ơn bạn đã liên kết! Thật không may, trang đó cũng nói rằng ứng dụng sẽ khởi chạy didFinishLaunchingWithOptions khi ứng dụng sẽ ở trạng thái không chạy, mà nó, không may, không ... Atleast không xa như tôi biết. Một cái gì đó tôi đang nghĩ đến ngay bây giờ, là nó có lẽ có thể làm một cái gì đó hơi khác nhau: khởi động ứng dụng, và sau đó cháy sự kiện didReceiveLocalNotification. Tôi chỉ lập trình sự kiện đó để làm điều gì đó khi applicationState = 1 (hoạt động), nhưng có lẽ tôi cần phải sử dụng nó để thay thế. Tôi sẽ có một cái nhìn! – laarsk

+0

Nếu ứng dụng của bạn không chạy, khi thông báo cục bộ xảy ra và người dùng kích hoạt thông báo, iOS sẽ khởi động ứng dụng của bạn và chuyển đối tượng thông báo qua didFinishLaunchingWithOptions. Tuy nhiên, nếu người dùng không kích hoạt thông báo, sẽ không có gì xảy ra. –

+0

Trong iOS7, tôi không thấy bất kỳ thông báo nào từ iOS khi ứng dụng không hoạt động. Huy hiệu được đặt, nhưng khi nhấp vào ứng dụng biểu tượng, không có chức năng nào được gọi. – Brave

1

<Matrix-Morpheus-Meme title="WHAT IF I TOLD YOU">

Khi một ứng dụng được khởi chạy từ "không chạy" nhà nước vì một người dùng khai thác trên một thông báo cảnh báo địa phương, các ứng dụng đã được bắt đầu bởi iOS, không phải bởi Xcode, do đó CNTT KHÔNG RUN THEO THE DEBUGGER. Bạn không thể phá vỡ bên trong nó và không NSLog() gửi bất cứ điều gì đến giao diện điều khiển Xcode. Thử nghiệm với UIAlertController.

</Matrix-Morpheus-Meme>

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