아빠방/Tech

UIWebView에 QR코드 리더 넣기

탱탱이아빠 2016. 8. 26. 16:56

오늘은 UIWebView를 통해 QR 코드 리더를 넣도록 해보겠습니다.


제가 사용한 QR코드 라이브러리는 ZBar 입니다.

이전엔 레드레이져를 이용해보았습니다만... 실제 QR코드 혹은 바코드 인식율은 레드레이져가 더 좋은것 같습니다.

무료로는 ZBar도 괜찮습니다.


http://zbar.sourceforge.net/


여기서 다운받았고 xcode에 추가하면 아래 이미지와 같이 적용됩니다.


이제는 UIWebView에 연동하는 부분인데... 웹 페이지에서 바코드 리더를 호출하는 구조로 개발하여 자바스크립트를 통해 바코드 리더를 호출했습니다.


코드는 아래와 같습니다.


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

    

    NSURL *URL = [request URL];

    //----------------------------------------------------------------------

    // Camera Handling : Start

    //----------------------------------------------------------------------

    if ([[URL scheme] isEqualToString:@"callmyapp"]) {

        

        NSString *urlString = [[request URL] absoluteString];

        NSArray *urlParts = [urlString componentsSeparatedByString:@":"];

        

        if ([urlParts count] > 1) {

            

            ZBarReaderViewController *reader = [ZBarReaderViewController new];

            

            reader = [ZBarReaderViewController new];

            reader.readerDelegate = self;

            

            ZBarImageScanner *scanner = reader.scanner;

            

            [scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];

            [self presentModalViewController:reader animated:YES];

        }

    }

    //----------------------------------------------------------------------

    // Camera Handling : End

    //----------------------------------------------------------------------


}


대강 보시면 아시겠지만 URL을 호출하고 자바스크립트에서 callmyapp 펑션을 호출하면 바코드 리더가 실행되는 형태로 구현했습니다.


읽어들인 내용을 다시 웹으로 보내는 부분은 아래와 같습니다.


//----------------------------------------------------------------------

// Barcode Data Return : Start

//----------------------------------------------------------------------

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];


    ZBarSymbol *symbol = nil;

    for(symbol in results)

        break;

    

    [_webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setBarcodeToSearchText('search','\%@\');", symbol.data]];

    [_webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setBarcodeToSearchText('authCodeNo','\%@\');", symbol.data]];

    

    [self dismissModalViewControllerAnimated:YES];

}

//----------------------------------------------------------------------

// Barcode Data Return : End

//----------------------------------------------------------------------









반응형