作ったアプリを動かしていると、iosのアプリ内課金においてpaymentQueueメソッド中でのHTTP通信(POST)をさせているのですが、よく落ちていました。通信エラーが発生したときに、AlertViewを表示するようにしていて、落ちているのはそこがコールされているからでした。落ちる頻度から見て、サーバの問題では無さそうです。コードは以下のようになっています。このコードをどうすれば通信エラーが発生しないようにできますでしょうか?[[[NSOperationQueue alloc] init] addOperationWithBlock:^を使ったスレッドも試めしましたが、うまく行きませんでした。困っています。アドバイスよろしくお願いします。
lang
1- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 2 for (SKPaymentTransaction *transaction in transactions) { 3 if (transaction.transactionState == SKPaymentTransactionStatePurchasing) { 4 // 購入処理中 5 /* 6 * 基本何もしなくてよい。処理中であることがわかるようにインジケータをだすなど。 7 */ 8 } else if (transaction.transactionState == SKPaymentTransactionStatePurchased) { 9 // 購入処理成功 10 /* 11 * ここでレシートの確認やアイテムの付与を行う。 12 */ 13 [queue finishTransaction:transaction]; 14 15 NSString *postString=[NSString stringWithFormat:@"omajinai=%@&email=%@&option=%d&parity=%d",OMAJINAI,[Sparam getmyemail],option,parity]; 16 NSString *url=@"https://xxx.xxx/"; 17 NSMutableURLRequest *request=[[NSMutableURLRequest alloc] init]; 18 [request setURL:[NSURL URLWithString:url]]; 19 [request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; 20 [request setTimeoutInterval:20]; 21 [request setHTTPShouldHandleCookies:FALSE]; 22 [request setHTTPMethod:@"POST"]; 23 [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 24 25 NSData *contents = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 26 NSString *contentsString = [[NSString alloc] initWithData:contents encoding:NSUTF8StringEncoding]; 27 28 if(contentsString.length==0){ 29 [self Alert:@"アラート" message:@"通信エラーが発生したか、もしくはメンテナンス中です"]; 30 return; 31 32 } else if (transaction.transactionState == SKPaymentTransactionStateFailed) { 33 // 購入処理エラー。ユーザが購入処理をキャンセルした場合もここにくる 34 [queue finishTransaction:transaction]; 35 } else { 36 // リストア処理完了 37 /* 38 * アイテムの再付与を行う 39 */ 40 [queue finishTransaction:transaction]; 41 } 42 } 43}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。