1

我正在构建一个 iOS 应用程序并尝试实现应用程序内购买(非消耗性)。

所有捆绑包 ID 等都已设置并正常工作,当我获取 Apple Store 服务器时,我可以看到我的产品有效。但是,在测试时,我在 paymentQueue 回调中收到失败的交易。

这是iOS模拟器中逐步发生的事情:

  1. 一个消息框询问“您想以 0.99 美元的价格购买 .. 吗?” 哪个是对的
  2. 我单击是。
  3. 大约一秒钟后,它说我已经买了(正确的,我最初是在调试时试买的)。我点击确定。
  4. 它抱怨登录要求(它说类似于 MZFinance_LoginRequired,我认为它缺少字符串标识符。)我单击“确定”。
  5. 弹出 App Store 登录框,我输入我的测试帐户凭据。
  6. 我在 Xcode 中的断点被击中,事务状态为 SKPaymentTransactionStateFailed

这是我的代码的相关部分:

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
NSArray* arr = response.products;
for (int i = 0; i < arr.count; i++) {
    SKProduct* product = [arr objectAtIndex:i];
    if([product.productIdentifier isEqualToString:@"<<my in app purchase id which is correct and working>>"]){
        SKPayment *payment = [SKPayment paymentWithProduct:product];
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
}

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
for (SKPaymentTransaction* ta in transactions) {
    switch (ta.transactionState) {
        case SKPaymentTransactionStatePurchased:
        case SKPaymentTransactionStateRestored:
            receipt = [ta transactionReceipt];
            [self performSelectorInBackground:@selector(validateFromServer) withObject:nil];
            break;
        case SKPaymentTransactionStateFailed:
            [self purchaseFailed];
            break;
    }

    if(!ta.transactionState == SKPaymentTransactionStatePurchasing){
        [[SKPaymentQueue defaultQueue] finishTransaction:ta];

    }
}

} }

[self purchaseFailed]总是被击中,这只是通知用户。这里有什么问题?(我是 iOS 新手,而且 - 显然 - 应用程序购买中的 iOS)。谢谢。

更新:我的测试帐户凭据是正确的,因为如果我输入错误,我会收到不同的(无效登录)消息。

4

2 回答 2

1

很抱歉迟到的答案,我知道你已经解决了你的问题,但我也遇到了这个问题。我的解决方案是自动运行恢复购买方法,因为这似乎可行。

谢谢

于 2013-10-12T23:17:49.193 回答
0

经过一段时间的努力,我注意到我在生产中没有遇到任何问题。这可能是沙盒服务器的问题。

于 2012-08-07T15:33:07.113 回答