2011-12-20 20 views
11

क्या डिवाइस के उपयोगकर्ता एजेंट को प्राप्त करने के लिए आईओएस पर कोई तरीका है? मैं इसे हार्ड कोड नहीं करना चाहता क्योंकि मुझे सभी उपकरणों के लिए उपयोगकर्ता एजेंट की आवश्यकता है और मुझे उपयोगकर्ता एजेंट को यूआरएल में जोड़ना होगा।आईओएस पर उपयोगकर्ता एजेंट कैसे प्राप्त करें?

धन्यवाद।

उत्तर

36

आईओएस में उपयोगकर्ता एजेंट का पता लगाने के एक आसान तरीका प्राप्त करने के लिए है this SO post के स्वीकृत उत्तर का उपयोग करके यह UIWebView से सीधे है। उस उत्तर को उद्धृत करने के लिए:

समाधान UIWebView बनाने के लिए था और फिर उपयोगकर्ता एजेंट को खींचने के लिए जावास्क्रिप्ट का उपयोग करें।

UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
NSString* secretAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
+0

:
आप नीचे दिए गए कोड की कोशिश कर सकते हैं। मेरे लिए यह जवाब है! धन्यवाद –

+1

इसके लिए धन्यवाद, यह काम करता है। एक महत्वपूर्ण नोट यह है कि, आपको इसे मुख्य धागे में कॉल करने की आवश्यकता है। इस प्रकार कुछ परिस्थितियों में, आपको dispatch_async (dispatch_get_main_queue(),^{...}) के अंदर अपने उत्तर का कोड लपेटने की आवश्यकता हो सकती है; – haxpor

4

आपको उपयोगकर्ता-एजेंट प्राप्त करने के लिए वास्तव में अनुरोध करने की आवश्यकता नहीं है। बस निम्नलिखित प्रतिनिधि विधि से नहीं लौट सकते हैं और उपयोगकर्ता-एजेंट हैडर को बनाए रखें:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

वह कुछ इस तरह दिख सकता है:

-(BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
navigationType:(UIWebViewNavigationType)navigationType 
{ 
    userAgent = [[request valueForHTTPHeaderField:@"User-Agent"] copy]; 
    NSLog(@"user-agent: %@", userAgent); 

    _webView.delegate = nil; 
    [_webView release]; 

    return NO; 
} 
0

आईओएस में उपयोगकर्ता एजेंट का पता लगाने के एक आसान तरीका .लेकिन इस तरह से दो नुकसान है यह this SO post को स्वीकार कर लिया जवाब का उपयोग कर एक UIWebView से सीधे प्राप्त करने के लिए है:
1, UIWebView का पहला आवंटन समय लग सकता है वेबव्यू संदर्भ शुरू करने में बहुत अधिक समय।
2, कोड मुख्य धागे में निष्पादित किया जाना चाहिए। यह मुख्य धागा फंस सकता है।
यदि आप ऐप स्टोर समीक्षा से इनकार करते हुए निजी तरीकों का उपयोग कैसे करें, इस बारे में आप जानते हैं। एक वेब अनुरोध बनाने के लिए और यह materialisation के लिए प्रतीक्षा HTTP शीर्ष लेख प्राप्त करने के लिए की आवश्यकता नहीं है

 

    #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; 
    } 

संबंधित मुद्दे