[英]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.