如何在react-native中为webView请求设置自定义标头

我希望能够在rails服务器端的ruby上检测到http请求来自我的应用程序中的webView组件。 该应用程序正在使用react-native。 特别是,我想区分来自应用程序的请求和运行在ios设备上的移动safari的请求。

我已经尝试在AppDelegate.m文件中设置以下内容

  NSURL *url = [NSURL URLWithString:@"http://localhost:3000/signin"]; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; [request addValue:@"GolfMentor" forHTTPHeaderField:@"User-Agent"]; [request addValue:@"GolfMentor" forHTTPHeaderField:@"X-MY-CUSTOM-HEADER"]; NSLog(@"%@", [request allHTTPHeaderFields]); 

并且控制台中的输出是

 GolfMentor[63924:12437749] { "User-Agent" = GolfMentor; "X-MY-CUSTOM-HEADER" = GolfMentor; } 

因此,客户标题似乎已设置。 但是,当我在rails应用程序的ruby中查看请求标头时,没有自定义标头的迹象。 在执行react-native应用程序后,看起来我的更改被覆盖了。 那么我应该在哪里以及如何设置自定义标头? 我也有兴趣为该应用程序的Android版本做同样的事情?

尝试将以下行添加到AppDelegate.m以设置自定义用户代理

 NSString *newAgent = @"GolfMentor"; NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 

可以在这里找到更全面的答案和Android的解决方案。

我有点怀疑你能做到这一点。 如果它没有作为prop公开,你可以在React Native提供的WebView组件上设置,那么我认为你不能这样做。

另外,React Native中的WebView组件并不那么棒。 在iOS方面它包装了UIWebView,但是对于iOS 8+,有WkWebView,它更符合标准并且比UIWebView快得多。

http://blog.initlabs.com/post/100113463211/wkwebview-vs-uiwebview

我目前正在开发一个广泛使用webview的应用程序,我们最终编写了适用于iOS和Android的本机组件。 这比听起来容易,特别是如果您已经拥有本机开发经验。 因此,如果你在网页浏览中做了很多事情,并且开箱即用的组件没有提供你想要的东西(并且你想要WkWebView与UIWebView的额外好处),我会考虑自己动手。