質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

解決済

1回答

1643閲覧

iosのアプリ内課金においてpaymentQueueメソッド中でのHTTP通信で困っています

hakase

総合スコア107

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2015/07/05 01:51

作ったアプリを動かしていると、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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

課金が終わったら画面をdismissするようにしていたのが原因でした。お騒がせしました。

投稿2015/07/06 02:26

hakase

総合スコア107

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問