即使在调用 [PayPalMobile clearAllUserData] 之后,Paypal ios SDK 也不会清除以前使用过的信用卡
Posted
技术标签:
【中文标题】即使在调用 [PayPalMobile clearAllUserData] 之后,Paypal ios SDK 也不会清除以前使用过的信用卡【英文标题】:Paypal ios SDK not clearing previously used credit cards even after call to [PayPalMobile clearAllUserData] 【发布时间】:2014-09-18 00:26:19 【问题描述】:我正在将 Paypal ios SDK 2.1 版集成到我的应用程序中,但遇到了问题。
SDK似乎将过去的支付卡保存在内存中,即使我在支付完成后调用[PayPalMobile clearAllUserData]
。
@interface AirliftCartViewController : AirliftViewController <AVCaptureMetadataOutputObjectsDelegate, UITableViewDelegate, AirliftCartTotalsChangeDelegate, PayPalPaymentDelegate>
@property (strong) AVCaptureSession * captureSession;
@property (strong, nonatomic) UIView *cameraPreview;
@property (nonatomic, strong, readwrite) PayPalConfiguration *payPalConfiguration;
- (IBAction)initiateCreditCardCheckout:(id)sender;
@end
...
@implementation AirliftCartViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil timeout:(NSUInteger)timeoutInSeconds screenName:(NSString *)screenName
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil timeout:timeoutInSeconds screenName:@"AirliftCartView"];
if (self)
// Custom initialization
self.payPalConfiguration = [[PayPalConfiguration alloc] init];
self.payPalConfiguration.rememberUser = NO;
return self;
- (void)payPalPaymentDidCancel:(PayPalPaymentViewController *)paymentViewController
NSLog(@"payment cancelled!");
// The payment was canceled; dismiss the PayPalPaymentViewController.
[paymentViewController dismissViewControllerAnimated:YES completion:^
// clear all paypal user information
[PayPalMobile clearAllUserData];
];
- (void)payPalPaymentViewController:(PayPalPaymentViewController *)paymentViewController didCompletePayment:(PayPalPayment *)completedPayment
NSLog(@"Payment was successful");
// Payment was processed successfully; send to server for verification and fulfillment.
[self verifyCompletedPayment:completedPayment];
// Dismiss the PayPalPaymentViewController.
[paymentViewController dismissViewControllerAnimated:YES completion:^
// clear all paypal user information
[PayPalMobile clearAllUserData];
// emptycart
[self.cartController emptyCart];
// reset metadata
[self.metaDataFound removeAllObjects];
- (IBAction)initiateCheckout:(id)sender
NSLog(@"checkout requested!");
[PayPalMobile preconnectWithEnvironment:PayPalEnvironmentSandbox];
// present paypal payment
PayPalPaymentViewController * payPalVC = [[PayPalPaymentViewController alloc]
initWithPayment:[self.cartController getPayPalPaymentFromCart]
configuration:self.payPalConfiguration delegate:self];
[self presentViewController:payPalVC animated:YES completion:^
[self.captureSession stopRunning];
[self.cameraPreview removeFromSuperview];
];
@end
我像这样展示 PayPalPaymentViewController(所以我无法判断出对它的强烈引用)
为我的应用保留任何卡片信息是不可接受的,任何人有什么想法吗?
编辑:按要求添加用户步骤:
用户选择要购买的产品,然后单击结帐按钮,该按钮的 Action 是initialCheckout。 这会打开 paypalpaymentviewcpntroller,它将以前使用的卡显示为唯一的支付选项(我第一次启动控制器时,可以选择登录到 paypal 或使用卡)编辑 2:添加了 captureSession
和 cameraPreview
的属性声明并扩展了 init
定义
编辑 3:添加截图
【问题讨论】:
【参考方案1】:这里是来自 PayPal 的戴夫。
几个问题:
(1) 你的captureSession
和cameraPreview
怎么了?
(2) 您能否从用户的角度提供一系列具体步骤来重现您的问题?
(3) SDK 将卡片数据保存在内存中的指示是什么?
(4) 您运行的是哪个版本的 SDK?我猜它是最新版本之一,2.1.5 还是 2.1.6?
* 编辑(2014 年 8 月 1 日):最初描述的错误已在我们的 latest release 中修复。 *
【讨论】:
嗨,戴夫,回答您的问题:(1) captureSession 是我用于条形码扫描的 AVCaptureSession。 Camerapreview 是与会话关联的预览层视图。 (2)我编辑了我的问题以包括步骤(3),当我在initialCheckout中显示paymentviewcontroller时,以前使用的卡显示在第一个屏幕上,如果您愿意,我可以截取屏幕截图。 (4)标题说2.1,几个月前我复制了图书馆。感谢您的帮助! @SandeepPhadke 谢谢!这看起来确实像 SDK 中的错误。我们可能会在几天内发布带有修复程序的更新版本。 @SandeepPhadke 跟进@Romk1n 的评论...即使clearAllUserData
中存在我将修复的错误,但在我的测试中将payPalConfiguration.rememberUser
设置为NO
确实消除了问题。当您创建和呈现PayPalPaymentViewController
时,您能否仔细检查您的流程以确认payPalConfiguration.rememberUser
仍然是NO
?如果是,那么您根本不需要致电clearAllUserData
。
另外,请下载并使用当前版本的SDK。标头应显示 2.1.6
作为版本号。
好的,我升级SDK看看,现在我在类初始化函数中调用payPalConfiguration.rememberUser = NO
,也许我应该把它移到viewDidLoad
,看看会不会影响行为
【参考方案2】:
您还可以在 PayPalConfiguration https://github.com/paypal/PayPal-iOS-SDK/blob/master/PayPalMobile/PayPalConfiguration.h#L57 中设置 remeberUser = NO,这样 SDK 甚至不会尝试保存任何内容。
【讨论】:
是的,我在视图控制器的 init 中将 rememberUser 设置为 NO。以上是关于即使在调用 [PayPalMobile clearAllUserData] 之后,Paypal ios SDK 也不会清除以前使用过的信用卡的主要内容,如果未能解决你的问题,请参考以下文章
从 Paypal MPL 迁移到 PaypalMobile iOS SDK 的问题