CardIO 5.4.1

CardIO 5.4.1

测试已测试
语言的语言 Obj-CObjective C
许可证 MIT
发布最新版本2016年9月

PayPalTom WhippleBryant LukAvi Das维护。



CardIO 5.4.1

card.io SDK for iOS

card.io提供移动应用的快速、简易信用卡扫描功能。

新功能!!! card.io现在是一个开源项目!

截至2014年12月,card.io的所有源代码现在都在card.io-iOS-source仓库中可供获取。

这对你意味着什么?
  • 如果您只想将card.io集成到移动应用中,那么您可以(也可能应该)忽略card.io-iOS-source的存在。
  • 但如果您对卡如何执行其魔法感兴趣,或者想要改善card.io的外观或行为,那么请访问card.io-iOS-source


PayPal logo

保持更新

请确保您的应用程序使用SDK的最新版本,所有发布版本均遵循语义化版本控制

要接收有关新版本的更新

您可以使用Stack Overflow card.io标签找到并开始技术讨论。

示例应用

为了快速了解card.io,我们包含了一个非常小的示例应用程序,您可以构建并运行它。

  1. 下载SDK的最新版本。
  2. 只需打开SampleApp文件夹或SampleApp-Swift文件夹,然后按照您在那里找到的README.md文件中的说明操作。

说明

card.io iOS SDK包括头文件和一个单个静态库。我们将向您介绍集成和用法。

要求

  • 最新的非测试版Xcode。(也可能兼容较老或较新的版本。)
  • 支持目标部署iOS版本6.1+以及指令集armv7+(包括64位)。

设置

示例代码

您可以使用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月)起成为新功能。我们期待看到开发者如何创意性地将其集成到他们的应用程序中。如果您用它实现了一些酷的功能,请与@cardio分享!我们也期待快速解决您可能遇到的任何问题。

创建一个类(最可能是UIViewController的子类),使其遵守CardIOViewDelegate

// SomeViewController.h

#import "CardIO.h"
@interface SomeViewController : UIViewController<CardIOViewDelegate>
// ...

使用CardIOView提供UI灵活性。以下有两个示例集成选项

  • 当需要时创建CardIOView,当其任务完成后销毁。
  • 在视图中包含一个隐藏的CardIOView,在需要时展示,任务完成后再隐藏。
选项1:在需要时创建CardIOView

确认用户的设备具备扫描卡片的能力

// 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];
}
选项2:在您的视图中包含隐藏的CardIOView

创建一个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不会进行任何自动模糊。
  • 第一次创建CardIOPaymentViewControllerCardIOView时,card.io SDK必须加载资源,这可能会导致明显的延迟。为了避免这种延迟,您可以选择提前调用[CardIOUtilities preloadCardIO],这样资源加载就可以在后台线程上提前完成。