Prostszym sposobem, aby ustalić, agent użytkownika w systemie iOS jest dostać go bezpośrednio z UIWebView zastosowaniem przyjętej odpowiedź this SO post .Ale ten sposób ma dwie wady:
1, pierwszy przydział UIWebView może podjąć zbyt wiele czasu podczas inicjowania kontekstu przeglądania sieci.
2, kod musi być wykonany w głównym wątku. To może utknąć w głównym wątku.
Jeśli znasz sztuczki, jak korzystać z prywatnych metod, unikając odmowy App Store Review.
Można spróbować następujący kod:
#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;
}
Nie ma potrzeby, aby złożyć zamówienie internetowej i czekać na to jest materializacji dostać nagłówek HTTP. Dla mnie to jest odpowiedź! Dzięki –
Dziękuję za to, to działa. Ważną informacją jest to, że musisz wywołać to w głównym wątku. Zatem w niektórych okolicznościach może być konieczne zawinięcie kodu odpowiedzi wewnątrz dispatch_async (dispatch_get_main_queue(),^{...}); – haxpor