簡體   English   中英

應用程序在后台如何檢查互聯網連接,IOS?

[英]How App in background can check for internet connection, IOS?

我的Iphone應用程序有2種模式,在線模式和離線模式。 如果用戶在在線模式下使用應用程序,請求會立即提交給服務器。 如果用戶在離線模式下使用應用程序,我將在本地存儲請求,以便我可以在互聯網可用時上傳它。 我正在使用可達性類來檢查互聯網可用性。 應用程序的可訪問性正常。 我無法實現以下方案。 當用戶在離線模式下工作時我存儲了請求,意味着當用戶通過點擊iPhone中的主頁按鈕在后台推送應用程序時。 一段時間后,用戶將激活他的設備中的WiFi或蜂窩連接。 當用戶啟用互聯網連接時,我的后台應用程序會收到通知,並應開始向服務器提交請求。 我該如何實現這一功能? 許多ios應用程序可能具有相同的此要求。 他們是怎么做的? 任何的想法?

我嘗試了以下步驟來實現這一目標,但沒有成功。我在這里做錯了什么,幫助我。

1)我在applicationDidEnterBackground委托方法中添加了kReachabilityChangedNotification的觀察者。 但我的應用程序無法通過此方法收聽Kreachabiliychagednotification。

2)如果我在applicationdidbecomeActive中添加kReachabilityChangedNotification的觀察者,那么我的應用程序能夠聽取Kreachabiliychagednotification。

當app在后台時,為什么IOS不允許聽Kreachabiliychagednotification?

答案是你不能,除非你的應用程序將具有這些特定用途之一(引用Apple doc):

必須由使用它們的應用程序事先聲明對某些類型的后台執行的支持。 應用程序使用其Info.plist文件聲明對服務的支持。 將UIBackgroundModes鍵添加到Info.plist文件,並將其值設置為包含以下一個或多個字符串的數組:

* audio-該應用程序在后台播放可聽內容。 (此內容包括使用AirPlay播放音頻或視頻內容。)
*位置 - 該應用程序可讓用戶隨時了解其位置,即使它在后台運行也是如此。
* voip-該應用程序使用戶能夠使用Internet連接撥打電話。
*報亭 - 內容 - 該應用程序是一個報亭應用程序,可在后台下載和處理雜志或報紙內容。
* external-accessory-該應用程序與硬件附件配合使用,需要通過外部附件框架定期提供更新。
* bluetooth-central-該應用程序與藍牙配件配合使用,需要通過Core Bluetooth框架定期提供更新。
* bluetooth-peripheral-該應用程序通過Core Bluetooth框架支持外設模式下的藍牙通信。

您只能再次檢查可達性,重新進入前景。

當我在一個項目時,我開始處理相同的情況,但我開始知道默認情況下,在后台狀態應用程序只停留一小段時間,大多數應用程序很快就會進入暫停狀態。 這意味着應用程序在后台但不執行代碼。 因此,您的自定義實施通知不起作用。 必須在應用程序委托方法中在喚醒時重新查詢NetworkReachability:

applicationWillEnterForeground:
applicationDidBecomeActive 

這是我處理這個問題所做的最好的,希望它有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM