0

我在 App Store 上发布了一款游戏,在验证收据时,我在以下代码中遇到了几次崩溃:

-(BOOL)isTransactionAndItsReceiptValid:(SKPaymentTransaction *)transaction
{
    if (!(transaction && transaction.transactionReceipt && [transaction.transactionReceipt length] > 0))
    {
        // Transaction is not valid.
        return NO;
    }

    // Pull the purchase-info out of the transaction receipt, decode it, and save it for later so
    // it can be cross checked with the verifyReceipt.
    NSDictionary *receiptDict       = [self dictionaryFromPlistData:transaction.transactionReceipt];
    NSString *transactionPurchaseInfo = [receiptDict objectForKey:@"purchase-info"];

    ...

问题是那receiptDict不是 a NSDictionary,所以代码在路上崩溃了。怎么会这样?罐头还有其他形式transaction.transactionReceipt吗?一个错误?

这种情况很少发生,也许只有 1% 的用户会尝试购买东西?这是人黑的结果吗?

我已经检查以确保它是 and NSDictionary,但是有一个更深层次的问题,我想找到它。

4

2 回答 2

0

所以正如developer.apple所说

此属性的内容未定义,除非 transactionState 设置为 SKPaymentTransactionStatePurchased。

因此,您应该始终检查transactionState事务的状态,如果事务状态等于,SKPaymentTransactionStatePurchased那么您可以从transactionReceipt字典中获取数据。

还要考虑从 App Store 发送和接收的数据是 JSON 格式,您应该使用 JSON 解析器来检索它。

于 2013-06-16T22:18:49.003 回答
0

我们刚刚为我们的项目添加了收据验证。您可以在此处查看 ios 版本:https ://github.com/soomla/ios-store

于 2013-11-05T13:24:36.040 回答