橙光视频
58.53MB · 2025-10-07
Braintree iOS Drop-in SDK 是一个功能强大的支付集成解决方案,为iOS应用提供了一套完整的支付UI组件。它支持多种支付方式,包括信用卡、PayPal、Venmo和Apple Pay,让开发者能够快速集成安全可靠的支付功能。
BTDropInUICustomization
全面自定义UI样式和颜色方案dependencies: [
.package(url: "https://github.com/braintree/braintree-ios-drop-in", from: "9.14.0")
]
pod 'BraintreeDropIn'
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)
let uiCustomization = BTDropInUICustomization(colorScheme: .light)
uiCustomization.fontFamily = "Helvetica"
uiCustomization.boldFontFamily = "Helvetica-Bold"
uiCustomization.tintColor = .systemBlue
let dropInRequest = BTDropInRequest()
dropInRequest.uiCustomization = uiCustomization
BTDropInResult.mostRecentPaymentMethod(forClientToken: clientToken) { result, error in
if let result = result {
// 显示最近使用的支付方式
let paymentIcon = result.paymentIcon
let description = result.paymentDescription
}
}
// 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
// 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;
}
// 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 @"";
}
}
// 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];
}];
}