Tôi đang gửi Thông báo đẩy tới ứng dụng iPhone của mình và tôi muốn một bộ hướng dẫn khác để thực thi tùy thuộc vào việc ứng dụng đã được khởi chạy hay chưa. Tôi mới phát triển iPhone, và trong khi tôi nghi ngờ UIApplication hoặc lớp AppDelegate của dự án của tôi có giải pháp, tôi đã không tìm thấy câu trả lời hay. Có cách nào dễ dàng để kiểm tra điều này không?Làm cách nào để biết ứng dụng iPhone của tôi có đang chạy khi nhận được Thông báo đẩy không?
Trả lời
Các UIApplication đại biểu có phương pháp
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
mà bạn cần phải thực hiện. Điều này nhận được thông báo khi ứng dụng đang chạy.
Nếu ứng dụng của bạn hiện không chạy và thông báo nhận được sau đó ứng dụng của bạn có thể được tung ra với
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
với các chi tiết thông báo tổ chức trong từ điển launchOptions. nếu từ điển là 0 thì người dùng khai thác biểu tượng ứng dụng như bình thường.
Các tài liệu của Apple cho thông báo đẩy giải thích điều này:
Tuy nhiên, có hai tình huống mà applicationDidFinishLaunching: không phải là một trang web thực hiện phù hợp:
- ứng dụng đang chạy khi thông báo đến.
- Tải trọng thông báo chứa dữ liệu tùy chỉnh mà ứng dụng có thể sử dụng.
Trong trường hợp đầu tiên, nơi ứng dụng đang chạy khi hệ điều hành iPhone nhận được thông báo từ xa, bạn nên triển khai ứng dụng: didReceiveRemoteNotification: phương thức UIApplicationDelegate nếu bạn muốn tải xuống dữ liệu ngay lập tức. Sau khi tải xuống, hãy đảm bảo xóa huy hiệu khỏi biểu tượng ứng dụng. (Nếu ứng dụng của bạn thường xuyên kiểm tra với nhà cung cấp của mình để có dữ liệu mới, việc triển khai phương pháp này có thể không cần thiết.)
Điều này có nghĩa là nếu ứng dụng của bạn đang chạy, ứng dụng của bạn đang chạy.
Đây là cách thích hợp hơn để xử lý trạng thái hoạt động/không hoạt động của ứng dụng.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// check for the app state
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
//the app is in the foreground, so here you do your stuff since the OS does not do it for you
//navigate the "aps" dictionary looking for "loc-args" and "loc-key", for example, or your personal payload)
}
application.applicationIconBadgeNumber = 0;
}
didReceiveRemoteNotification:
được gọi khi ứng dụng đang chạy, vâng, nhưng khi nó được treo, các iOS
chăm sóc đưa lên huy hiệu, vv Nếu ứng dụng là ở mặt trước, hệ điều hành không có gì và chỉ gọi số didReceiveRemoteNotification:
của bạn.
Nếu bạn đang đi để kiểm tra applicationState trên iOS ít hơn 4, bạn sẽ cần phải kiểm tra xem applicationState được hỗ trợ:
if ([application respondsToSelector:@selector(applicationState)]){
// Safe to check applicationState
UIApplicationState state = [application applicationState];
}
Tùy thuộc vào những gì bạn có nghĩa là bằng cách "ra mắt", bạn đang tìm kiếm một trong hai :
- câu trả lời của Kevin ở trên (phân biệt giữa phóng hay không phóng)
- hay này (phân biệt giữa đình chỉ hoặc hoạt động, nhưng đã đưa ra):
Sử dụng cờ được đặt đúng khi ứng dụng hoạt động và sai khi ứng dụng không hoạt động.
Flag (trong tập tin tiêu đề [h]):
BOOL applicationIsActive;
Mã (trong tập tin thực hiện [.m]):
- (void)applicationDidBecomeActive:(UIApplication *)application {
applicationIsActive = YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
applicationIsActive = NO;
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (applicationIsActive) {
// Handle notification in app active state here
}
else {
// Handle notification in app suspended state here
}
này hoạt động bởi vì khi ứng dụng bị đình chỉ, các Hệ điều hành gọi "applicationDidReceiveRemoteNotification" trước khi nó gọi "applicationDidBecomeActive" trong quá trình "wake-up".
Câu trả lời "hoàn chỉnh" thực sự là câu trả lời của Kevin cộng với câu trả lời này.
Hy vọng điều này sẽ hữu ích.
- 1. Chỉ nhận thông báo Newsstand khi ứng dụng đang chạy
- 2. Thông báo đẩy trong ứng dụng Iphone
- 3. Thông báo đẩy không nhận được trên iphone
- 4. Làm cách nào để nhận thông báo đẩy của một ứng dụng khác?
- 5. Làm thế nào để xử lý các thông báo đẩy nếu ứng dụng đang chạy?
- 6. Khởi chạy ứng dụng khi thông báo GCM nhận được
- 7. Làm cách nào để xóa thông báo đẩy iOS ưu tiên cho ứng dụng của tôi?
- 8. Làm cách nào để tạo Thông báo đẩy tùy chỉnh cho Ứng dụng của riêng tôi?
- 9. Làm cách nào để biết mã của bạn có đang chạy trên iPhone hay iPhone3G không?
- 10. Cách kiểm tra Thông báo đẩy đang hoạt động trong ứng dụng của tôi
- 11. Kiểm tra Phản hồi Thông báo Đẩy của Apple - không có mục nào được nhận
- 12. Gỡ lỗi ứng dụng Khi được khởi chạy bằng thông báo đẩy
- 13. Làm cách nào để nhận thông báo đẩy từ tài khoản Gmail của tôi?
- 14. Nhận mã thông báo thiết bị cho thông báo đẩy sau khi ứng dụng bị xóa
- 15. Thông báo đẩy trong khi ứng dụng không chạy - từ điển launchOptions rỗng
- 16. Thông báo đẩy của Apple với ứng dụng doanh nghiệp
- 17. Làm thế nào để chạy ứng dụng .NET của tôi có thể nhận lệnh khi đang chạy?
- 18. Thông báo trong Phonegap Trong khi Ứng dụng không chạy
- 19. Làm cách nào để biết ứng dụng toàn màn hình có đang chạy không?
- 20. Cách nhận thông báo khi thông báo được thông báo
- 21. AdHoc xây dựng không nhận được thông báo đẩy
- 22. Tăng Huy hiệu thông báo Đẩy iPhone
- 23. Có thể triển khai các thông báo đẩy iPhone trong ứng dụng Google App Engine không?
- 24. Xử lý thông báo đẩy trong khi ứng dụng đang mở
- 25. Làm thế nào để biết nếu dự án Xcode iPhone của tôi đang sử dụng ARC?
- 26. Làm cách nào để biết tập lệnh Perl của tôi có đang chạy trong Windows không?
- 27. iOS - Gửi thông báo đẩy trên ứng dụng trò chuyện XMPP khi bạn đang ngoại tuyến
- 28. Làm cách nào để ngăn màn hình iPhone bị mờ hoặc tắt trong khi ứng dụng của tôi đang chạy?
- 29. Xác định xem ứng dụng có đang chạy ở nền trước khi nhận được thông báo trên iOS
- 30. Làm cách nào để nhận được thông báo đẩy với Indy?
Đây là một gd. Cảm ơn –