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

时间:2016-04-22 05:28:31

标签: android ios ruby-on-rails webview react-native

我希望能够在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 app上的ruby中查看请求标头时,没有自定义标头的迹象。在执行react-native应用程序时,看起来我的更改被覆盖了。那么我应该在哪里以及如何设置自定义标头?我也有兴趣为该应用程序的Android版本做同样的事情?

2 个答案:

答案 0 :(得分:3)

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

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

可以找到更全面的答案和Android解决方案here

答案 1 :(得分:0)

我有点怀疑你能做到这一点。如果它没有作为支持公开,你可以在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的额外好处),我会考虑滚动你自己。