[英]How to tell if the user turned off cellular data for my app?
盡管我的應用無需連接互聯網即可使用,但它可能會與網絡服務器交換數據(以顯示一些用戶統計信息)。 因此,我將該應用程序廣告宣傳為“不需要互聯網連接”。 隨后,一些用戶為我的應用關閉了蜂窩數據,這應該是完全可以的。 但是,當我的應用程序嘗試交換數據時,這些用戶會迷惑於“ [應用程序名稱]的蜂窩數據已關閉”。 對話。
這讓他們很煩惱,我想防止出現這些對話框,而只是跳過整個數據交換。
但是,盡管我關閉了整個設備的WiFi和該應用程序的蜂窩數據,但Reachability確認了良好的互聯網連接。 更具體地說,它報告
Reachability Flag Status: WR t------ networkStatusForFlags
無論我是否激活了蜂窩數據。 當然,當蜂窩數據關閉時,實際上沒有Internet連接可用,因此數據交換失敗。 但是無論如何都會向用戶顯示蜂窩數據對話框。
考慮到特定應用程序的蜂窩數據設置,是否有任何方法可以檢測iOS 7和iOS 8上的互聯網連接-無需每次都通過蜂窩數據對話框再次困擾用戶?
我的應用當前沒有任何設置面板,因此,我想避免設置一個“第二個應用內”開關“不要使用移動數據”。 另外,我不想將數據交換限制為WiFi連接,因為每個會話僅2 KB的數據,對於大多數用戶而言,這並不是一件大事。
我認為iOS8中唯一受支持的方法是將Ping發送到已知的服務器,並用警報面板幾次對用戶進行調試。 在iOS8上,Apple僅顯示兩次該面板,然后即使重新啟動該應用程序也會跳過該面板,也許一天后它會再次出現。 (對於廣告支持的應用程序,這確實是個壞消息。)
蘋果說( https://devforums.apple.com/message/1059332#1059332 ):
另一個開發人員寫信給DTS,因此我有機會對此進行了深入研究。 遺憾的是,消息出乎我的意料:沒有支持的方法來檢測您的應用程序處於這種狀態。 也沒有辦法建立“無用戶交互”的網絡連接,即請求連接失敗,而不是像這樣顯示用戶界面。
以下文章建議使用ping的方法:
http://www.splinter.com.au/how-to-ping-a-server-in-objective-c-iphone/
http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/
嘗試使用此git
項目。
如何安裝,您可以在git
的自述文件中看到。 我還使用dispatch_once
來確保可到達性僅被初始化一次。 這種dispatch
類型有時非常有用!
在類中定義變量
BOOL _online = NO;
初始化變量
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
Reachability *reach =
[Reachability reachabilityWithHostname:gameApiHost];
reach.reachableBlock = ^(Reachability*reach) {
NSLog(@"REACHABLE!"); _online = YES;
};
reach.unreachableBlock = ^(Reachability*reach) {
NSLog(@"UNREACHABLE!"); _online = NO;
};
[reach startNotifier];
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.