2015-11-13 7 views
6

Przetestowałem moją istniejącą aplikację na iOS na nowym iPadzie Pro. I okazało się, że tekst HTTP_USER_AGENT z UIWebView jest ...iPad Pro "HTTP_USER_AGENT" z iOS UIWebView

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

Tak, strona internetowa programu reagują tak, jakby to urządzenie iPhone. Jak mogę odróżnić iPada Pro od iPhone'a w moim programie po stronie serwera?

+0

Jak się masz ciąg agenta użytkownika? –

+0

Znalazłem widok innej aplikacji wysłany jako http_user_agent jako "iPad". Ten problem dotyczy aplikacji. Sprawdzę różnice między kodami tych dwóch aplikacji. –

+0

do l'L'I w moim kodzie php ... echo $ _SERVER ['HTTP_USER_AGENT']; –

Odpowiedz

2

Po dodaniu Launch Screen.stoyboard ten problem zostanie rozwiązany.

+0

dzięki za pytanie/odpowiedź - mamy ten sam problem z naszą aplikacją na iOS. – heisian

+2

@ Keizuke Uemura Czy można dodać ekran startowy bez jego używania? –

0

Miałem ten sam problem i rozwiązałem go, używając WKWebView zamiast UIWebView. Ta nowa implementacja do wyświetlania treści internetowych jest zalecana przez Apple, ponieważ wydaje się, że UIWebView ma być przestarzałe.

Jedną z cech tego nowego obiektu jest to, że metoda oceny JavaScript jest asynchroniczna. Dlatego, jeśli chcesz użyć metody synchronicznej do pobrania userAgent, powinieneś utworzyć własną kategorię WKWebView zgodnie z wyjaśnieniami here.

Kod powinien mieć coś takiego

@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 

A inwokacja jest to samo, niż wcześniej:

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