Domanda

Sto sviluppando un'applicazione per iPhone in cui sto recuperando dati da un servizio Web attualmente situato su un server locale nella LAN.

Ora sto recuperando i miei dati situati su un server locale con un URL simile a questo:

http: \ 192.168.0.150 \ servizio \ service.asmx \ dataFetchingMethod

Ma in futuro se il mio URL cambia, vale a dire server qualcosa del genere:

http: \ www.anotherDomain.com \ servizio \ service.asmx \ dataFetchingMethod

e

http: \ www.anotherURL.com \ servizio \ service.asmx \ dataFetchingMethod

allora come posso cambiarlo dinamicamente?

Attualmente ho codificato l'URL nell'applicazione.

È stato utile?

Soluzione

Le preferenze dell'applicazione sono fatte per questo:

- (BOOL) getDataFromWebserver
{
    NSString *url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"];

    if(url == nil)
    {
        [self setDefaultPrefs];
        url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"];
    }
    [self fetchData:url];//to implement
}

- (void)setDefaultPrefs
{
    NSDictionary *appPrefs = [NSDictionary dictionaryWithObjectsAndKeys:
                                   @"hardCodedUrl", @"dataUrl", nil];

    [[NSUserDefaults standardUserDefaults] registerDefaults:appPrefs];
    [[NSUserDefaults standardUserDefaults] synchronize];        
}

Leggi di più

Altri suggerimenti

Dovresti scrivere una classe che legge le proprietà di un file (come un plist).

In questo modo ogni volta che l'app viene eseguita, leggerà la sua configurazione dal plist ed effettuerà le chiamate all'URL del servizio specificato. Questo può essere modificato senza ricompilare l'app.

Dovrai connetterti a un tipo di risorsa che non cambia mai o cambia molto raramente. Vedo un paio di approcci diversi.


Approccio proxy

Potresti configurare un server principale ( http://masterurl.com/ ) che inoltra la tua richiesta a un altro server. L'idea qui è che il server principale non cambia mai, ma la macchina a cui viene inoltrata potrebbe cambiare in qualsiasi momento. Ad esempio:

Supponendo che la tua app per iPhone si colleghi a http://masterurl.com/ :

  1. Tutte le richieste a http://masterurl.com/ sono delegati a http://someotherurl.com/ .

  2. Ad un certo punto in futuro, tu è necessario sostituire http://someotherurl.com/ con http://snazzynewurl.com/ .

  3. Ora puoi semplicemente cambiare http://masterurl.com/ per eseguire il proxy in http://snazzynewurl.com/ .

All'utente dell'applicazione non è cambiato nulla e non è necessario aggiornare l'app e inviarla nuovamente per la revisione.


Approccio al file di posizione

È possibile ottenere la posizione da un file, ad esempio un file txt o xml.

Supponendo che il tuo file risieda su http://someurl.com/location.txt e i contenuti sono semplici:

inside location.txt:

http://someotherbaseurl.com/

La tua app dovrebbe quindi leggere in questo file di testo e utilizzare http://someotherbaseurl.com/ come base URL per il resto della tua app. Ora, se devi apportare una modifica all'URL, puoi semplicemente aggiornare il file di testo.

Se stai adottando l'approccio del file di posizione, ti consiglio di ospitare il file utilizzando Amazon S3 o Rackspace Cloud Files in modo che il file di testo sia disponibile su un URL sulla loro rete di consegna dei contenuti.

Sono sicuro che ci sono altri modi per affrontarlo. In entrambi i casi avrai bisogno di un URL principale che non cambi mai o raramente. Altrimenti ti imbatterai in una situazione in cui dovrai ricompilare e inviare nuovamente la tua app.

Non è esattamente questo il DNS? Specifichi un singolo nome di dominio, che reindirizzi dove preferisci ... non è di grande aiuto nel debug prima di aver impostato il dominio, ma installa subito qualcosa e reindirizza dove preferisci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top