1

我有一个采购清单:

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;
        }
    }

}

然后我来到这个页面:

在此处输入图像描述

正如您在这张图片中看到的,当我单击“取消”或“购买”按钮时,“购买”视图控制器将消失回父视图控制器,

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

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

    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

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

更新

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

4

3 回答 3

2

当显示来自 StoreKit 的模式时,您的应用程序实际上失去了焦点。结果,当用户点击 SK 对话框中的任一按钮时,您的应用程序再次变为活动状态,并且由于您创建控制器以响应应用程序变为活动状态,因此它创建了一个新实例,有效地隐藏了以前在屏幕上的内容.

于 2013-10-16T22:16:09.903 回答
0

我以为您没有设置 SKProductsRequest 的“代表”。

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

并且我在应用程序购买中附上了参考:完整的演练 - troybrant.net

编辑——2013/10/15

在调用 - (void)applicationDidBecomeActive: 方法之后,什么时候点击了“Purchase Popup”。所以...购买 ViewController 将被重新生成。所以可能找不到 SKProductsRequest 的代表。

iOS 应用程序生命周期

于 2013-10-15T02:59:47.900 回答
0

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

我的猜测是,当“确认您的应用内购买”对话框弹出时,也会发生同样的行为。由于您在 applicationDidBecomeActive 方法中重新创建父视图控制器,我的猜测是当您按下 OK 或 BUY 按钮时,父视图被完全重新初始化,这导致了意外行为。

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

于 2013-10-17T14:55:37.783 回答