在App Purchase沙箱中没有提示我登录/通过

时间:2012-01-18 13:08:28

标签: iphone in-app-purchase itunesconnect

我们正在开发一个(应用程序)在应用程序购买(IAP)中使用的应用程序。 我已经完成了指南中的所有内容以启用iap,一切正常,直到我想购买 一些代码:

MainViewController.m

    -(void)viewDidLoad {
            if ([SKPaymentQueue canMakePayments]) {
                    MyStoreObserver *observer = [[MyStoreObserver alloc] init];     
                    [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];        

                    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObjects: @"com.company.app.product1", @"com.company.app.product1", nil]];
                    request.delegate = self;
                    [request start];
            }
    };

    -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
            for (SKProduct *prod in response.products) {
                    NSLog(@"%@ (%@)", prod.localizedTitle, prod.price);
            }
            [request release];
    };

    -(IBAction)clickBuy:(UIButton *)__sender {
            SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.company.app.product1"];
            [[SKPaymentQueue defaultQueue] addPayment:payment];
    };

MyStoreObserver.m

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

productRequest:委托方法显示2个产品的名称/价格。就像我进入iTunes连接网站一样。

但是一旦我点击“购买”按钮,就不会弹出对话框或询问我的凭据。仅记录“SKPaymentTransactionStatePurchasing”。

而我:
- ...已在设置/存储窗格中注销 - ...我正在使用正确的配置文件
- ......我绝望了

任何?

5 个答案:

答案 0 :(得分:12)

我遇到了类似的问题,但我的做法更像是一个愚蠢的举动。我已经“重构”了对finishTransaction的调用,以便为transactionState中的每个州调用它:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                // do stuff
                break;
            case SKPaymentTransactionStateFailed:
                // do stuff
                break;
            case SKPaymentTransactionStateRestored:
                // do stuff
                break;
            default:
                break;
        }
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
    }
}

原来™,这也会在finishTransaction上调用SKPaymentTransactionStatePurchasing,这会导致崩溃。将finishTransaction移回到switch语句的每个case中都修复了该问题。

答案 1 :(得分:4)

在沮丧地解决了类似的问题之后(不是没有被要求我的凭据,它自动填写电子邮件地址,而无需更改它,即使在设置应用程序中退出商店)。我发现我在同一设备上的开发构建中遇到了一个失败的事务,我不得不清除设备队列中的所有事务,然后再次尝试测试。

NSArray *transactions = [[SKPaymentQueue defaultQueue] transactions];
for(id transaction in transactions){
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

我将此代码挂钩到IBOutlet,并在我的应用内购买运行后运行。

答案 2 :(得分:3)

我也一直把头发拉出来。原来只需重新启动测试设备即可使一切正常。

答案 3 :(得分:2)

可以限制iPhone访问Apple App Store 。例如,父母可以限制孩子购买额外内容的能力。

在进行交易之前,请确定,您能否购买?请像这样检查 -

  -(IBAction)clickBuy:(UIButton *)__sender {

      if ([SKPaymentQueue canMakePayments]) {
        SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"Product_id"];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
      }
      else {
      //show appropriate message 
      }
   }

答案 4 :(得分:0)

您是在iPhone / iPad Simulator 4.2上进行测试吗?这可能是问题所在。在iPhone / iPad上进行测试Simulator 5.0或设备将正确运行storekit。