2017-12-01 12 views
0

私たちはiOSアプリでアプリの購入を喜んで処理しています。コードはしばらくの間使用されていたため、paymentQueue:updatedTransactions:メソッドがStore Kitによって呼び出されたときに取得するトランザクションでは、現在非推奨のtransactionReceiptプロパティが使用されています。私たちはその領収書を私たちのサーバーに送ります。私たちのサーバーは、Appleのサーバーへの投稿を通じてそれを検証し、サーバー上で何をする必要があるのか​​を確認し、私たちのアプリケーションに "成功"を報告します。よく働く。iOSアプリ内購入トランザクション受領書とアプリストア受取人番号

サブバンドベースの製品を追加したいので、メインバンドルのappStoreReceiptURLプロパティを使用してIAPを再実装し、そこからアプリケーションレシートを読み込む必要があります。私には分からないことがいくつかあります。

paymentQueue:updatedTransactions:が呼び出されたとき、私は同じSKPaymentTransactionStatePurchasedの状態を取得します。今のところ、Appleに提出すると、私はJSONを表示しています。私は戻ってきます。ステータスはゼロではないので、サンドボックスサーバーに送信して、それから戻ってくるものも表示します。問題は、私はこれを取得、両方の例である:

{"status":21002, "exception":"com.apple.jingle.mzfairplay.validators.DrmInvalidArgumentException"}

私はこれは私がデバッグビルドを実行している、というわけではないシムにいるという事実とは何かを持っている疑いがある - それは、実際のデバイス上で実行しています。それを回避するために、私はTestFlightを通してダウンロードできるようにApp Storeにビルドをアップロードしようとしましたが、私は自分のサンドボックスのApple IDを使用しているので、TestFlightはそれをインストールすることを拒否します。

私はこの「DrmInvalidArgumentException」を取得していますが、実際にデバイスをビルドして、サンドボックスのApple IDを使用して購入してデバッグするように正しく設定しています。

2番目の質問は私には困惑しています。私はそれを理解するので、私はまだpaymentQueue:updatedTransactionsを介して通知を受け取りますが、私はそこにアクセスするトランザクションを繰り返しますが、トランザクションで領収書を提出する代わりに、メインのURLからアプリ領収書を送信しますバンドル。これまでにすべてのIAP購入品が入っていて、新しいものや私が興味を持っているものを理解するために、すべてを繰り返していく必要があります。

フローが正しくないようです。トランザクションに基づいて通知を受けていますが、アプリの領収書に含まれるすべてのIAPトランザクションのダンプを確認しています。だから私はおそらく流れを正しく理解することはできません。

答えて

1

ステータス21002はThe data in the receipt-data property was malformed or missing.です。検証エンドポイントへのPOSTの本体は、receipt-dataキーと、iTunes Connectから取得できるアプリ固有の共有秘密情報を含むpasswordキーを含むJSON dictでなければなりません。

領収書をテストするのにthis toolを試してみるとよいでしょう。 TestFlightを使う必要はありません。iTunes Connectで作成できるサンドボックスのiTunesアカウントを使用している限り、デバッグビルドですべてうまく動作するはずです。

あなたの説明は正しいです、あなたは、購入された取引ごとに領収書全体を送付したいでしょう。これは冗長です。毎回同じ領収書データを送信しないようにするためにアプリサイドキャッシュを保持する可能性がありますが、いつでもappStoreReceiptURLの内容を変更することは可能です。

サブスクリプションを実装する多くのトリッキーなエッジケースがあります。私はRevenueCatを作成しました。 Appleは本当に私の意見では、既存のIAPのものにうまくいきませんでした。

+0

まだ私のサブスクリプションを追加していません - 私はすでに行っていることを処理できることを確認するために既存の製品でテストしています。私は、辞書に自動更新可能なサブスクリプションが含まれている場合にのみ、パスワードが必要であるという印象を受けています。 – Craig

+0

プラス記号。 base64文字列をパーセントエンコードする必要があります。なぜ私の他の領収書がOKを通過しているのか分かりません。 RevenueCatももう一度見ていきます。 – Craig

+0

ああ、これはURLの内容をどのようにエンコードするかです: 'NSString * fetchToken = [data base64EncodedStringWithOptions:0];'。 RevenueCatの実装[オープンソース](https://github.com/revenuecat/purchases-ios)は、私がどのように動作しているかを見たい場合に使用します。 –

関連する問題