Một cách đơn giản để xác định tác nhân người dùng trong iOS là để có được nó trực tiếp từ một UIWebView sử dụng câu trả lời chấp nhận this SO post .Nhưng cách này có hai nhược điểm:
1, phân bổ đầu tiên UIWebView của thể mất quá nhiều thời gian trong việc khởi tạo ngữ cảnh webview.
2 、 mã phải được thực thi trong chuỗi chính. Điều này có thể mắc kẹt chủ đề chính.
Nếu bạn biết các thủ thuật về cách sử dụng các phương pháp riêng tư trong khi tránh từ chối Đánh giá trên App Store.
Bạn có thể thử đoạn mã sau:
#define CALL_PRIVATE_INSTANCEMETHOD(x,sel,q)\
{\
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"%@",@#sel]);\
if ([x respondsToSelector:selector]) {\
_Pragma("clang diagnostic push")\
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"")\
q=[x performSelector:selector];\
_Pragma("clang diagnostic pop")\
}\
}\
#define CALL_PRIVATE_CLASSMETHOD_ONEPARAM(x,sel,p,q)\
{\
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"_%@:",@#sel]);\
if ([x respondsToSelector:selector]) {\
_Pragma("clang diagnostic push")\
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"")\
q=[x performSelector:selector withObject:p];\
_Pragma("clang diagnostic pop")\
}\
}\
+ (NSString *)standardUserAgent{
NSString *buildVersion = nil;
CALL_PRIVATE_INSTANCEMETHOD([UIDevice currentDevice], buildVersion,buildVersion);
Class webViewCls = NSClassFromString([NSString stringWithFormat:@"%@%@",@"Web",@"View"]);
NSString *standardUA = nil;
NSString *versions = [NSString stringWithFormat:@"Mobile/%@",buildVersion];
CALL_PRIVATE_CLASSMETHOD_ONEPARAM(webViewCls, standardUserAgentWithApplicationName,versions,standardUA);
return standardUA;
}
Nguồn
2016-01-29 19:13:46
Không cần phải thực hiện một yêu cầu web và chờ cho materialisation nó để có được tiêu đề http. Đối với tôi đây là câu trả lời! Thanks –
Cảm ơn vì điều này, nó hoạt động. Một lưu ý quan trọng là, bạn cần phải gọi điều này trong chủ đề chính. Vì vậy, trong một số trường hợp, bạn có thể cần phải quấn mã của câu trả lời của bạn bên trong dispatch_async (dispatch_get_main_queue(),^{...}); – haxpor