簡體   English   中英

在沒有互聯網連接的情況下,應用內購買崩潰的應用

[英]In-App Purchases Crashing App With No Internet Connection

我的應用內購買功能非常完美,但是如果我的iPhone不在Wi-Fi上,並且使用蜂窩連接且信號較慢或沒有信號,我會收到以下消息:

由於未捕獲的異常“ NSInvalidArgumentException”而終止應用程序,原因:“無效的產品標識符:(空)”

在啟用“ 購買”按鈕之前,我應該檢查互聯網連接嗎? 我希望有更簡單的方法。 我需要做的只是從StoreKit.捕獲任何連接錯誤StoreKit.

更新資料

對於我的應用內購買代碼,我正在對raywenderlich.com的本指南進行一些修改 您也可以下載測試項目。

我的應用程序適用於iOS 8和7,本教程適用於iOS6。也許是個問題。

我只添加了(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error用於在恢復應用程序和SKPaymentTransactionStateDeferred情況時捕獲錯誤。

didFailWithError方法中釋放委托以防止崩潰:

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@"Failed to load list of products.");
    _productsRequest = nil;
    _completionHandler(NO, nil);
    _completionHandler = nil;

    request.delegate = nil; // Release the delegate
}

為防止崩潰,我需要在此方法內添加一些代碼,以防止用戶進行購買。

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@"Failed to load list of products.");
    _productsRequest = nil;
    _completionHandler(NO, nil);
    _completionHandler = nil;
}

在飛行模式下測試時,這非常完美。 我們還需要一個錯誤處理程序,以防在顯示“應用內購買”屏幕后關閉飛行模式並在點擊“ 購買”之前打開飛行模式 並且如果信號在購買過程中消失。

我們應該處理SKPaymentTransactionStateFailed情況:

- (void)failedTransaction:(SKPaymentTransaction *)transaction
{
// failedTransaction
if (transaction.error.code != SKErrorPaymentCancelled)
{
    NSLog(@"Transaction error: %@", transaction.error.localizedDescription);
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
    // Update UI and / or post error message
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];

}

當用戶點擊“ 取消”時,您絕對不希望顯示警報

如果成功之后BOOL不是YES.我也將阻止購買按鈕YES.

 requestProductsWithCompletionHandler:^(BOOL success, NSArray *products)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM