2015-11-13 9 views
6

Ho testato la mia app iOS esistente sul nuovo iPad Pro. E ho scoperto che il testo HTTP_USER_AGENT di UIWebView è ...iPad Pro "HTTP_USER_AGENT" di iOS UIWebView

Mozilla/5.0 (iPhone; CPU iPhone OS9_1 like Mac OS X) AppleWebKit/601.1.46(KHTML, like Gecko)Mobile/13B143 

Così, il programma lato web reagiscono come se questo dispositivo è iPhone. Come posso distinguere tra iPad Pro e iPhone nel mio programma lato server?

+0

Come va la stringa user agent? –

+0

Ho trovato la webview di un'altra app inviata http_user_agent come "iPad". Quindi, questo problema riguarda il lato app. Vado a verificare le differenze tra il codice di queste due app. –

+0

to l'L'I nel mio codice php ... echo $ _SERVER ['HTTP_USER_AGENT']; –

risposta

2

Aggiungendo Launch Screen.stoyboard, questo problema verrà risolto.

+0

grazie per la tua domanda/risposta: stiamo riscontrando lo stesso problema con la nostra app per iOS. – heisian

+2

@Keisuke Uemura È possibile aggiungere la schermata di avvio senza usarla? –

0

Ho avuto lo stesso problema e l'ho risolto utilizzando WKWebView anziché UIWebView. Questa nuova implementazione per la visualizzazione di contenuti Web è quella consigliata da Apple, in quanto sembra che UIWebView sia deprecato.

Una cosa su questo nuovo oggetto è che il metodo per valutare un JavaScript è asincrono. Pertanto, se si desidera utilizzare un metodo sincrono per recuperare l'utenteAgent, è necessario creare la propria categoria di WKWebView come spiegato here.

Il codice dovrebbe essere qualcosa di simile

@interface WKWebView(SynchronousEvaluateJavaScript) 
- (NSString *)stringByEvaluatingJavaScript:(NSString *)script; 
@end 

@implementation WKWebView(SynchronousEvaluateJavaScript) 

- (NSString *)stringByEvaluatingJavaScript:(NSString *)script 
{ 
    __block NSString *resultString = nil; 

    [self evaluateJavaScript:script completionHandler:^(id result, NSError *error) { 
     if (error == nil) { 
      if (result != nil) { 
       resultString = [NSString stringWithFormat:@"%@", result]; 
      } 
     } else { 
      NSLog(@"evaluateJavaScript error : %@", error.localizedDescription); 
     } 
    }]; 

    while (resultString == nil) 
    { 
     [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 
    } 

    return resultString; 
} 

@end 

E l'invocazione è proprio la stessa di prima:

WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero]; 
defaultUserAgent = [webView stringByEvaluatingJavaScript:@"navigator.userAgent"];