使用带有react-native的WebView设置用户代理

我想修改WebView中的用户代理字符串,以便在服务器端我可以检测到请求来自我的react-native应用程序。 我想使用WebView中的源prop进行此操作。

我如何为IOS和Android执行此操作?

您只需将其设置为WebView中的prop即可。

我正在做以下事情:

在iOS上(我在AppDelegate.m中设置userAgent)

NSString *deviceType = [UIDevice currentDevice].model; UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSString *oldAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; NSString *newAgent = [oldAgent stringByAppendingString:@" MYAPPNAME - iOS - "]; newAgent = [newAgent stringByAppendingString:deviceType]; NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 

在Android上(我在我的WebView中设置了JS中的userAgent):

  

现在我总是有一个像“DeviceInfo – MYAPPNAME – Platform”这样的userAgent。 我们正在像你一样做它,它的工作方式如何。

用于android和ios的windows phone用户代理

安卓:

 mWebView.getSettings().setUserAgentString("Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)"); 

IOS:

 [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObject:@"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)" forkey:@"UserAgent"]]; 

这不是答案,而是一种解决方法。

我意识到我想要做的是确定我的ruby on rails服务器上的请求是来自移动safari还是来自我的react-native应用程序的webView。 为了解决这个问题,我刚刚安装了browser gem,然后做了

 browser = Browser.new(request.user_agent) from_app = browser.platform.ios_webview? 

如果有人能够对我原来的问题给出明确答案,我会选择答案而不是我的答案。

对于Android,您只需要设置userAgent属性,例如:

  

对于iOS,您需要在AppDelegate.m实现中的方法didFinishLaunchingWithOptions (在行return YES; )中添加以下代码:

 NSString *userAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"; NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:userAgent, @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

这是一个糟糕的主意。 只需使用自定义标题:

 X-MY-CUSTOM-HEADER = MyAppName.