我正在开发一个应用程序并在其中使用应用程序内购买。我在 iTunes Connect 中创建了应用内产品。直到昨天一切正常。但今天。它开始给出这个错误。
“错误:付款请求仅限于通过 Store Kit 的 didRecieveResponse 方法退回的有效产品。”
我不知道是什么问题。请回复
最佳答案
好的,这可能是确凿的证据 --
根据 Store Kit 应用的官方数据流,您应该在尝试购买 (SKPaymentQueue) 之前检索有关可用购买的信息 (SKProductsRequest)。
我添加了代码来做到这一点,即使没有使用本地化数据。我打了电话,验证了该项目存在,然后转储了一个关于它的 NSLOG。
购买成功,没有错误!
然后我删除了调用 SKProductsRequest 的代码,并重新运行它,并收到“付款请求受限...”错误消息。
似乎商店工具包框架已更改为要求您调用 SKProductsRequest,以便在将它们添加到 SKPaymentQueue 时购买行为正确。
在计算机科学方面,他们似乎在两个逻辑上相关但独立的模块之间引入了硬依赖。这是一个非常糟糕的做法。
尝试将此代码添加到您的应用程序中,并在对 SKPaymentQueue 进行“真实”调用之前的某个时刻调用 dumpProductInfo 并查看它是否开始工作——确保使用您的实际产品标识符更新嵌入的字符串文字.
-(void) dumpProductInfo
{
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.company.domain.app.purchase"]];
request.delegate = self;
[request start];
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *myProduct = response.products;
// populate UI
NSLog(@"Products:");
for (int i = 0; i < [myProduct count]; i++)
{
SKProduct *product = [myProduct objectAtIndex:i];
NSLog(@"Name: %@ - Price: %f ID: %@" ,
[product localizedTitle],
[[product price] doubleValue],
[product productIdentifier]);
}
}
跟进:如下所述,Apple 技术说明 QA1691 证实我认为发生的事情是正确的——在我们弄清楚两周后:p
关于iphone:应用内购买错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3768621/