2012-08-23 28 views
34

Tương tự như câu hỏi này: How do I access remote push notification data on applicationDidBecomeActive?iOS Push Notification - Làm thế nào để có được các dữ liệu thông báo khi bạn nhấp vào biểu tượng ứng dụng thay vì thông báo

Nhưng khác nhau là cách bạn có thể truy cập dữ liệu thông báo khi bạn đang ở trong applicationDidBecomeActivenếu bạn đã nhấp vào biểu tượng ứng dụng thay vì thông báo đẩy.

Dòng chảy là: Nếu bạn click vào push notification sau đó didReceiveRemoteNotification sẽ được kích hoạt, nhưng nếu bạn nhấp vào biểu tượng ứng dụng ban đầu, chỉ applicationDidBecomeActive sẽ được kích hoạt và didReceiveRemoteNotification sẽ không được gọi.

Tôi đang tìm trường hợp sau, vậy làm cách nào tôi có thể truy cập dữ liệu thông báo đẩy.

(Cả hai trường hợp giả định ứng dụng này là ở chế độ nền và không giết được nêu ra.)

+2

Điều đó là không thể. Dữ liệu thông báo chỉ được chuyển đến ứng dụng nếu ứng dụng được khởi chạy để phản hồi thông báo chứ không phải khi nhấn vào biểu tượng ứng dụng. –

+1

Bạn có thông tin gì với thông báo đẩy của mình? Đối với tôi, có vẻ như bạn đã tạo ra lỗi thiết kế nếu bạn không thể mở ứng dụng của mình một cách thuận tiện mà không nhận được thông báo đẩy trước. – xci

Trả lời

35

Bạn không thể có được đẩy trọng tải từ xa bằng cách tung ra ứng dụng từ màn hình chính.

Nếu dữ liệu đẩy quan trọng cho việc sử dụng ứng dụng, hãy tải dữ liệu đó từ máy chủ của bạn sau khi ứng dụng được khởi chạy.

+2

Để tiếp tục quỹ đạo này, bạn có thể gửi một tải trọng nhỏ cho máy chủ của mình bất cứ khi nào ứng dụng được khởi chạy, sau đó yêu cầu máy chủ của bạn lắng nghe tải trọng đó và đẩy dữ liệu ngay lập tức. Đây sẽ là cách giải quyết gần nhất mà tôi có thể nghĩ đến để đạt được mục tiêu của bạn. –

-6

Bạn sẽ nhận được thông báo trong phương pháp launchWithOptions trong một cái gì đó appdelegate của bạn như thế này:

NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

    if(remoteNotif != nil){ 
     //Handle your notification 
    } 
+1

Ứng dụng hiện đang ở chế độ nền và tôi nhấp vào ứng dụng từ màn hình chính thay vì thông báo. – Howard

6

@fannheyward Câu trả lời là hoàn toàn chính xác. Bạn không thể tải trọng khi ứng dụng được khởi chạy bằng cách nhấn vào biểu tượng ứng dụng.

Tôi có một ý tưởng, nếu bạn biết rằng một số thông báo đang chờ xử lý khi ứng dụng được khởi chạy bằng cách nhấn vào biểu tượng ứng dụng. Với kiến ​​thức này, ứng dụng của bạn có thể tìm nạp tải trọng từ máy chủ của bạn.

Bạn có thể đặt "Huy hiệu" trong mọi thông báo như vậy và trên applicationDidBecomeActive bạn có thể kiểm tra [application applicationIconBadgeNumber]> 0 để biết rằng một số thông báo đang hoạt động. Sau khi lấy tải trọng từ máy chủ của bạn, bạn có thể thiết lập nó để 0 như dưới đây

[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; 
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 

Xin lưu ý: Điều này có nghĩa ứng dụng của bạn sẽ có huy hiệu hiển thị trên nó khi nhận được thông báo. Tôi không chắc chắn về hành vi khi người dùng vô hiệu hoá huy hiệu từ cài đặt.

+0

Tôi đang sử dụng phương pháp tương tự. Lưu ý rằng người dùng * có thể * bật thông báo thông báo nhưng * đã tắt * huy hiệu cho ứng dụng của bạn. Thực tế, mặc dù ... ai làm điều đó? ;) – Timo

+0

Về >> Tôi không chắc chắn về hành vi khi người dùng tắt cài đặt huy hiệu - Ứng dụng vẫn có thể nhận được sự kiện tính đúng nếu huy hiệu không được hiển thị trên biểu tượng ứng dụng –

3

Nếu mục tiêu ứng dụng của bạn vượt quá iOS7, bạn chỉ có thể thực hiện nếu ứng dụng còn hoạt động trong backgroud.

Trong cài đặt khả năng ở Xcode, bạn nên bật Chế độ nền> Thông báo từ xa và viết mã bên dưới.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    // save userInfo in NSUserDefaults 
    completionHandler(UIBackgroundFetchResultNoData); 
} 

Nếu bạn muốn kiểm tra nó, nó sẽ rất hữu ích để sử dụng https://github.com/acoomans/SimulatorRemoteNotifications

  • Từ phía máy chủ, hãy chắc chắn để thiết lập thuộc tính nội dung có sẵn với giá trị là 1

Để làm việc này, tôi cũng phải kiểm tra hộp tìm nạp nền.

+0

Tôi đã thử trên iPhone 6 với iOS8, nội dung có sẵn = 1, chế độ nền thông báo từ xa, ứng dụng ở chế độ nền. didReceieveRemoteNotification được gọi khi nhận được thông báo. nó KHÔNG được GỌI khi ứng dụng được mở ra. Điều này không trả lời câu hỏi. – wyu

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