본문 바로가기
아빠방/Tech

UIWebView에 QR코드 리더 넣기

by 탱탱이아빠 2016. 8. 26.

오늘은 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

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









반응형

댓글