簡體   English   中英

如何判斷用戶是否為我的應用關閉了蜂窩數據?

[英]How to tell if the user turned off cellular data for my app?

盡管我的應用無需連接互聯網即可使用,但它可能會與網絡服務器交換數據(以顯示一些用戶統計信息)。 因此,我將該應用程序廣告宣傳為“不需要互聯網連接”。 隨后,一些用戶為我的應用關閉了蜂窩數據,這應該是完全可以的。 但是,當我的應用程序嘗試交換數據時,這些用戶會迷惑於“ [應用程序名稱]的蜂窩數據已關閉”。 對話。

這讓他們很煩惱,我想防止出現這些對話框,而只是跳過整個數據交換。

Apple的可達性示例代碼

但是,盡管我關閉了整個設備的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.

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