即使在调用 [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:添加了 captureSessioncameraPreview 的属性声明并扩展了 init 定义

编辑 3:添加截图

【问题讨论】:

【参考方案1】:

这里是来自 PayPal 的戴夫。

几个问题:

(1) 你的captureSessioncameraPreview 怎么了?

(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 的问题

getline() 即使在 clear() 之后也会先跳过

我是不是应该经常调用 EntityManager.clear() 以避免内存泄漏?

我应该总是在函数末尾调用向量 clear() 吗?

调用 list.clear() 时出现运行时错误

java中利用WeakHashMap实现缓存