测试已测试 | ✗ |
语言的语言 | Obj-CObjective C |
许可证 | MIT |
发布最新版本 | 2016年9月 |
由PayPal、Tom Whipple、Bryant Luk和Avi Das维护。
card.io提供移动应用的快速、简易信用卡扫描功能。
新功能!!! card.io现在是一个开源项目!
截至2014年12月,card.io的所有源代码现在都在card.io-iOS-source仓库中可供获取。
这对你意味着什么?
- 如果您只想将card.io集成到移动应用中,那么您可以(也可能应该)忽略card.io-iOS-source的存在。
- 但如果您对卡如何执行其魔法感兴趣,或者想要改善card.io的外观或行为,那么请访问card.io-iOS-source!
请确保您的应用程序使用SDK的最新版本,所有发布版本均遵循语义化版本控制。
要接收有关新版本的更新
您可以使用Stack Overflow card.io标签找到并开始技术讨论。
为了快速了解card.io,我们包含了一个非常小的示例应用程序,您可以构建并运行它。
SampleApp
文件夹或SampleApp-Swift
文件夹,然后按照您在那里找到的README.md
文件中的说明操作。card.io iOS SDK包括头文件和一个单个静态库。我们将向您介绍集成和用法。
您可以使用card.io的两种方式
作为视图控制器:快速并简单。创建一个CardIOPaymentViewController
,并以模态方式展示。card.io视图控制器处理UX的各个方面,包括回退的手动输入、所有过渡和数字确认。
作为视图:更灵活。创建一个CardIOView
执行卡片扫描,而其他所有操作则由您自己管理。这允许更广泛的展示,例如原地过渡,但需要您自己处理其余的UI。
创建一个类(最可能是UIViewController
的子类),使其遵守CardIOPaymentViewControllerDelegate
。
// SomeViewController.h
#import "CardIO.h"
@interface SomeViewController : UIViewController<CardIOPaymentViewControllerDelegate>
// ...
进行可选调用以加快随后的card.io扫描启动速度
// SomeViewController.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[CardIOUtilities preloadCardIO];
}
开始card.io卡片扫描
// SomeViewController.m
- (IBAction)scanCard:(id)sender {
CardIOPaymentViewController *scanViewController = [[CardIOPaymentViewController alloc] initWithPaymentDelegate:self];
[self presentViewController:scanViewController animated:YES completion:nil];
}
编写委托方法以接收卡片信息或取消操作
// SomeViewController.m
- (void)userDidCancelPaymentViewController:(CardIOPaymentViewController *)scanViewController {
NSLog(@"User canceled payment info");
// Handle user cancellation here...
[scanViewController dismissViewControllerAnimated:YES completion:nil];
}
- (void)userDidProvideCreditCardInfo:(CardIOCreditCardInfo *)info inPaymentViewController:(CardIOPaymentViewController *)scanViewController {
// The full card number is available as info.cardNumber, but don't log that!
NSLog(@"Received card info. Number: %@, expiry: %02i/%i, cvv: %@.", info.redactedCardNumber, info.expiryMonth, info.expiryYear, info.cvv);
// Use the card info...
[scanViewController dismissViewControllerAnimated:YES completion:nil];
}
CardIOView自card.io版本3.3.0(2013年9月)起成为新功能。我们期待看到开发者如何创意性地将其集成到他们的应用程序中。如果您用它实现了一些酷的功能,请与
创建一个类(最可能是UIViewController
的子类),使其遵守CardIOViewDelegate
。
// SomeViewController.h
#import "CardIO.h"
@interface SomeViewController : UIViewController<CardIOViewDelegate>
// ...
使用CardIOView提供UI灵活性。以下有两个示例集成选项
确认用户的设备具备扫描卡片的能力
// SomeViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
if (![CardIOUtilities canReadCardWithCamera]) {
// Hide your "Scan Card" button, or take other appropriate action...
}
}
进行可选调用以加快随后的card.io扫描启动速度
// SomeViewController.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[CardIOUtilities preloadCardIO];
}
开始card.io卡片扫描
// SomeViewController.m
- (IBAction)scanCard:(id)sender {
CardIOView *cardIOView = [[CardIOView alloc] initWithFrame:CGRECT_WITHIN_YOUR_VIEW];
cardIOView.delegate = self;
[self.view addSubview:cardIOView];
}
编写委托方法以接收到结果
// SomeViewController.m
- (void)cardIOView:(CardIOView *)cardIOView didScanCard:(CardIOCreditCardInfo *)info {
if (info) {
// The full card number is available as info.cardNumber, but don't log that!
NSLog(@"Received card info. Number: %@, expiry: %02i/%i, cvv: %@.", info.redactedCardNumber, info.expiryMonth, info.expiryYear, info.cvv);
// Use the card info...
}
else {
NSLog(@"User cancelled payment info");
// Handle user cancellation here...
}
[cardIOView removeFromSuperview];
}
包括一个取消卡片扫描的方法
// SomeViewController.m
- (IBAction)cancelScanCard:(id)sender {
[cardIOView removeFromSuperview];
}
创建一个IBOutlet属性
// SomeViewController.m
@interface SomeViewController ()
@property(nonatomic, strong, readwrite) IBOutlet CardIOView *cardIOView;
@end
在您的.xib文件中包含一个CardIOView,将其标记为hidden
,并将其连接到IBOutlet属性。(注意:通常您希望将CardIOView的背景色设置为clearColor
。)
在确认用户的设备可扫描卡片后,设置CardIOView的delegate
属性
// SomeViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
if (![CardIOUtilities canReadCardWithCamera]) {
// Hide your "Scan Card" button, remove the CardIOView from your view, and/or take other appropriate action...
} else {
self.cardIOView.delegate = self;
}
}
进行可选调用以加快随后的card.io扫描启动速度
// SomeViewController.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[CardIOUtilities preloadCardIO];
}
开始card.io卡片扫描
// SomeViewController.m
- (IBAction)scanCard:(id)sender {
self.cardIOView.hidden = NO;
}
编写委托方法以接收到结果
// SomeViewController.m
- (void)cardIOView:(CardIOView *)cardIOView didScanCard:(CardIOCreditCardInfo *)info {
if (info) {
// The full card number is available as info.cardNumber, but don't log that!
NSLog(@"Received card info. Number: %@, expiry: %02i/%i, cvv: %@.", info.redactedCardNumber, info.expiryMonth, info.expiryYear, info.cvv);
// Use the card info...
}
else {
NSLog(@"User canceled payment info");
// Handle user cancellation here...
}
cardIOView.hidden = YES;
}
包括一个取消卡片扫描的方法
// SomeViewController.m
- (IBAction)cancelScanCard:(id)sender {
self.cardIOView.hidden = YES;
}
CardIOPaymentViewController
会自动模糊其自己的屏幕。而CardIOView
不会进行任何自动模糊。CardIOPaymentViewController
或CardIOView
时,card.io SDK必须加载资源,这可能会导致明显的延迟。为了避免这种延迟,您可以选择提前调用[CardIOUtilities preloadCardIO]
,这样资源加载就可以在后台线程上提前完成。