gpt4 book ai didi

ios - 尝试购买时应用内购买崩溃

转载 作者:行者123 更新时间:2023-12-02 02:41:06 24 4
gpt4 key购买 nike

尝试使用 iAP 购买时,应用程序崩溃并显示在 Xcode 中。我从某人那里购买了这段代码,但没有其他人在评论页面上提示 iAP 的错误,我可以发誓我测试过并且之前工作得很好。我什至尝试了新的项目,但它仍然崩溃。我也只是编码的初学者,所以我可以做基本的事情,但请具体说明,我很感激。我认为它与规定配置文件或证书没有任何关系,因为它在代码中是正确的。而且已经有一段时间了,可能听起来很愚蠢,但是是否需要在 iTunes 中配置所有内容并使用相同的 bundle ID 和 iAP 信息连接才能工作?我已经尝试了所有设置,但仍然不起作用。无论如何,代码不应该崩溃。请看一下,我将发布屏幕截图和代码。

screen of error

我的 AppController.mm 中与 iAP 有关的大部分代码都在这里:(抱歉,不知道为什么它的代码格式会很奇怪......我只是复制并粘贴。所以我只想放置错误部分)

    - (void) openRestore:(NSObject*)prms
{

[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];

}



- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

NSArray *myProduct = response.products;
NSLog(@"%@",[[myProduct objectAtIndex:0] productIdentifier]);

SKPayment *newPayment = [SKPayment paymentWithProduct:[myProduct objectAtIndex:0]];
[[SKPaymentQueue defaultQueue] addPayment:newPayment];


}

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}

最佳答案

根据您发布的屏幕截图,会发生以下情况:您的应用程序从服务器请求产品列表。服务器响应说没有产品(即空数组)。然后,应用程序尝试将数组中第一个产品的信息打印到控制台(即索引“0”处的产品)。由于空数组中没有索引 0,因此它会因 索引越界 异常而崩溃。

因为您的代码强烈期望始终至少返回一个产品(这似乎不是一个很好的设计选择,但这是另一点),所以直接原因似乎很可能是此特定崩溃的背后是 iAP 未为此应用程序正确设置。您的 iAP 处理代码没有看到它期望看到的内容。

我建议引用documentation如何createtest为您的应用程序内购买产品。

编辑(回答扎克在评论中的请求):

嗯,让应用程序不在这个特定位置崩溃很容易,但就像我说的,如果设置不正确,应用内购买本身不会神奇地工作。

为了防止您发布的代码崩溃,您可以添加显式检查以确保产品数组不为空,如下所示:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

NSArray *myProduct = response.products;

if (myProduct.count > 0) {
NSLog(@"%@",[[myProduct objectAtIndex:0] productIdentifier]);

SKPayment *newPayment = [SKPayment paymentWithProduct:[myProduct objectAtIndex:0]];
[[SKPaymentQueue defaultQueue] addPayment:newPayment];
}
}

关于ios - 尝试购买时应用内购买崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com