iOS kullanıcı ajanı tespit etmek için basit bir yolu this SO post kabul cevabı kullanarak bir UIWebView bunu doğrudan elde etmektir:
1, UIWebView ilk tahsisi sürebilir webview içeriğinin başlatılmasında çok fazla zaman.
2 code kod ana iş parçacığı içinde yürütülmelidir. Bu ana iş parçacığı sıkışmış olabilir.
App Store İncelemesinin reddedilmesinden kaçınarak özel yöntemlerin nasıl kullanılacağına dair ipuçlarını biliyorsanız.
Aşağıdaki kodu deneyebilirsiniz:
#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;
}
bir web istekte bulunur ve http başlığını almak için bu kadar materialisation beklemek gerek yok. Benim için bu cevap! Teşekkürler –
Bunun için teşekkürler. Önemli bir not, bunu ana iş parçasında çağırmanız gerektiğidir. Bu nedenle, bazı durumlarda, cevap kodunuzu dispatch_async (dispatch_get_main_queue(),^{...}) içine sarmanız gerekebilir; – haxpor