2012-10-09 55 views
5

我的應用程序中的一項功能是在用戶從應用程序註銷時從遠程推送註銷中註銷用戶。當設備處於飛機(離線)模式時用戶註銷時,是否有辦法從推送通知中取消註冊應用程序?IOS unregisterForRemoteNotifications在飛行模式下不起作用

我試過這段代碼,但當我回來時仍然收到通知, [[UIApplication sharedApplication] unregisterForRemoteNotifications];

當設備處於飛行模式時,有人能幫助您如何從通知中心移除應用程序嗎?

+1

你不需要連接到互聯網取消註冊嗎? – DGund

+0

@DGund我同樣存在這樣的誤解,但實際上您需要聯機才能成功註銷通知。如果您在未連接的情況下取消註冊,您仍會收到通知。 – user1732255

回答

0

添加標記或類似的東西(叫它任何你想要的,喜歡ShouldRecallUnregister),當你調用

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

,你如果沒有互聯網聯接設置爲YES,並把它在否,如果取消註冊的作品。

它儲存在UserDefaults[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];),並在applicationDidBecomeActive:檢查它的值,例如(或者是任何一個最適合你的應用程序)。

如果是,請再次致電[[UIApplication sharedApplication] unregisterForRemoteNotifications];

+0

像這樣,您可以在飛機模式關閉和應用程序激活的時間範圍內獲得更多通知。 – ilmiacs

+0

感謝您的解決方案。如果註銷成功或不成功,unregisterForRemoteNotifications沒有事件回調跟蹤。有沒有辦法跟蹤它? – user1732255

+0

@ rdurand此解決方案可能不符合我的要求,因爲我不應該收到通知,一旦用戶已經失去了應用程序。在此解決方案中,只有當用戶重新啓動或將應用程序置於前臺時,取消註冊纔會完成。直到那時我們仍然收到通知。有沒有更好的方法? – user1732255

2

Apple控制遠程推送通知。如果您處於離線狀態,則邏輯上無法禁用它。當蘋果公司第一次看到你在線並推送沒有被禁用時,它會發送給你。沒有辦法阻止iDevice顯示蘋果發送給用戶的推送,因爲它不在應用程序手中。

所以只有一種可能性:在設備再次聯機後必須禁用IMMEDIATELY。而且這仍然是一個運氣問題,Apple首先獲得什麼信息,您是否在線或您禁用推送。另外還有一個問題,蘋果想要在設備脫機時發送給設備的通知會發生什麼。無論如何在線時會重新發送它們,還是在首先禁用時將它們丟棄?我不知道。你需要做研究。

所以你唯一的機會就是如果你的應用程序在用戶上線時在後臺。您需要阻止您的應用被暫停(here's如何實現該目的),以便能夠響應系統通知。您需要的通知是在線狀態更改的通知,我只知道它存在。 This resource可能會有幫助。當設備上線時,它會通知您的應用在後臺等待(未暫停)。然後,您可以立即註銷frm遠程推送作出反應。

這是你在這方面可能達到的最好結果。希望這可以幫助。

+0

Upvote,您的解決方案似乎合法。 – rdurand

相關問題