2009-09-21 10 views
16

Ho un'app che visualizzerà pagine Web all'interno di UIWebView. Le pagine visualizzate possono contenere collegamenti ad altre app per iPhone sull'App Store.Aprire in modo affidabile i collegamenti all'App Store da una UIWebView

In un normale browser su un computer desktop, facendo clic su questi collegamenti all'App Store, sono necessari diversi reindirizzamenti di URL e alla fine si apre l'apertura di iTunes e si accede alla pagina per tale app.

C'è un modo per garantire che quando si fa clic su un collegamento all'App Store all'interno di UIWebView, l'app App Store sull'iPhone si apra e mostri l'app?

Che Ho visto nel mio test è che ci sono diversi tipi di collegamenti che possono provocare una pagina di App Store, quelli che sono:

  • Phobos link - phobos.apple.com/etc etc ecc
  • itunes.com/app/appname links links
  • rinvio/affiliazione
  • qualsiasi che io non conosco

Quando apro un y di questi collegamenti in un browser desktop funzioneranno e alla fine apriranno iTunes. Quando apro uno di questi link all'interno del iPhone UIWebView passa attraverso una serie di reindirizzamenti e alla fine una delle due cose accadrà:

  • i reindirizzamenti non funzionano correttamente e finire con una pagina di fatto non riesco a caricare il metodo chiamata
  • I reindirizzamenti funzionano e l'app iTunes viene aperta, viene eseguita una ricerca per il nome dell'app, quindi viene visualizzato un messaggio da iTunes che spiega che non è possibile connettersi al negozio.

L'unica volta in cui è stato possibile aprire l'app App Store è utilizzando un collegamento diretto di iTunes all'app senza riferimenti o reindirizzamenti.

Ovviamente per i link di riferimento o di affiliazione, non voglio rimuovere l'ID referente o l'ID affiliato. Non dovrei privarli di un referral se era il loro link cliccato.

Quindi qualsiasi aiuto sarebbe molto apprezzato.

Grazie.

risposta

13

ho trovato questo Technical Q&A da Apple che risponde alla mia domanda:

La sostanza di base è questa: i collegamenti

phobos.apple.com costruiti in maniera adeguata reindirizza direttamente alla applicazione App Store. i link itunes.apple.com devono essere convertiti in collegamenti phobos.I link di riferimento/affiliazione devono essere attraversati utilizzando NSURLConnection e l'URL finale risultante sarà un collegamento phobos che può essere utilizzato.

Grazie per il vostro aiuto ragazzi.

3

Durante i miei test, ho ottenuto solo i collegamenti phobos.apple.com per il reindirizzamento automatico all'AppStore (senza alcun reindirizzamento Safari).

1

Se non hai ancora provato questo dispositivo reale, posso dirti che l'iPhone Simulator ha problemi con il reindirizzamento di questi collegamenti all'App Store (probabilmente perché il Simulatore non ce l'ha). L'esecuzione dell'applicazione sul dispositivo produrrà comportamenti diversi in quest'area specifica, quindi assicurati di testarla lì.

+0

Non ho mai provato nel simulatore ... nessun punto davvero. Test sempre sul dispositivo. – Jasarien

1

Ho cercato di fare la stessa cosa. Volevo inserire un collegamento alla versione completa della mia app nella versione gratuita. Ho appena confermato che il metodo utilizzato nel documento funziona. SOLO sul dispositivo reale. Non fidarti mai del simulatore!

Aggiungere la roba in the document, e lo chiamano in questo modo:

NSString *testLink = @"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&mt=8"; 

self.iTunesLink = [NSURL URLWithString:testLink]; 

[self openReferralURL:iTunesLink]; 
2

aggiunta alla developer documentation, penso che dovrebbero avere il caso in cui il redirectResponse è nil. Mi ci è voluto un po 'di tempo per capire cosa c'era che non andava.

// Save the most recent URL in case multiple redirects occur 
// "iTunesURL" is an NSURL property in your class declaration 
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response { 
    if (response) { 
     self.iTunesURL = [response URL]; 
    } 
    else { 
     self.iTunesURL = [request URL]; 
    } 

    return request; 
} 
Problemi correlati