我有一个购买清单:
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 *)应用程序中创建列表视图的父视图控制器。现在我将创建移动到 - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions :( NSDictionary *)launchOptions问题已经消失。谁能告诉我为什么?
答案 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的代表。
答案 2 :(得分:0)
我的猜测是,当弹出“确认您的应用程序内购买”对话框时,会出现同样的行为。由于您在applicationDidBecomeActive方法中重新创建父视图控制器,我的猜测就像您按下确定或购买按钮一样,父视图被完全重新初始化,从而导致意外行为。
您可以在您的applicationDidBecomeActive方法中粘贴NSLog来确认这一点。