3

我想使用服务器端验证我的应用内购买。所以我使用以下代码:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction * transaction in transactions) {

        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
            {
                NSData *reciptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
                if(reciptData) {
                    NSDictionary *parameters = @{@"receipt_data" : [reciptData base64EncodedStringWithOptions:0]};//App crashes here -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
                }
            }
                break;

            default:
                break;
        }
    };
}

最奇怪的是,应用程序在一台装有 iOS 8.0.2 的 iPad 上崩溃,而在另一台装有相同 iOS 版本的 iPad 上却没有崩溃。

最糟糕的是,我无法访问应用程序崩溃的设备。

据我了解- base64EncodedStringWithOptions:退货nil,但我不知道为什么。

谁能帮我?

4

1 回答 1

0

在设备运行某种形式的应用内购买破解程序(例如“IAP Free”或“IAP Cracker”之前,我已经看到这个空收据问题,这意味着设备已越狱并且已安装应用内购买破解工具. 我会确保应用程序崩溃的设备没有运行某种形式的应用内购买破解工具。您可以做的另一件事是忽略空收据 - 但不要退回任何商品以避免崩溃或退回仅在当地可用的商品。这取决于您希望如何对破解应用内购买的人做出反应 - 有时最好假装这一切都在本地工作,但限制服务器的功能。

于 2014-10-20T23:30:23.957 回答