2011-06-30 10 views
22

乾杯、SKProductsRequest - タイムアウト/接続エラーを処理する方法は?

SKProductsRequestはタイムアウトや接続エラーを何とか処理しないようです。成功の場合には代理人に-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)responseを呼び出します。

私は、製品の検索中に何らかの種類のアクティビティインジケータを提示したいのですが、アプリストアにアクセスできない場合はアラートをポップアップしたいと考えています。しかし、(失敗の場合)SKProductsRequestからのフィードバックはありませんので、私はそのフィードバックの提示を結びつけて、それから任意の時間を待っていなければなりません。

質問は次のとおりです。要求が失敗したと想定するのに十分な時間がありますか?または、私が見たことがない保留中のリクエストのステータスを確認する方法はありますか?

答えて

44

私は(SKProductRequestを含ん)SKRequestが失敗した時はいつでものための私のプロジェクトでこれを実行します。

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error 
{ 
    alert = [[UIAlertView alloc] initWithTitle:@"In-App Store unavailable" message:@"The In-App Store is currently unavailable, please try again later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 

    [alert show]; 
} 

は御馳走を動作します。もちろん、括弧の中に何かを入れてアラートを置き換えることもできますが、これはユーザーにとってはうまくいきます。

ご希望の場合はこちらをご利用ください。

注: ではなく、SKProductsRequestDelegateですが、やや混乱します。 SKRequestDelegateは、購入および製品要求に使用されます。 request.delegateを使用して設定されたデリゲートセットは、両方のメソッドを実装できます。

+1

!!!!!!私はこれを見ていないとは信じられない...私はエラーハンドラがなければならないと思ったので、私はSKProductDelegateプロトコルを100回チェックした。驚くばかり!ありがとう、おいおい! – Toastor

+0

私はあまりにも、ドキュメントでこれを気付かなかった.. – Brynjar

+0

しかし、このメソッドは、SKProductsRequestDelegate Protocol Referenceに記載されていませんか?少なくともhttp://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequestDelegate/Reference/Reference.html –

2

私はあなたが任意の時間を待つ以外の何かをすることはできないと信じています。いくつかの私のアプリでは、30秒間待ってから(モーダルアクティビティビューを表示している)、一般的なエラーアラートで修復します。問題は、実際には30秒はそのような問題のほとんどのユーザーの注意の範囲を超えていますが、それを短くして有用な(例えば15秒)ようにすると、実際は早すぎる可能性があります。

私はもっと良い選択肢はないと思っています...しかし、私はそうでなければ学ぶことを望んでいます!

+0

ロジャー、私はあなたから離れて受け入れることを申し訳ありませんが、サミュエルズの答えは本当に良い呼び出しです。それを見て、私はあなたが私と同じくらい驚いていると思います。なぜなら、それはとても明らかです...私は私たちがこのことを見過ごしていたことに驚いています... – Toastor