2012-10-09 10 views
5

Jedną z funkcji mojej aplikacji jest wyrejestrowanie użytkownika ze zdalnego powiadomienia push, gdy użytkownik wylogowuje się z aplikacji. Czy mogę wyrejestrować aplikację z powiadomień wypychanych, gdy użytkownik wyloguje się, gdy urządzenie znajduje się w trybie samolotowym (offline)?Funkcja IOS unregisterForRemoteNotifications nie działa w trybie samolotowym.

Próbowałem tego kodu, ale nadal otrzymuję powiadomienia, gdy wrócę online, [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Czy ktoś może pomóc w usunięciu aplikacji z centrum powiadomień, gdy urządzenie znajduje się w trybie samolotowym?

+1

Czy nie musisz być podłączony do internetu, aby się wyrejestrować? – DGund

+0

@DGund Byłem pod tym samym błędem, ale w rzeczywistości musisz być online, aby wyrejestrować się, aby powiadomienie powiodło się. Nadal będziesz otrzymywać powiadomienia o niezarejestrowaniu, gdy nie masz połączenia. – user1732255

Odpowiedz

0

Dodaj flagę lub coś podobnego (nazywamy to, co chcesz, jak ShouldRecallUnregister), podczas rozmowy

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

że ustawione na TAK, jeśli nie ma internetu związek i pozostawić ją na NIE, jeśli wyrejestrowanie działa.

przechowywać ją w UserDefaults ([[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];) i sprawdzić jego wartość w applicationDidBecomeActive: na przykład (lub wszędzie tam, gdzie pasuje najlepiej aplikacja).

Jeśli jest TAK, ponownie zadzwoń pod numer [[UIApplication sharedApplication] unregisterForRemoteNotifications];.

+0

W ten sposób otrzymasz dalsze powiadomienia w okresie od wyłączenia airplanemode i aktywacji aplikacji. – ilmiacs

+0

Dzięki za rozwiązanie. unregisterForRemoteNotifications nie ma wywołania zdarzenia do śledzenia, jeśli wyrejestrowanie przebiegło pomyślnie lub nie? Czy istnieje sposób na śledzenie tego? – user1732255

+0

@rdurand to rozwiązanie może nie spełniać moich wymagań, ponieważ nie powinien otrzymywać powiadomień po wylogowaniu użytkownika z aplikacji.W tym rozwiązaniu wyrejestrowanie zostanie zakończone tylko wtedy, gdy użytkownik ponownie uruchomi aplikację lub przeniesie ją na pierwszy plan. Do tego czasu otrzymujemy powiadomienia. Czy jest lepszy sposób? – user1732255

2

Apple steruje zdalnymi powiadomieniami push. Jeśli jesteś offline, logicznie nie możesz go wyłączyć. Kiedy Apple po raz pierwszy zobaczy cię online, a popchnięcia nie zostaną wyłączone, wyśle ​​ci push. Nie ma sposobu, aby zatrzymać system iDevice z pokazywaniem wypychania, które jabłko wysyła do użytkownika, ponieważ nie jest ono w rękach aplikacji.

Jest więc tylko jedna możliwość: Musisz wyłączyć NATYCHMIAST po ponownym uruchomieniu urządzenia. I wciąż jest to kwestia szczęścia, jaki komunikat Apple najpierw otrzymuje, że jesteś online lub czy wyłączasz push. Pojawia się również pytanie, co stanie się z powiadomieniami, które Apple chciał wysłać do urządzenia, gdy był offline. Czy mimo to wyśle ​​je ponownie w trybie online lub odrzuci, gdy najpierw zostanie wyłączone? Nie wiem Musisz wykonać badania.

Twoja jedyna szansa to, czy aplikacja działa w tle, gdy użytkownik wchodzi w tryb online. Musisz uniemożliwić zawieszenie aplikacji (here's, jak to osiągnąć), aby móc odpowiadać na powiadomienia systemowe. Powiadomienie, którego potrzebujesz, to zmiana statusu online, wiem tylko, że istnieje. This resource może być pomocne. Kiedy urządzenie przejdzie do trybu online, powiadomi o tym Twoją aplikację czekającą w tle (nie zawieszoną). Wtedy możesz zareagować, wyrejestrowując natychmiast zdalne polecenia frm.

To najlepsze, co można osiągnąć w tym kierunku. Mam nadzieję że to pomoże.

+0

Awansuj, twoje rozwiązanie wydaje się być uzasadnione. – rdurand

Powiązane problemy