Braintree iOS Drop-in SDK - 一站式支付解决方案

Braintree iOS Drop-in SDK

Braintree iOS Drop-in SDK 是一个功能强大的支付集成解决方案,为iOS应用提供了一套完整的支付UI组件。它支持多种支付方式,包括信用卡、PayPal、Venmo和Apple Pay,让开发者能够快速集成安全可靠的支付功能。

功能特性

  • 多支付方式支持:集成信用卡、PayPal、Venmo和Apple Pay等多种支付方式
  • UI自定义 :通过BTDropInUICustomization全面自定义UI样式和颜色方案
  • 安全支付处理:支持3D Secure验证和安全的支付信息处理
  • 支付管理:提供支付方式的保存、管理和选择功能
  • 国际化支持:包含多语言本地化和RTL布局支持
  • 无障碍访问:默认支持动态字体大小和无障碍功能
  • 现代技术栈:要求Xcode 15.0+和Swift 5.9+,支持iOS 12.0+

安装指南

Swift Package Manager

swift 复制代码
dependencies: [
    .package(url: "https://github.com/braintree/braintree-ios-drop-in", from: "9.14.0")
]

CocoaPods

ruby 复制代码
pod 'BraintreeDropIn'

系统要求

  • iOS 12.0+
  • Xcode 15.0+
  • Swift 5.9+

使用说明

基本集成

swift 复制代码
import BraintreeDropIn

// 初始化Drop-in控制器
let dropInRequest = BTDropInRequest()
dropInRequest.cardholderNameSetting = .required
dropInRequest.vaultCard = true

let dropIn = BTDropInController(authorization: "your_client_token", 
                               request: dropInRequest) 
{ (controller, result, error) in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else if let result = result {
        // 处理支付结果
        print("Payment method type: \(result.paymentMethodType)")
        print("Payment description: \(result.paymentDescription)")
    }
    controller.dismiss(animated: true)
}

// 呈现Drop-in界面
present(dropIn!, animated: true)

UI自定义示例

swift 复制代码
let uiCustomization = BTDropInUICustomization(colorScheme: .light)
uiCustomization.fontFamily = "Helvetica"
uiCustomization.boldFontFamily = "Helvetica-Bold"
uiCustomization.tintColor = .systemBlue

let dropInRequest = BTDropInRequest()
dropInRequest.uiCustomization = uiCustomization

获取最近支付方式

swift 复制代码
BTDropInResult.mostRecentPaymentMethod(forClientToken: clientToken) { result, error in
    if let result = result {
        // 显示最近使用的支付方式
        let paymentIcon = result.paymentIcon
        let description = result.paymentDescription
    }
}

核心代码

支付表单控制器

swift 复制代码
// BTCardFormViewController.h
@interface BTCardFormViewController : BTDropInBaseViewController <UITextFieldDelegate>

@property (nonatomic, strong, readonly) BTUIKCardNumberFormField *cardNumberField;
@property (nonatomic, strong, readonly) BTUIKCardholderNameFormField *cardholderNameField;
@property (nonatomic, strong, readonly) BTUIKExpiryFormField *expirationDateField;
@property (nonatomic, strong, readonly) BTUIKSecurityCodeFormField *securityCodeField;

// 如果表单有效,返回BTCardRequest
@property (nonatomic, strong, nullable, readonly) BTCardRequest *cardRequest;

@end

UI定制配置

swift 复制代码
// BTDropInUICustomization.m
- (instancetype)initWithColorScheme:(BTDropInColorScheme)colorScheme {
    if (self = [super init]) {
        _useBlurs = YES;
        _postalCodeFormFieldKeyboardType = UIKeyboardTypeDefault;

        switch(colorScheme) {
            case BTDropInColorSchemeLight:
                _barBackgroundColor = UIColor.whiteColor;
                _formBackgroundColor = [UIColor btuik_colorFromHex:@"EFEFF4" alpha:1.0];
                _primaryTextColor = UIColor.blackColor;
                _secondaryTextColor = [UIColor btuik_colorFromHex:@"3C3C43" alpha:1.0];
                break;
            case BTDropInColorSchemeDark:
                _barBackgroundColor = [UIColor btuik_colorFromHex:@"222222" alpha:1.0];
                _formBackgroundColor = [UIColor btuik_colorFromHex:@"222222" alpha:1.0];
                _primaryTextColor = UIColor.whiteColor;
                _secondaryTextColor = [UIColor btuik_colorFromHex:@"EBEBF5" alpha:1.0];
                break;
            default: // dynamic
                if (@available(iOS 13, *)) {
                    _barBackgroundColor = UIColor.systemBackgroundColor;
                    _formBackgroundColor = UIColor.systemGroupedBackgroundColor;
                    _primaryTextColor = UIColor.labelColor;
                    _secondaryTextColor = UIColor.secondaryLabelColor;
                }
        }
    }
    return self;
}

支付方式处理

swift 复制代码
// BTPaymentMethodNonce+DropIn.m
- (NSString *)paymentDescription {
    if ([self isKindOfClass:[BTCardNonce class]]) {
        return ((BTCardNonce *)self).lastFour;
    } else if ([self isKindOfClass:[BTPayPalAccountNonce class]]) {
        return ((BTPayPalAccountNonce *)self).email;
    } else if ([self isKindOfClass:[BTVenmoAccountNonce class]]) {
        return ((BTVenmoAccountNonce *)self).username;
    } else if ([self isKindOfClass:[BTApplePayCardNonce class]]) {
        return @"Apple Pay";
    } else {
        return @"";
    }
}

基础视图控制器

swift 复制代码
// BTDropInBaseViewController.m
- (instancetype)initWithAPIClient:(BTAPIClient *)apiClient request:(BTDropInRequest *)request {
    if (self = [super init]) {
        self.apiClient = apiClient;
        _dropInRequest = request;
    }
    return self;
}

- (void)loadConfiguration {
    [self.apiClient fetchOrReturnRemoteConfiguration:^(BTConfiguration *configuration, NSError *error) {
        self.configuration = configuration;
        [self configurationLoaded:configuration error:error];
    }];
}
相关推荐
说私域1 分钟前
基于AI智能名片链动2+1模式预约服务商城小程序的数据管理与系统集成研究
大数据·人工智能·小程序
AC赳赳老秦7 分钟前
技术文档合著:DeepSeek辅助多人协作文档的风格统一与内容补全
android·大数据·人工智能·微服务·golang·自动化·deepseek
咚咚王者7 分钟前
人工智能之核心基础 机器学习 第十四章 半监督与自监督学习总结归纳
人工智能·学习·机器学习
风栖柳白杨15 分钟前
【语音识别】SenseVoice非流式改流式
人工智能·语音识别
Aloudata15 分钟前
企业落地 AI 数据分析,如何做好敏感数据安全防护?
人工智能·安全·数据挖掘·数据分析·chatbi·智能问数·dataagent
安达发公司15 分钟前
安达发|煤炭行业APS高级排产:开启高效生产新时代
大数据·人工智能·aps高级排程·安达发aps·车间排产软件·aps高级排产
中科天工16 分钟前
如何实现工业4.0智能制造的自动化包装解决方案?
大数据·人工智能·智能
ai_top_trends23 分钟前
AI 生成 PPT 工具横评:效率、质量、稳定性一次说清
人工智能·python·powerpoint
三千世界00627 分钟前
Claude Code Agent Skills 自动发现原理详解
人工智能·ai·大模型·agent·claude·原理
云和恩墨30 分钟前
数据库运维的下一步:Bethune X以AI实现从可观测到可处置
人工智能·aiops·数据库监控·数据库运维·数据库巡检