2011-08-12 18 views
4

私はこの問題を徹底的に調査しましたが、同様の質問がありましたが、私の問題への回答は見つかりませんでした。iPhone InApp購入の問題 - canMakePaymentsは常に失敗します

「[SKPaymentQueue canMakePayments]」は常に失敗するという問題があります。コードは次のように非常に簡単です。

if ([SKPaymentQueue canMakePayments]) // 
{ 
    NSLog(@"able to make payments"); 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:g_custom_store_observer]; // Register the observer 

    SKMutablePayment *myPayment = [SKMutablePayment paymentWithProductIdentifier: strItemName]; 
    myPayment.quantity = 2; 
    [[SKPaymentQueue defaultQueue] addPayment:myPayment]; 
} 
else{ 
    NSLog(@"not able to make it"); 
    return KD_FALSE; 
} 

私はテストプロセスで何かを逃したと思います。私はこれまで

  • がiTunesConnectに私のアプリを登録してなかったことは(新しいアプリを作成し、バンドルIDを確認)
  • の権利と価格」を設定し、鉱山は「無料」アプリ
  • ですiTunesConnectの「アプリ内購入の管理」メニューから「消耗品」を追加しました。 はすべてのテキストフィールドに入力し、レビューのためにアップロードした画像があり、そのすべてが「レビュー待ち」状態になりました。
  • テストユーザーを作成しました
  • バンドルIDを確認し、適切な配布証明書でコード署名された私のアプリケーションを再構築(クリーンアンドビルド)します。バンドルIDは「iTunesConnect」ページの「App Details」に表示されているIDとまったく同じです。
  • 新しく作成したAppをiTunesConnectにアップロードしました(アップロードされたバイナリ、コードサインエラーなし)、「レビュー待ち」状態になりました。
  • 今、私はアプリ内購入作業をチェックしたいと思っていました。私は自分のアプリのデバッグ版を自分のiPadデバイス上で動かしました。これは、開発者証明書でコード署名されたデバッグモードで構築されています。まったく同じコードがiTunesConnectにアップロードされています。私のiPadで
  • 、私はiTunesStore
  • からログアウト
  • 私のアプリを私は上記のコードをトリガーすると、「canMakePayments」は常に失敗蘭。

他の正常なiPhoneアプリと異なる唯一のことは私は、OpenGLベースのゲームであるということですので、コードのほとんどは、ObjectiveC/C++で書かれたiPhoneのプラットフォーム固有詰め込むとのインタフェース、C++で書かれています。

上記のコードはC++モジュールから呼び出され、iOS固有のUIViewControllerはまだ作成されていません。私は[SKPaymentQueue canMakePayments]を呼び出す前にUIViewControllerが必要ですか?

私は何かを見逃しましたか?

ありがとうございます。

答えて

4

私は...それは完全に私の間違いだったことをとても恥ずかしいと恥ずかしい思います:$

は、私は再びここに指示 http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/ (おかげで「トロイ」)が、無ゲインを追った... 私は取り消してみました証明書とプロビジョニングプロファイルを再発行し、私のAppをAppStoreにビルドしてアップロードします。私は無駄な時間を費やしました。

最後に、私は問題が何かを発見しました。 :

(設定 - >一般 - >制限) 私は非常に長い私は子供の間違いをcomercialのものを購入することを避けるために有効に戻って覚えている...この混乱のため

申し訳ありませんが、みんな..:canMakePaymentsのドキュメントが言うつまり$

+0

ありがとうございます。ちょうど私に頭痛を救った –

0

:デバイスのユーザーはいかなる支払いをする権限を持っている場合には、YESを返します。このメソッドを呼び出すために、支払いについて何も設定していないか、支払いについて何か正しく設定しておく必要はありません。それはあなたのデバイスの設定を確認するために直接行く。

開発者は、ユーザーが支払いを行うことができないという事実に適応するための支払い関連のユーザーインターフェイスを表示する前に、これを確認する必要があります。ユーザーが支払いを行うことができない場合、アプリが合理的にうまく動作するかどうかを開発デバイスで確認します。