我的基於套接字的聊天應用程序有點麻煩。當用戶從後臺關閉應用程序時(通過按兩次主屏幕按鈕並關閉它)我的服務器不知道用戶實際上關閉了應用程序,因此它會繼續向該用戶發送推送通知。iOS發現用戶什麼時候從後臺關閉應用程序?
如何檢測用戶實際上是否從背景關閉應用程序?
我的服務器邏輯是這樣工作的: 當用戶將應用程序置於後臺時,我的服務器通過套接字發送推送通知而不是消息。如果應用程序在前臺,我的服務器通過套接字發送消息。
其他人如何處理此任何想法?
我的基於套接字的聊天應用程序有點麻煩。當用戶從後臺關閉應用程序時(通過按兩次主屏幕按鈕並關閉它)我的服務器不知道用戶實際上關閉了應用程序,因此它會繼續向該用戶發送推送通知。iOS發現用戶什麼時候從後臺關閉應用程序?
如何檢測用戶實際上是否從背景關閉應用程序?
我的服務器邏輯是這樣工作的: 當用戶將應用程序置於後臺時,我的服務器通過套接字發送推送通知而不是消息。如果應用程序在前臺,我的服務器通過套接字發送消息。
其他人如何處理此任何想法?
老答案
- (void)applicationWillTerminate:(UIApplication *)application
當用戶通過按home鍵兩次,關閉它關閉後臺應用程序沒有被調用。
我目前正在處理一個應用程序,我正在處理類似(雖然不是相同的)情況...爲了檢查用戶是否可用/有網絡連接,我發佈到服務器每隔一段時間,並只允許我的服務器發送推送通知,如果它最近從用戶處收到帖子。同樣,也許你可以讓用戶的設備發佈到服務器,以確認在每次推送通知後收到消息,然後停止發送通知,如果用戶的設備停止響應?
編輯:
新建答案
我可能是錯的,但是......這似乎已經變了!看起來我們有一個蘋果天使在看我們的肩膀!現在applicationWillTerminate實際上是在我的應用程序以這種方式關閉時調用的。
簡短的回答是否定的,這是不可能的。一旦你在後臺,系統可以在任何時候終止你,沒有任何進一步的警告。
您需要使用applicationDidEnterBackground消息(或UIApplicationDidEnterBackgroundNotification通知)告訴服務器關閉套接字連接並切換到推送通知。無論如何,這就是你想要做的事情,因爲你的應用程序不能在用戶進入後臺時發出信號。
use [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotificationForCitySelectedWithNotification :) name:kNotificationCitySelected object:nil]; – NullData