本文將介紹如何在定製基準 cp_change_28238
或基準 10.2.3.5 以上版本中使用掃一掃多碼識別 SDK。您可以基於已有工程使用 CocoaPods 接入多碼識別 SDK 到 iOS 用戶端。
前置條件
您已接入工程到 mPaaS。更多資訊,請參見 基於已有工程且使用 CocoaPods 接入。
添加 SDK
使用 cocoapods-mPaaS 外掛程式添加多碼識別 SDK。操作步驟如下:
在
Podfile
檔案中,修改 mPaaS_baseline 為cp_change_28238
或基準 10.2.3.5 以上版本。使用
mPaaS_pod "mPaaS_ScanCode"
添加掃碼組件依賴。單擊此處查看如何使用 CocoaPods,根據需要在命令列中執行
pod install
或pod 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];
});
}