2012-01-10 12 views
9

Tôi đã triển khai UILocalNotifications trong hai ứng dụng khác nhau ngay bây giờ. Một sử dụng Dịch vụ vị trí, có nghĩa là nếu nó bị giết, nó (thường) được khởi động lại (vì vậy nó không phải là lớn của một vấn đề). Tuy nhiên, trong một ứng dụng khác, tôi lên lịch UILocalNotification dựa trên thời gian. Trong trường hợp này, tôi đang gặp một vấn đề lớn.UILocalNotification - Cách xử lý khi ứng dụng KHÔNG chạy?

Nếu tôi lên lịch thông báo, sau đó ứng dụng bị xóa, bị mất bộ nhớ, điện thoại sẽ tắt sau đó bật lại, tôi không thể xem thông báo cũ "tự động" khi mở ứng dụng.

Đây là công việc mà làm việc (ứng dụng chạy ở chế độ nền):

  1. Khởi chạy ứng dụng; thông báo lịch biểu ứng dụng; đóng ứng dụng; ứng dụng hiện đang chạy ở chế độ nền
  2. Nhận thông báo địa phương; bỏ qua nó lúc đầu; kéo trình đơn thả xuống từ trên cùng (thanh trạng thái); chạm vào thông báo để khởi chạy ứng dụng
  3. Kết quả: Ứng dụng hiển thị thông tin một cách thích hợp trong thông báo.

Đây là công việc mà không không làm việc (ứng dụng không còn chạy ở chế độ nền):

  1. Khởi chạy ứng dụng; thông báo lịch biểu ứng dụng; đóng ứng dụng; ứng dụng hiện đang chạy ở chế độ nền
  2. Xóa ứng dụng theo cách thủ công (để mô phỏng tình huống của tôi)
  3. Vẫn nhận được thông báo địa phương; bỏ qua nó lúc đầu; kéo trình đơn thả xuống từ trên cùng (thanh trạng thái); chạm vào thông báo để khởi chạy ứng dụng
  4. Kết quả: Ứng dụng khởi chạy nhưng phương thức didReceiveLocalNotification không được gọi. Người dùng cho rằng ứng dụng không hoạt động.
    Lưu ý: Tôi thậm chí không thể buộc thông tin theo cách thủ công, vì nếu họ đã nhận được nhiều hơn một thông báo, tôi không thể biết người nào họ đã chạm vào để biết người nào sẽ hiển thị.

Có cách nào để biết được thông báo họ đề cập đến khi ứng dụng không chạy ở chế độ nền (và do đó không chạy didReceiveLocalNotification method)?

Trả lời

15

Trong trường hợp thứ 2, người dùng đã thoát (hoặc đã chết) ứng dụng, vì vậy khi người dùng chạm vào thông báo, ứng dụng của bạn sẽ được khởi chạy.

này có thể được xử lý theo phương pháp appdelegate của dưới đây đề cập

didFinishLaunchingWithOptions được gọi khi một ứng dụng được đưa ra, vì vậy chỉ cần kiểm tra xem ứng dụng đã thực sự đưa ra vì người sử dụng chạm vào thông báo (mã dưới đây):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

    if (notification) 
    { 
     NSLog(@"notification caused app to launch, alert body = %@", notification.alertBody); 
     // do what ever action you want to do 
     // you could just copy the code from "didReceiveLocalNotification" and paste it here 
    } 

    return YES; 
} 
+1

hi, điều này sẽ hoạt động, chỉ khi sau khi giết ứng dụng, người dùng nhấp vào thông báo, điều gì sẽ xảy ra nếu anh ấy nhấp trực tiếp vào biểu tượng ứng dụng, xem huy hiệu, cách chúng ta có thể chỉ cho anh ta, VC mong muốn. – Ranjit

+0

@ user1046037 Điều này không hiệu quả đối với tôi. Bạn có biết tại sao điều đó có thể là?Phương thức '' 'didReceiveLocalNotification''' hoạt động (nhưng đó là khi ứng dụng đang chạy). Tôi dường như không thể làm được điều này. http://stackoverflow.com/questions/36246104/uiapplicationlaunchoptionslocalnotificationkey-always-null-ios – Supertecnoboff

2

@Ranjit, thao tác này sẽ hoạt động khi người dùng nhấn vào biểu tượng ứng dụng vì đây là phương thức ủy nhiệm ứng dụng. Được gọi mỗi khi ứng dụng hoàn tất khởi chạy. (Không thể bình luận vì thiếu danh tiếng của tôi ...;))

+0

no williams nó sẽ không hoạt động – Ranjit

+0

UIApplicationLaunchOptionsLocalNotificationKey là không khi ứng dụng được khởi chạy từ biểu tượng nhấn. Phải nhấn vào chính thông báo. –

+0

Có ai tìm được giải pháp cho việc này không? –