Una forma más sencilla de determinar el agente de usuario en IOS es obtener directamente de un UIWebView usando la respuesta aceptada a this SO post .Pero esta manera tiene dos desventajas:
1, primera asignación de UIWebView puede tomar demasiado tiempo para inicializar el contexto de la vista web.
2, el código debe ejecutarse en el hilo principal. Esto puede estancarse en el hilo principal.
Si conoce los trucos de cómo usar métodos privados mientras evita la negativa de App Store Review.
puedes probar el siguiente código:
#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;
}
No hay necesidad de hacer una solicitud web y esperar a que la materialización de conseguir encabezado HTTP. Para mí esta es la respuesta! Gracias –
Gracias por esto, funciona. Una nota importante es que debes llamar esto en el hilo principal. Por lo tanto, en algunas circunstancias, es posible que deba ajustar el código de su respuesta dentro de dispatch_async (dispatch_get_main_queue(),^{...}); – haxpor