2015-11-13 11 views
6

新しいiPad Proで自分の既存のiOSアプリをテストしました。このデバイスはiPhoneであるかのように、私はiOS UIWebViewのiPad Pro「HTTP_USER_AGENT」

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

...のUIWebViewのHTTP_USER_AGENTのテキストであることが判明、ウェブ側プログラムが反応します。サーバー側のプログラムでiPad ProとiPhoneを区別するにはどうすればよいですか?

+0

どのようにユーザーエージェント文字列を取得していますか? –

+0

別のアプリのwebviewがhttp_user_agentを「iPad」として送信しました。だから、この問題はアプリ側の問題です。これらの2つのアプリケーションのコードの違いを確認します。 –

+0

私のPHPコードではl'L'I ... echo $ _SERVER ['HTTP_USER_AGENT']; –

答えて

2

Launch Screen.stoyboardを追加することで、この問題は解決されます。

+0

あなたの質問/回答に感謝します。私たちのiOSアプリでも同じ問題が発生しています。 – heisian

+2

@上村恵介起動画面を使用せずに追加できますか? –

0

私は同じ問題があり、の代わりにWKWebViewを使用して解決しました。 Webコンテンツを表示するためのこの新しい実装は、Appleで推奨されているものです。UIWebViewは廃止予定になっているようです。

この新しいオブジェクトに関する1つの点は、JavaScriptを評価する方法が非同期であることです。したがって、同期メソッドを使用してuserAgentをフェッチする場合は、hereのようにWKWebViewの独自のカテゴリを作成する必要があります。

コードは、この

@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"]; 
関連する問題