2015-11-13 5 views
6

Я протестировал свое существующее приложение для iOS на новом iPad Pro. И я узнал, что HTTP_USER_AGENT текст UIWebView является ...iPad Pro «HTTP_USER_AGENT» iOS UIWebView

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

Таким образом, веб-сторона программа реагирует так, как будто это устройство iPhone. Как я могу различать iPad Pro и iPhone в своей программе на стороне сервера?

+0

Как вы получаете строку агента пользователя? –

+0

Я нашел веб-представление другого приложения, отправленное http_user_agent как «iPad». Таким образом, эта проблема имеет сторону приложения. Я собираюсь проверить различия между этими двумя приложениями. –

+0

l'L'I в моем php-коде ... echo $ _SERVER ['HTTP_USER_AGENT']; –

ответ

2

Добавив Launch Screen.stoyboard, эта проблема будет решена.

+0

спасибо за ваш вопрос/ответ - у нас такая же проблема с нашим приложением iOS. – heisian

+2

@ Keisuke Uemura Возможно ли добавить экран запуска без его использования? –

0

У меня была такая проблема, и уладила его с использованием WKWebView вместо UIWebView. Эта новая реализация для показа веб-контента является той, которая рекомендована Apple, так как кажется, что UIWebView будет устаревшим.

Одна вещь об этом новом объекте заключается в том, что метод оценки JavaScript является асинхронным. Поэтому, если вы хотите использовать синхронный метод для извлечения userAgent, вы должны создать свою собственную категорию WKWebView, как описано here.

Код должен быть что-то вроде этого

@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 

И взывание совсем то же самое, чем раньше:

WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero]; 
defaultUserAgent = [webView stringByEvaluatingJavaScript:@"navigator.userAgent"]; 
Смежные вопросы