应用内iOS"确认您的应用内购买#34;将弹出购买清单视图

时间:2013-10-08 14:36:53

标签: ios in-app-purchase

我有一个购买清单:

item 1 $0.99 Buy
item 2 $1.99 Buy
item 3 $2.99 Buy

当我点击“购买”按钮时,将显示“确认您的应用内购买”警告窗口。无论我选择“购买”还是“取消”,此警告窗口都将消失(这是正确的),但购买列表视图控制器将弹出到其父视图控制器。我不知道为什么。

我尝试了很多方法,得到了相同的结果 - 当我点击“确认您的应用内购买”警告窗口“取消”或“购买”按钮时,列表视图控制器将弹出。告诉你为什么。

这是列表视图中的代码点击付费按钮:

- (void)buyButtonTapped:(id)sender {

    UIButton *buyButton = (UIButton *)sender;
    NSString *searchString ;
    if (buyButton.tag == 0) {
        searchString = PURCHASES_REMOVE_AD;
    }else if (buyButton.tag == 1){
        searchString = PURCHASES_COFFEE;
    }else if (buyButton.tag == 2){
        searchString = PURCHASES_MONEY;
    }
    for (SKProduct *product in _products) {
        if ([product.productIdentifier isEqualToString:searchString]) {
            [[RageIAPHelper sharedInstance] buyProduct:product];
            break;
        }
    }

}

然后我来到这个页面:

enter image description here

如图所示,当我点击“取消”或“购买”按钮时,“购买”视图控制器将消失回父视图控制器,

- (void)failedTransaction:(SKPaymentTransaction *)transaction {

    NSLog(@"failedTransaction...");
    if (transaction.error.code != SKErrorPaymentCancelled)
    {
        NSLog(@"Transaction error: %@", transaction.error.localizedDescription);
    }

    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

这是我点击取消按钮的代码,没有看到任何问题。

更新

我终于明白了。我在 - (void)applicationDidBecomeActive:(UIApplication *)应用程序中创建列表视图的父视图控制器。现在我将创建移动到 - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions :( NSDictionary *)launchOptions问题已经消失。谁能告诉我为什么?

3 个答案:

答案 0 :(得分:2)

当显示StoreKit的模态时,您的应用程序实际上会失去焦点。因此,当用户点击SK对话框中的任一按钮your application became active again时,由于您创建了控制器以响应应用程序变为活动状态,因此它创建了一个新实例,有效地隐藏了之前在屏幕上显示的内容

答案 1 :(得分:0)

我以为你没有设置SKProductsRequest的'委托'。

SKProductsRequest *request;
request.delegate = self; // self or target. did you?

我附上了参考In App Purchases: A Full Walkthrough - troybrant.net

编辑 - 2013/10/15

什么时候点击'购买弹出窗口'然后调用 - (void)applicationDidBecomeActive:方法。 so ...将重新生成购买ViewController。所以也许找不到SKProductsRequest的代表。

iOS Application life cycle

答案 2 :(得分:0)

在应用程序启动后多次调用applicationDidBecomeActive。例如,当应用程序启动时出现“位置服务”弹出窗口时,在用户单击“确定”后,将再次调用applicationDidBecomeActive方法。

我的猜测是,当弹出“确认您的应用程序内购买”对话框时,会出现同样的行为。由于您在applicationDidBecomeActive方法中重新创建父视图控制器,我的猜测就像您按下确定或购买按钮一样,父视图被完全重新初始化,从而导致意外行为。

您可以在您的applicationDidBecomeActive方法中粘贴NSLog来确认这一点。