2014-10-17 99 views
1

我的應用內購買是完美的作品,但如果我的iPhone不是在Wi-Fi和使用蜂窩連接緩慢信號或無信號我收到此消息:程序內購買崩潰的應用程序沒有互聯網連接

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',理由是:「無效的產品標識:(null)的

我應該檢查前啓用Internet連接按鈕?我希望有更簡單的方法。所有我需要的是從StoreKit.

更新

對於我使用的一點點修改this guide from raywenderlich.com.我的應用內購買代碼捉不到連接錯誤,你也可以下載the test project.

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

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

+0

您應該修正的原因您發佈的錯誤。你的代碼似乎沒有做適當的結果檢查。無論您是否進行適當的「可達性」檢查,都應該這樣做。 – rmaddy 2014-10-17 22:29:12

+0

@rmaddy我更新了與源代碼鏈接的問題。感謝您的評論。 – 2014-10-17 22:42:40

+0

而不是要求人們下載,構建和測試你的應用程序,你需要做的只是在你的問題中發佈相關的代碼。相關的代碼是實際導致崩潰的代碼。 – rmaddy 2014-10-17 22:44:20

回答

1

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

- (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]; 

}

你是絕對不想來顯示警報時,用戶點擊取消。

我也阻擋按鈕,如果以下成功BOOLYES.

requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) 
3

鬆開代表在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 
} 
+0

謝謝!我的理解是否正確,發佈委託會殺死破碎的SKRequest實例? – 2014-10-18 00:31:44

+0

@borisy是的,我在代碼中發生過這種情況。 – 2014-10-18 09:52:36