Kontrola přístupu na internet v Objective C

hlasů
15

Pracoval jsem přes Stanford iPhone Kódování kurz a momentálně hákování do Twitter API. Co bych chtěl udělat, je přesně zvládnout dvě chybové stavy: jeden pro když uživatelské jméno je neplatné, a jiný pro případ, kdy zařízení není v současné době připojen k internetu. Bohužel, jak to stojí, to nejlepší, co může domnívat, je to, zda je či není návratu z API je nula, nebo ne - což je případ pro obě podmínky.

To, co jsem hledal je linka nebo dva kód, který můžete zkontrolovat na spojení před jakoukoli načtení vzdálených dat. Mohl bych prosít přes dokumentaci Apple, ale jsem si: Proč ne dát na otázku váma kvůli mně a možná i to ostatní?

Doplňující informace: Použití Objective-C a iPhone SDK XCode.

Položena 25/01/2009 v 16:53
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
30

Podívejte se na ukázkový kód Apple. Projekt Dosažitelnost ukazuje, jak rozpoznat připojení.

http://developer.apple.com/iphone/library/samplecode/Reachability/index.html

Odpovězeno 25/01/2009 v 17:35
zdroj uživatelem

hlasů
9

Tento kód funguje, ale ne vždy vytvořit požadovaný výsledek.

Způsob, jakým TCP stack na iPhone funguje, je velmi odlišné od toho, co by se dalo očekávat. S „dosažitelnosti“ kódu, někdy bude připojení k síti k dispozici, ale nebude spolehlivě detekovat. Nicméně, zahájení MobileSafari pak reattempting ověřit dostupnost připojení „dosažitelnost“ kód bude mít za následek správný výsledek.

Tak, že jsem našel nejúčinnější při určování připojení k síti je spustit kontrolu NSURLConnection když se aplikace načte, v samostatném vlákně. -Li volat do URL, které znáte vrátí něco podobného (tj HTML souboru na vašem serveru, nebo tak něco) „ano“. Pak zkontrolujte, zda vrácený výsledek je stejný jako statický text. Tímto způsobem, víte, že NSURLConnection stack se natahuje správně, na rozdíl od „dosažitelnost“ kódem, který není úplně fungovat konzistentně.

Odpovězeno 10/05/2009 v 05:45
zdroj uživatelem

hlasů
9

Budete muset přečíst v chybových kódů a reagovat, jak nejlépe umíte. Měl jsem nějaké zkušenosti s tímto v podstatě to může záviset na tom, jaké služby jste interakci s, ale s Delicious.com dostanu chybu -1012 za špatné uživatele / passwd, který, pokud ji vyhledá je

NSURLErrorUserCancelledAuthentication =     -1012,

i když jasně, že formulace je zavádějící, když mohu trvale replikovat uvedení ve špatném uživatele / passwd a dostat tento kód chyby. Technicky iPhone se nikdy není připojen k internetu, pokud jste v nějakém podivném regionu, který má problémy s datovým připojením. Vidím, že i tam je chybový kód

NSURLErrorNotConnectedToInternet =      -1009,

Chtěl bych projít NSURLError.h (a existuje více takhle)

NSURLErrorUnsupportedURL =          -1002,
NSURLErrorCannotFindHost =          -1003,
NSURLErrorCannotConnectToHost =         -1004,
NSURLErrorNetworkConnectionLost =       -1005,

atd...

vše, co potřebujete udělat, je získat odkaz na objekt NSError jste prošel v roce a zjistit, že je chybový kód jako tak

//NSError *returnedError

if([returnedError code] == kERROR_CODE_BAD_USERNAME_OR_PASSWORD)

konstanta je něco, co jsem je definováno v mém zdrojový kód, který je v podstatě -1012

Odpovězeno 25/01/2009 v 17:31
zdroj uživatelem

hlasů
8

to funguje pro mě a je převzat z jablečného seismická xml projektu:

- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
        checkNetwork = NO;

        Boolean success;    
        const char *host_name = "twitter.com"; // your data source host name

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}
Odpovězeno 26/03/2009 v 16:18
zdroj uživatelem

hlasů
3

dosažitelnost je samostatná třída pomocí můžete přistupovat kód

   Reachability *curReach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus)
{
    case NotReachable:
    {
        UIAlertView *connectionAlert = [[UIAlertView alloc] init];
        [connectionAlert setTitle:@"Error"];
        [connectionAlert setMessage:@"Please check your network connection."];
        [connectionAlert setDelegate:self];
        [connectionAlert setTag:1];
        [connectionAlert addButtonWithTitle:@"Back"];
        [connectionAlert show];

        break;
    }
    case ReachableViaWWAN:
    {


    }
    case ReachableViaWiFi:
    {
    }
}
Odpovězeno 20/08/2013 v 06:40
zdroj uživatelem

hlasů
2
-(BOOL)returnInternetConnectionStatus{
    ReachabilityLattest *reach = [ReachabilityLattest reachabilityForInternetConnection];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if ((internetStatus != NotReachable)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
Odpovězeno 14/08/2012 v 07:40
zdroj uživatelem

hlasů
2

Při použití Apple dosažitelnost mějte na paměti, že se můžete ocitnout je připojen přes WWAN (ReachableViaWWAN) nebo Wi-Fi (ReachableViaWiFi), aniž by byl připojen k internetu i při pokusu o dosažení určitého hostitele, jako je google.com nebo apple.com (možná mezipaměti problém). Skončil jsem volá mé vlastní server a dostat se zpátky číslici - to nejlepší řešení v mém případě nejméně.

Odpovězeno 18/05/2011 v 11:40
zdroj uživatelem

hlasů
2

Jaký je váš aktuální připojení kód vypadat? Pokud používáte NSURLConnection +sendSynchronousRequest:returningResponse:error:, pak stačí předat adresu proměnné NSError a zkontrolujte, zda poté; s connectionWithRequest:delegate:, měli byste implementovat -connection:didFailWithError:do delegáta.

Odpovězeno 25/01/2009 v 16:59
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more