標籤:
我的需求是:使用者使用我的瀏覽器瀏覽網頁,伺服器可以得到我的瀏覽器名稱和版本號碼,站長工具能查看到用戶端來源。OK,解決思路就是修改系統預設的使用者代理程式UserAgent,這是沒差的。
曾經做過的App也有這樣的需求,思路是在UIWebView 的 Request 的 Header 中設定 UserAgent,最後證實這條思路是行不通的,後來由於時間問題,這個功能就放棄了。如今有個App又有這個需求,看到UC瀏覽器設定中有個UA設定,讓我很是羨慕,果然願意解決問題的人總是幸運的,再網上找到相關文章。瞭解大概兩種思路,第一種是使用私人API,第二種則是iOS SDK內的。第一種這裡就放棄不講了,只能上第二種實現思路。
// 擷取 iOS 預設的 UserAgent,可以很巧妙地建立一個空的UIWebView來擷取:
NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
// 擷取App名稱,我的App有本地化支援,所以是如下的寫法
NSString *appName = NSLocalizedStringFromTable(@"CFBundleDisplayName", @"InfoPlist", nil);
// 如果不需要本地化的App名稱,可以使用下面這句
// NSString * appName = [[NSBundle mainBundle] infoDictionary][@"CFBundleDisplayName"];
NSString *version = [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"];
NSString *customUserAgent = [userAgent stringByAppendingFormat:@" %@/%@", appName, version];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}];
// ---------- 隨便寫個測試代碼,記得設定 delegate哦,這隻是測試代碼
UIWebView *webView = [[UIWebView alloc] init];
webView.delegate = self;
[webView loadRequest:[NSURLRequest requestWithURL:[NSURLURLWithString:@"http://www.baidu.com/"]]];
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"UserAgent = %@", [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]);
}
Xcode 5.1.1 iOS 7.1 模擬器下得到的結果是:
Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) 中華瀏覽器/1.2.2
iOS UIWebView 自訂 UserAgent