Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 应用内购买偶尔会崩溃_Iphone_Ios_In App Purchase_Storekit - Fatal编程技术网

Iphone 应用内购买偶尔会崩溃

Iphone 应用内购买偶尔会崩溃,iphone,ios,in-app-purchase,storekit,Iphone,Ios,In App Purchase,Storekit,我的三个应用中都有应用内购买。一年多以来,第一台运行良好。在这一点上,我有一个惯例: -(void)purchaseProUpgrade{ SKPayment *payment = [SKPayment paymentWithProductIdentifier: inAppProductId]; if ([SKPaymentQueue canMakePayments]) [[SKPaymentQueue defaultQueue] addPayment:payment]; else

我的三个应用中都有应用内购买。一年多以来,第一台运行良好。在这一点上,我有一个惯例:

-(void)purchaseProUpgrade{
  SKPayment *payment = [SKPayment paymentWithProductIdentifier: inAppProductId];

  if ([SKPaymentQueue canMakePayments]) [[SKPaymentQueue defaultQueue] addPayment:payment];
  else [self purchaseFailedWithError:nil];
}
但paymentWithProductIdentifier已被折旧。因此,在接下来的两个应用程序中,我将其更改为(其余代码相同):

其中“upgradeProduct”由

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
   NSArray *products = response.products;
   if([products count]>0)  self.upgradeProduct = products[0];

   // the user is warned if upgradeProduct not is set 
}

// upgradeProduct is declared as Strong and I am using ARC.
在沙箱中,即使我试图通过来回跳转到“购买”视图、取消购买等来挑逗它,这也能很好地工作。如果我从应用商店购买我的应用程序,它也能工作。我似乎也为大多数用户工作,因为有销售注册

然而,我几乎每天都会收到崩溃报告,说[[SKPaymentQueue defaultQueue]addPayment:payment]已经因为“无效产品标识符:(null)”而崩溃。在某些情况下,人们似乎崩溃了,立即重新启动应用程序,试图再次购买,然后崩溃了


欢迎您的任何意见。

Github中有一个示例,请查看下面的链接


谢谢。但是,它本质上与我使用的代码相同。
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
   NSArray *products = response.products;
   if([products count]>0)  self.upgradeProduct = products[0];

   // the user is warned if upgradeProduct not is set 
}

// upgradeProduct is declared as Strong and I am using ARC.