前面大概介紹了react-native的運行helloword級別的入門,因此以後簡單的東西就不寫了,畢竟官網上都可以找到。javascript
reactnative官網:https://facebook.github.io/react-native/docs/getting-started.htmlhtml
reactnative中文網:http://reactnative.cn/docs/0.25/getting-started.htmljava
以後我會把工做中遇到的一些react-native的深坑分享一下。react
正題===========================git
客戶端cookies的獲取就是一個大坑。github
1.使用三方web
研究ReactNative的源碼發現,框架中並無實現iOS的NSHTTPCookieStorage的api,因此搜遍百度谷歌和bing,最終找到了一個哥們寫的第三方cookies工具:react-native
https://github.com/joeferraro/react-native-cookiesapi
這裏須要一提的是,我須要取得cookie不只是dictionary形式的cookies,而是用於http請求的cookiesHeader(比較特殊),其格式是string,在OC中取得的方式是:cookie
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
NSDictionary *header = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
但這一塊原做者的框架中貌似存在必定的問題,因此我寫了一個pull request,具體能夠訪問我fork的項目:
https://github.com/rayshen/react-native-cookies
(若是你須要取得的Cookie是用來解析取值或是保存從新加入的,用get("url",res)或者getAll()函數取得的比較適合)
2.獲取當前url
這就須要結合webview控件來進行操做了。
首先咱們須要肯定當前的url,當前的url能夠從webview控件綁定的事件onNavigationStateChange去取得:
onNavigationStateChange={this.onNavigationStateChange.bind(this)}
onNavigationStateChange(navState) { console.log(navState.url); this.curUrl = navState.url; }
3.取得url的cookie header:
CookieManager.getHeader(this.curUrl, (err, res) => { console.log('Got cookies for url: ' + res.Cookie); })
4.取得url的全部cookies
CookieManager.get('http://example.com', (err, res) => { console.log(res); })
5.取得當前全部的cookies
CookieManager.getAll((err, res) => { console.log('cookies!'); console.log(err); console.log(res); });
須要注意的是,getAll()和set()都是iOS Only的函數。