2016-01-12 15 views
11

Vì vậy, tôi hiện có một ứng dụng trên cửa hàng ứng dụng lên lịch 10 thông báo giả sử bạn bỏ lỡ một thông báo hoặc mười. Bây giờ trước khi bạn nghĩ rằng tôi sẽ làm phiền người đó, thông báo là rất quan trọng đối với chức năng của ứng dụng và thực sự là mục đích chính. Ứng dụng được xây dựng cho iOS 7 nên tại thời điểm đó không có "handleActionWithIdentifier" mà có thể, từ sự hiểu biết của tôi, các hành động hoàn chỉnh cho ứng dụng ngay cả khi ứng dụng bị đóng tùy thuộc vào phản hồi của người dùng đối với thông báo. Bản cập nhật này rất hữu ích cho ứng dụng vì nó giúp loại bỏ một phần vấn đề của tôi về việc phải mở ứng dụng để trả lời thông báo (thông báo hỏi người dùng một câu hỏi và tùy thuộc vào câu trả lời, hoàn thành một cái gì đó).Lập lịch thông báo thứ hai nếu lần đầu tiên bị bỏ qua nhanh (hoặc hoàn thành bất kỳ hành động nào nếu thông báo bị bỏ qua)

Vấn đề vẫn còn là phát hiện nếu thông báo bị bỏ qua, làm cách nào để tôi thực hiện một thông báo khác xuất hiện, ví dụ như ngày hôm sau, nếu thông báo bị loại bỏ hoặc bỏ qua. Tôi đã tìm kiếm trên google và ngăn xếp tràn và từ sự hiểu biết của tôi tất cả các câu hỏi trước đã được hỏi làm thế nào để phát hiện nếu thông báo đã bị mất một ứng dụng được mở mà tôi không cần.

Tại thời điểm này, tôi đúng cách có thể chạy mã nếu người dùng phản ứng với thông báo bằng cách nhấn một trong các tùy chọn trên thông báo của thành viên này:

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler:() -> Void) { 
     var userInfo = [NSObject: AnyObject]() 
     userInfo["text"] = responseInfo[UIUserNotificationActionResponseTypedTextKey] 
     NSNotificationCenter.defaultCenter().postNotificationName("text", object: nil, userInfo: userInfo) 

     print(userInfo) 

     completionHandler() 
    } 

như ngay bây giờ, tôi chỉ tham gia vào textfield và in nó nhưng tôi có thể khởi chạy thông báo thứ hai nếu tôi muốn. Có phương pháp phát hiện khi thông báo bị bỏ qua và lên lịch thông báo khác không?

Luôn có cơ hội là vẫn không thể thực hiện những gì tôi muốn và tôi sẽ lên lịch 10 thông báo trước có vẻ cẩu thả và không cho phép tôi trả lời như lặp lại.

TLDR; làm thế nào để phát hiện và mã chạy nếu một thông báo địa phương đang bỏ lỡ mà không cần mở ứng dụng

BTW: nếu bạn có câu trả lời, nhanh chóng là ngôn ngữ ưa thích

+0

bạn có thể cho biết bạn đã thực hiện phương pháp nào (bước) để giải quyết vấn đề này? thậm chí tôi đã trải qua vấn đề này. –

Trả lời

6

Bạn có thể sử dụng một hỗn hợp của nền FetchMột số loại kiểm tra dấu thời gian.

Ví dụ:

Khi bạn sắp xếp một thông báo bạn có thể giữ một số logic mà sẽ cho phép bạn theo dõi nếu thông báo rằng đã bị bỏ qua hay không. Có thể giữ một số dữ liệu trong số NSUserDefaults giữ lần cuối là Thông báo đã gửi và khi nó phải được khởi chạy bởi O.S.

Một cách có thể để kiểm tra rằng timestamp:

Nếu bạn khởi động thử nghiệm này sau thời điểm mà nó được cho là để khởi động (và có lẽ hơi muộn, chỉ trong trường hợp người dùng nhìn thấy nó nhưng vẫn chưa sẵn sàng trả lời) và bạn vẫn chưa đánh dấu nó là không bỏ qua, thì người dùng có thể đã bỏ qua hoặc bỏ lỡ thông báo của bạn.

Thử nghiệm này sẽ có thể được sử dụng trong AppDelegate của bạn.

Sau đó, phép Bối cảnh Fetch khả năng trong chế độ nền.

này sẽ đưa ra một số CPU thời gian để ứng dụng của bạn (khi iOS nghĩ là một thời điểm tốt cho đó) và bạn có thể nắm bắt cơ hội ;-).

Đối với việc có thể để làm điều đó bạn sẽ cần phải thêm chức năng phù hợp vào AppDelegate thực hiện của bạn:

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
     // your code 
    } 

Trong cơ thể của chức năng này, hãy chạy "thử nghiệm để thông báo bỏ qua" của bạn và sắp xếp các thông báo mới Nếu cần thiết.

Đừng quên gọi completionHandler ngay khi bạn hoàn thành bài kiểm tra!

+0

Tôi nghĩ rằng điều này sẽ làm việc, những rắc rối duy nhất tôi có là nói cho thiết bị khi đi qua một "kiểm tra". Làm thế nào, ví dụ, tôi sẽ yêu cầu thiết bị để kiểm tra một thông báo bị nhỡ trong 10 phút hoặc lâu hơn. Tôi hơi bối rối về mức độ thường xuyên hoặc cách kiểm soát các công việc tìm nạp. – TekShock

+0

chào mừng bạn đến với iOS World! : D Đó là vào hệ thống để quyết định, bạn chỉ có thể cho nó biết mức độ thường xuyên bạn muốn làm điều đó. Nhưng không có gì đảm bảo rằng nó sẽ thực hiện tìm nạp nền tại thời điểm đó. Theo như tôi biết, tùy chọn duy nhất là dựa vào cơ chế này hoặc thực hiện theo cách khác xung quanh: lập lịch một số thông báo và xóa các thông báo đang chờ xử lý nếu người dùng đã nhập ứng dụng của bạn. –

+0

Yea Tôi nghĩ đây là lựa chọn duy nhất của tôi nên tôi quyết định làm một sự kết hợp cả hai. Tôi đã lên kế hoạch cho một vài thông báo trước và sau đó thực hiện tìm nạp để lên lịch nhiều hơn nếu chúng bị bỏ lỡ vì vậy nó sẽ trở nên đáng tin cậy hơn một chút. Cảm ơn câu trả lời! – TekShock

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