2012-10-09 33 views
5

Một trong những tính năng trong ứng dụng của tôi là hủy đăng ký người dùng khỏi thông báo đẩy từ xa khi người dùng đăng xuất khỏi ứng dụng. Có cách nào tôi có thể hủy đăng ký ứng dụng khỏi thông báo đẩy khi người dùng đăng xuất trong khi thiết bị ở chế độ trên máy bay (ngoại tuyến) không?IOS unregisterForRemoteNotifications không hoạt động ở chế độ trên máy bay

Tôi đã thử mã này nhưng tôi vẫn nhận được thông báo khi tôi trở lại trực tuyến, [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Một số người có thể giúp cách xóa ứng dụng khỏi trung tâm thông báo khi thiết bị ở chế độ trên máy bay?

+1

Bạn không cần phải kết nối với internet để hủy đăng ký? – DGund

+0

@DGund Tôi đã cùng quan niệm sai lầm nhưng thực tế bạn cần trực tuyến để hủy đăng ký nhận thông báo thành công. Bạn vẫn nhận được thông báo nếu bạn chưa đăng ký trong khi bạn không có kết nối. – user1732255

Trả lời

0

Thêm một lá cờ hoặc một cái gì đó tương tự (gọi nó là bất cứ điều gì bạn muốn, như ShouldRecallUnregister), khi bạn gọi

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

mà bạn thiết lập để YES nếu không có liên quan internet, và để nó tại NO nếu các công trình chưa đăng ký.

Lưu trữ trong Giá trị mặc định của người dùng ([[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];) và kiểm tra giá trị trong applicationDidBecomeActive: ví dụ (hoặc bất kỳ nơi nào phù hợp nhất với ứng dụng của bạn).

Nếu CÓ, hãy gọi lại [[UIApplication sharedApplication] unregisterForRemoteNotifications];.

+0

Như thế này, bạn sẽ nhận được thông báo thêm trong khung thời gian từ việc tắt máy bay và kích hoạt ứng dụng. – ilmiacs

+0

Cảm ơn giải pháp. unregisterForRemoteNotifications không có cuộc gọi lại để theo dõi nếu việc đăng ký không thành công hay không ?. Có cách nào để theo dõi nó không? – user1732255

+0

@rdurand giải pháp này có thể không phù hợp với yêu cầu của tôi vì tôi không nên nhận thông báo khi người dùng đã đăng xuất khỏi ứng dụng.Trong giải pháp hủy đăng ký này chỉ hoàn tất khi người dùng khởi chạy lại hoặc đưa ứng dụng lên nền trước. Đến lúc đó chúng tôi vẫn nhận được thông báo. Có dệt tốt hơn không? – user1732255

2

Apple kiểm soát thông báo đẩy từ xa. Nếu bạn đang ngoại tuyến, bạn không thể vô hiệu hóa nó. Khi Apple lần đầu tiên nhìn thấy bạn trực tuyến và đẩy không bị vô hiệu hóa, nó sẽ gửi cho bạn đẩy. Không có cách nào để ngăn chặn iDevice hiển thị các push mà apple gửi cho người dùng, vì nó không nằm trong tay của ứng dụng.

Vì vậy, chỉ có một khả năng: Bạn phải tắt tính năng NGAY LẬP TỨC sau khi thiết bị trực tuyến trở lại. Và nó vẫn là một câu hỏi may mắn, những gì Apple nhận được tin nhắn đầu tiên, rằng bạn đang trực tuyến hoặc bạn vô hiệu hóa push. Và cũng có câu hỏi, điều gì sẽ xảy ra với các thông báo mà Apple muốn gửi tới thiết bị khi nó ngoại tuyến. Nó sẽ gửi lại chúng dù sao khi trực tuyến hoặc loại bỏ chúng khi vô hiệu hóa đầu tiên? Tôi không biết. Bạn sẽ cần phải làm nghiên cứu.

Vì vậy, cơ hội duy nhất bạn có là nếu ứng dụng của bạn ở chế độ nền trong khi người dùng trực tuyến. Bạn sẽ cần phải ngăn ứng dụng của mình bị tạm ngưng (here's cách đạt được điều đó) để có thể phản hồi lại thông báo hệ thống. Thông báo mà bạn cần là thay đổi trạng thái trực tuyến, tôi chỉ biết nó tồn tại. This resource có thể hữu ích. Khi thiết bị trực tuyến, nó sẽ thông báo cho ứng dụng của bạn đang đợi trong nền (không bị treo). Sau đó, bạn có thể phản ứng bằng cách hủy đăng ký điều khiển từ xa ngay lập tức.

Đó là điều tốt nhất bạn có thể đạt được theo hướng đó. Hi vọng điêu nay co ich.

+0

Upvote, giải pháp của bạn có vẻ hợp pháp. – rdurand

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