应用内购买-购买产品后会显示确认警报

问题描述 投票:1回答:3

我已经实施了IAP,正在对其进行测试,但是存在以下问题,为此我寻求了很多解决方案。它不会一直发生,这使我怪罪于沙盒模式,但我认为这不是很聪明,所以我寻求帮助:

  1. 点击购买产品
  2. 显示提示为iTunes插入密码
  3. 尚未输入密码,也未确认(与此同时,已经购买了产品,并转到显示该产品的视图。)
  4. 点击取消
  5. 没关系,已经购买了。

这是我的代码:

- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for(SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState) 
        {
            case SKPaymentTransactionStatePurchasing:
            {
                NSLog(@"transaction state -> Purchasing");
                break;
            }
            case SKPaymentTransactionStatePurchased:
            {
                NSLog(@"purchased -- state");

                [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
                [self goToProductViewController];
                break;
            }
            case SKPaymentTransactionStateRestored:
            {
                NSLog(@"transaction state -> RESTORED");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            }
            case SKPaymentTransactionStateFailed:
            {
                NSLog(@"transaction state -> Cancelled");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;
            }
            default:
                break;
        }  
    }
}

我在做什么错?为什么在确认之前甚至在输入密码之前都购买了产品?我恰好是在购买之后而不是在购买状态下调用购买产品的方法。如果这是正常行为,那么我如何才能确认已确认购买该产品的状态?它仅正常运行了4次,就像它在确认后等待实际调用方法goToProductViewController一样,但是其余几十个测试却没有。

谢谢您!

ios objective-c in-app-purchase storekit
3个回答
0
投票

我建议您尝试购买其他具有不同商店ID的产品。也许您的观察者正在捕获上一次购买的商品,而不是刚刚初始化的商品。要检查是否发生了什么,请尝试测试购买其他具有不同产品ID的产品。当您的观察者发现购买商品时。检查产品ID,并将其与您刚才初始化的ID进行比较。

注意:如果错过了需要使用新产品ID重新进行测试的原因,则需要专注于进行此测试。


0
投票

可能是因为您不符合SKPaymentTransactionObserver协议。

如果尚未将<SKPaymentTransactionObserver>添加到头文件中,并在didFinishLaunchingWithOptions中实现观察者(以下示例)

- (BOOL)application:(UIApplication *)application
 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /* ... */

    [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
}

〜更新如下

自设置观察器以来,请确保您的应用在更新整个UI和方法调用以准备访问新功能时完成交易。使用以下命令完成交易:

SKPaymentTransaction *transaction = <# The current payment #>;
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

如果未调用(或以前未曾调用过,则可能是导致您当前遇到的问题。


0
投票

迟了四年的答案,但是如果有人遇到同样的问题,如果您使用的是越狱设备,请尝试重新启动未越狱的系统,我不确定是否有导致这种情况的特定调整,但是它有效。

© www.soinside.com 2019 - 2024. All rights reserved.