PKPaymentAuthorizationViewController作为nil视图控制器出现 [英] PKPaymentAuthorizationViewController present as nil view controller

查看:215
本文介绍了PKPaymentAuthorizationViewController作为nil视图控制器出现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将Apple Pay整合到我的演示应用中这个链接&我正面临此问题问题。我已将我的iphone 6+操作系统更新为8.1.1版本,但仍然无法正确显示PKPaymentAuthorizationViewController&我收到此错误应用程序试图在目标上显示一个nil模态视图控制器。请提出建议,因为我被困在此。这是我写的代码: -

I am trying to integrate Apple Pay in my demo app following this link & I am facing this issue issue. I have updated my iphone 6+ os to 8.1.1 version but still not able to present PKPaymentAuthorizationViewController properly & I am getting this error "Application tried to present a nil modal view controller on target".Please suggest something since I am stuck on this.Here is the code which I have written :-

PKPaymentRequest *request = [[PKPaymentRequest alloc] init];

request.currencyCode = @"USD";
request.countryCode = @"US";
// This is a test merchant id to demo the capability, this would work with Visa cards only.
request.merchantIdentifier = @"merchant.com.procharge";  // replace with YOUR_APPLE_MERCHANT_ID
request.applicationData = [@"" dataUsingEncoding:NSUTF8StringEncoding];
request.merchantCapabilities = PKMerchantCapability3DS;
request.supportedNetworks = @[PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkAmex];
request.requiredBillingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldEmail;
request.requiredShippingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldEmail;

///Set amount here
NSString *amountText =  @"0.01"; // Get the payment amount
NSDecimalNumber *amountValue = [NSDecimalNumber decimalNumberWithString:amountText];

PKPaymentSummaryItem *item = [[PKPaymentSummaryItem alloc] init];
item.amount = amountValue;
//item.amount = [[NSDecimalNumber alloc] initWithInt:20];
item.label = @"Test Payment Total";

request.paymentSummaryItems = @[item];

PKPaymentAuthorizationViewController *vc = nil;

// need to setup correct entitlement to make the view to show
@try
{
    vc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
}

@catch (NSException *e)
{
    NSLog(@"Exception %@", e);
}

if (vc != nil)
{
    vc.delegate = self;
    [self presentViewController:vc animated:YES completion:CompletionBlock];
}
else
{
    //The device cannot make payments. Please make sure Passbook has valid Credit Card added.
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"PassKit Payment Error"
                                                    message:NSLocalizedString(@"The device cannot make payment at this time. Please check Passbook has Valid Credit Card and Payment Request has Valid Currency & Apple MerchantID.", @"")
                                                   delegate:nil
                                          cancelButtonTitle:NSLocalizedString(@"OK", @"")
                                          otherButtonTitles:nil];
    [alert show];


}

谢谢&问候

推荐答案

在尝试呈现viewcontroller之前,您是否实现了这些方法?

Did you implement these methods to check before trying to present the viewcontroller?

// Determine whether this device can process payment requests.
// YES if the device is generally capable of making in-app payments.
// NO if the device cannot make in-app payments or if the user is restricted from authorizing payments.
+ (BOOL)canMakePayments;

// Determine whether this device can process payment requests using specific payment network brands.
// Your application should confirm that the user can make payments before attempting to authorize a payment.
// Your application may also want to alter its appearance or behavior when the user is not allowed
// to make payments.
// YES if the user can authorize payments on this device using one of the payment networks supported
// by the merchant.
// NO if the user cannot authorize payments on these networks or if the user is restricted from
// authorizing payments.
+ (BOOL)canMakePaymentsUsingNetworks:(NSArray *)supportedNetworks;

这篇关于PKPaymentAuthorizationViewController作为nil视图控制器出现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆