Obwohl meine App ohne Internetverbindung verwendet werden kann, kann sie Daten mit einem Webserver austauschen (um einige Benutzerstatistiken anzuzeigen). Also mache ich Werbung für die App als "benötigt keine Internetverbindung". Einige Benutzer haben daraufhin Mobilfunkdaten für meine App deaktiviert, was völlig in Ordnung sein sollte. Wenn meine App jedoch versucht, Daten auszutauschen, werden diese Benutzer mit dem Hinweis "Mobilfunkdaten sind deaktiviert für [Anwendungsname]" abgehört. Dialog.
Das ist ein Ärgernis für sie, und ich möchte diese Dialoge verhindern und einfach den ganzen Datenaustausch auslassen.
Es gibt Apples Erreichbarkeits-Beispielcode .
Aber obwohl ich WiFi für das gesamte Gerät und die Mobilfunkdaten für die App ausgeschaltet habe, bestätigt Erreichbarkeit eine positive Internetverbindung. Um genauer zu sein, berichtet es
%Vor%Egal, ob ich Mobilfunkdaten aktiviert habe oder nicht. Wenn Mobilfunkdaten deaktiviert sind, ist natürlich keine Internetverbindung verfügbar, so dass der Datenaustausch fehlschlägt. Aber dem Benutzer wird sowieso der Mobilfunkdaten-Dialog angezeigt.
Gibt es eine Möglichkeit festzustellen, ob eine Internetverbindung unter iOS 7 und iOS 8 verfügbar ist, unter Berücksichtigung der Mobilfunkdateneinstellungen für eine bestimmte App - ohne den Benutzer jedes Mal erneut mit dem Mobilfunkdaten-Dialog abzufragen?
Meine App wird derzeit ohne Einstellungsfenster ausgeliefert. Daher möchte ich die Einrichtung eines (zweiten, In-App-) Schalters "keine Mobilfunkdaten verwenden" vermeiden. Außerdem möchte ich den Datenaustausch nicht auf eine WiFi-Verbindung beschränken, da es nur 2 KB Daten pro Sitzung gibt, was für die meisten Benutzer keine große Sache ist.
Ich denke, der einzige unterstützte Weg in iOS8 besteht darin, einen Ping an einen bekannten Server zu senden und den Benutzer einige Male mit dem Alert-Panel zu belästigen. Auf iOS8 zeigt Apple das Panel nur zweimal an und überspringt es dann, selbst wenn die App neu gestartet wird, vielleicht wird es einen Tag später wieder erscheinen. (Dies sind wirklich schlechte Nachrichten für werbefinanzierte Apps.)
Apple sagt ( Ссылка ):
Ein anderer Entwickler hat sich bei DTS eingeschrieben und somit hatte ich die Chance dazu erforsche dies eingehend. Leider sind die Nachrichten so, wie ich es erwartet habe: Es gibt keinen unterstützten Weg, um zu erkennen, dass sich Ihre App in diesem Zustand befindet. Es gibt auch keine Möglichkeit, eine Netzwerkverbindung "keine Benutzerinteraktion" zu erstellen. das heißt, fordern Sie an, dass die Verbindung fehlschlägt, anstatt UI wie zu präsentieren das.
Die folgenden Artikel schlagen vor, wie Sie ping verwenden können:
Versuchen Sie es mit diesem git
-Projekt.
Wie Sie installieren können Sie in der Readme auf git
sehen.
Ich habe auch dispatch_once
verwendet, um sicherzustellen, dass die Erreichbarkeit nur einmal initialisiert wird. Dieser dispatch
-Typ ist manchmal sehr nützlich!
Variable in der Klasse definieren
%Vor%Initialisiere die Variable
%Vor%Tags und Links ios cocoa-touch foundation