全部產品
Search
文件中心

Mobile Platform as a Service:多碼識別

更新時間:Jul 13, 2024

本文將介紹如何在定製基準 cp_change_28238或基準 10.2.3.5 以上版本中使用掃一掃多碼識別 SDK。您可以基於已有工程使用 CocoaPods 接入多碼識別 SDK 到 iOS 用戶端。

前置條件

您已接入工程到 mPaaS。更多資訊,請參見 基於已有工程且使用 CocoaPods 接入

添加 SDK

使用 cocoapods-mPaaS 外掛程式添加多碼識別 SDK。操作步驟如下:

  1. Podfile檔案中,修改 mPaaS_baseline 為 cp_change_28238或基準 10.2.3.5 以上版本。

  2. 使用 mPaaS_pod "mPaaS_ScanCode"添加掃碼組件依賴。

    圖片3

  3. 單擊此處查看如何使用 CocoaPods,根據需要在命令列中執行 pod installpod update即可完成接入。

使用 SDK

開啟預設掃碼頁面

本文將結合 掃一掃 官方 Demo 介紹如何在定製基準 cp_change_28238 或 10.2.3.5 以上版本的基準中使用掃一掃多碼識別預設 UI SDK。

  • 喚起預設掃碼頁面並處理掃描結果。

     #import <TBScanSDK/TBScanSDK.h>
    
     @interface MPScanDemoVC()
     
     @property(nonatomic, strong) TBScanViewController *scanVC;
    
     @end
    
    - (void)defaultScan {
       
       // 是否顯示相簿入口  
       [MPScanCodeAdapterInterface sharedInstance].shoulShowAlbum = NO;
         
       TBScanViewController *vc = [[MPScanCodeAdapterInterface sharedInstance] createDefaultScanPageWithallback:^(id  _Nonnull result, BOOL keepAlive) {
           // 處理掃描結果
           UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:result[@"resp_result"] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            alert.tag = 1999;
            [alert show];
        }];
         
         // 設定掃碼類型
         vc.scanType =  ScanType_Default_Code;
         
        [self.navigationController pushViewController:vc animated:YES];
        self.scanVC =  vc;
    }
  • 多碼識別,持續掃碼。

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        // 持續掃碼
        [self.scanVC resumeCaptureSession];
    }

自訂 UI 的使用方式

本文將結合 掃一掃 官方 Demo 介紹如何在自訂 UI 下使用掃一掃多碼識別 SDK。

自訂繼承 TBScanViewController 的 ViewController

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface MPScanCodeViewController : TBScanViewController<TBScanViewControllerDelegate>

@end

NS_ASSUME_NONNULL_END

初始化自訂掃碼 ViewController

//自訂掃碼入口
- (void)customScanAction
{
    MPScanCodeViewController *vc = [[MPScanCodeViewController alloc] initWithConfig:@{}];
    [self.navigationController pushViewController:vc animated:YES];
}
@implementation MPScanCodeViewController

- (instancetype)initWithConfig:(NSDictionary *)config
{
    if (self = [super initWithConfig:config])
    {
        self.delegate = self;
        self.scanType = ScanType_All_Code;
    }
    return self;
}
重要

初始化自訂掃碼的 ViewController 只能使用 -(instancetype)initWithConfig:(NSDictionary *)config; 方式。

自訂掃碼框

- (void)buildContainerView:(UIView*)containerView
{
    // 自訂掃碼框 view
    UIView* bg = [[UIView alloc] initWithFrame:containerView.bounds];
    [containerView addSubview:bg];
    CGRect rect = [MPScanCodeViewController constructScanAnimationRect];
    UIView* view = [[UIView alloc] initWithFrame:rect];
    view.backgroundColor = [UIColor orangeColor];
    view.alpha = 0.5;
    [bg addSubview:view];
}

處理掃碼結果

使用者根據自己業務情境進行處理。

#pragma mark TBScanViewControllerDelegate

-(void)didFind:(NSArray<TBScanResult*>*)resultArray
{
    TBScanResult *result = resultArray.firstObject;
    NSString* content = result.data;
    if (result.resultType == TBScanResultTypeQRCode) {
        content = [NSString stringWithFormat:@"qrcode:%@, hiddenData:%@, TBScanQRCodeResultType:%@", result.data, result.hiddenData, [result.extData objectForKey:TBScanResultTypeQRCode]];
        NSLog(@"subType is %@, ScanType_QRCode is %@", @(result.subType), @(ScanType_QRCode));
    } else if (result.resultType == TBScanResultTypeVLGen3Code) {
        content = [NSString stringWithFormat:@"gen3:%@", result.data];
        NSLog(@"subType is %@, ScanType_GEN3 is %@", @(result.subType), @(ScanType_GEN3));
    } else if (result.resultType == TBScanResultTypeGoodsBarcode) {
        content = [NSString stringWithFormat:@"barcode:%@", result.data];
        NSLog(@"subType is %@, EAN13 is %@", @(result.subType), @(EAN13));
    } else if (result.resultType == TBScanResultTypeDataMatrixCode) {
        content = [NSString stringWithFormat:@"dm:%@", result.data];
        NSLog(@"subType is %@, ScanType_DATAMATRIX is %@", @(result.subType), @(ScanType_DATAMATRIX));
    } else if (result.resultType == TBScanResultTypeExpressCode) {
        content = [NSString stringWithFormat:@"express:%@", result.data];
        NSLog(@"subType is %@, ScanType_FASTMAIL is %@", @(result.subType), @(ScanType_FASTMAIL));
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:content delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        alert.tag = 9999;
        [alert show];
    });
}