問題タブ [skpaymenttransaction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1286 参照

ios - ユーザーが InApp Purchase の時間ベースのサブスクリプションでデバイスの現在の日付を変更した場合はどうなりますか?

iOS アプリに消耗品の InApp Purchase を実装しました。ユーザーはコンテンツを見るために料金を支払う必要があり、24 時間で有効期限が切れます。

ユーザーが支払いを行うと、サーバーにcurrent date&expiration dateを送信します。purchase dateこれで、特定のログイン ユーザーのコンテンツ リストをフェッチすると、サーバーが返されます。たとえば、ユーザーPatrickがアプリにログインすると、コンテンツのリストを表示できます。その Web サービスでは、そのユーザーの有効期限も取得し、その時間に基づいて有効期限を表示します。有効期限が過ぎている場合は、すべてのコンテンツ リストのセルに BUY ボタンが表示されます。

私のアプリの大きな懸念は、ユーザーが現在の日付をデバイスから変更することです。ユーザーが現在の日付を定期的に変更し、自分のデバイスが に到達する機会を与えない場合、ユーザーはexpiration date永遠にコンテンツにアクセスできます。

この状況を克服するための最善の解決策は何ですか? これが私が立ち往生しているポイントです。

0 投票する
1 に答える
420 参照

ios - iTunesサインインアラートをトリガーするもの

複数の非消耗品を購入できる新しいストア機能をアプリに実装したいと考えています。私は先に進み、すべてを希望どおりに設定しましたが、実際に機能します。残念ながら、アプリが起動されるか、バックグラウンドからアクティブになるたびに、iTunes へのサインインを求めるアラートが表示されます。

これは、アプリをダウンロードした場合に表示されるアラートと同じです。これがサンドボックス環境であることについては何も述べていません。このアラートをトリガーする可能性のあるコード行を見つけようとしました - この新しいストア機能のコードを裸のグラフィックスケルトンにコメントしましたが、alt は残っています。iTunes からサインアウトしてサインインしようとしましたが、iPod を再起動しましたが、何も役に立ちません。現在のアプリ バージョンを AppStore から再インストールすると、アラートは消えます。

私の質問は、このアラートを正確にトリガーするものは何ですか? これをデバッグする方法はありますか? 事前に感謝します。

0 投票する
0 に答える
226 参照

ios - アプリ内購入 - 購入の復元が機能しませんか?

私のアプリケーションでは、ユーザーは PRO メンバーシップを購入してロックを解除できます。

ユーザーが PRO メンバーシップを購入するビュー コントローラーのコードは次のとおりです。

どういうわけか、復元購入が機能していないようです..サンドボックスユーザーを使用してテストしています。何をすべきか提案はありますか?アイテムを購入することは問題なく機能しますが、アイテムを購入した同じユーザーで購入を復元しようとすると、機能しません。私のコードに何か問題がありますか、それとも何か違うことをしますか?

0 投票する
1 に答える
283 参照

ios - SKPaymentTransactionObserver でビューを開いた後、アプリが Apple ID を要求し続ける

したがって、IAP を使用した ViewController に問題があることはわかっていますが、修正方法は不明です。

クラスのデリゲートを追加SKPaymentQueue.defaultQueue().addTransactionObserver(self)して用意します。.viewDidLoadSKProductsRequestDelegate, SKPaymentTransactionObserver

私はこれらの方法を使用して、購入のトランザクションを実行し、購入を復元し、非消耗品の購入に必要な変更を行います。

しかし、ユーザーが何をしてもIAPViewController、アプリをロードした後、ユーザーにログインを求め続けます。ほとんどの場合、ユーザーがアプリを終了してから再び開くときです。

SKPaymentQueue.defaultQueue().removeTransactionObserver(self)ビューを閉じるときに追加しようとしましたが、うまくいかないようでした。

誰にも何か提案はありますか?? このバグのため、アプリをレビューから除外する必要がありました:(

完全なコードは次のとおりです。

0 投票する
2 に答える
4558 参照

ios - iOS の IAP 領収書の検証

Apples IAP と StoreKit フレームワークを使用してサブスクリプションを購入するクライアント/サーバー アプリケーションに取り組んでいます。

私たちが望むのは、クライアント (iPhone または iPad) が StoreKit フレームワークを使用して iTunes アカウントを介して Apple で最初のサブスクリプションを購入し、レシートをサーバーに渡すことです。サーバーはレシートを検証し、ユーザー アカウントのステータスを更新します。また、サーバーがサブスクリプションのステータスの管理 (自動更新、キャンセルなどのチェック) を担当することも望んでいます。これはすべて、現在廃止されている iOS 6 スタイルのトランザクション レシートではなく、iOS 7 スタイルの appleReceipts を使用しています。

Apple のドキュメントでは、次の URL に POST して、サンドボックス内のレシートとシークレット コードを検証するように指示されています。

https://sandbox.itunes.apple.com/verifyReceipt

この時点まで..すべてが正常に機能します。

私が混乱するのは、応答です。Apple のドキュメントによると、応答には最大 4 つのフィールドが必要です。iOS 7 スタイルのアプリの領収書を検証している場合は、最初の 2 つだけを期待する必要があります。iOS 6 スタイルのサブスクリプション トランザクションの領収書である場合は、4 つすべてを見る必要があります。

1) ステータス (有効な場合は 0、それ以外の場合は何らかのエラー コード)

2) レシート (送信されたレシートの JSON 表現)

3) latest_receipt (自動更新サブスクリプションの iOS 6 スタイルのトランザクション領収書に対してのみ返されます。最新の更新の base-64 でエンコードされたトランザクション領収書。)

4) latest_receipt_info (JSON形式で上記と同じ)

問題 1: iOS 7 スタイルのアプリ レシートを検証しているにもかかわらず、4 つすべてが表示されます。ドキュメントは、それが起こってはならないと言います。

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1

問題 2: 最初の購入後にクライアントが渡した元のアプリの領収書を使用してこの API をポーリングすることにより、サーバーがユーザーのサブスクリプション ステータスを維持できるようにしたいと考えています。このlatest_receipt_infoフィールドには継続的に更新されたトランザクションのリストが含まれているように見えますが、receiptフィールドは元のコピーであり、更新されたトランザクション情報はありません。

私の質問: サーバーが更新されたトランザクションに関する情報を取得できる唯一の方法は、latest_receipt_infoまたはlatest_receiptフィールドを見ることですが、ドキュメントによると、これらのフィールドは応答に存在することは想定されていないようです。

これは Apple のドキュメントの誤りですか? または、トランザクションの最新のセットを取得する唯一の方法は、クライアントから通知を受けたときに更新された AppReceipts をクライアントに送信させることSKPayementTransactionObserverですか?

編集-以下のコメントに従って、実行した手順といくつかのコードを追加します。

1) SKPaymentQueue を使用して autoRenewSubscription 製品を購入する:

2) 支払いが完了すると、SKPaymentTransactionObserver からコールバックがあり、次の URL にファイルを送信します。

私のリモートサーバーに。

3) 次の python コードを使用して領収書を検証しています

応答には辞書が含まれています。ディクショナリには次のフィールドがあります

ドキュメントによると、最初の2つのフィールドは

「自動更新サブスクリプションの iOS 6 スタイルのトランザクション レシートに対してのみ返されます。」

  1. iOS 7 スタイルのアプリの領収書を検証していたのに、なぜここに表示されるのですか?
  2. これらのフィールドが存在しない場合、最新の取引情報を取得するにはどうすればよいですか?
0 投票する
2 に答える
894 参照

ios - 自動更新サブスクリプションを使用する iOS IAP で、同じファミリーに同じ期間の複数の製品がある

私は現在、ユーザーが自動更新サブスクリプションを購入して毎月請求されるサービスにアクセスできるようにする iOS アプリに取り組んでいます。基本サービスとプレミアム サービスを提供し、ユーザーがいずれかからアップグレードまたはダウングレードできるようにしたいと考えています。

テスト ユーザーといくつかのテスト製品をセットアップしましたが、最初にベーシック サブスクリプションを選択し、後でプレミアム サブスクリプションを購入することを選択した場合、テスト ユーザーは両方のサービスに対して同時に課金されることがわかりました。

ユーザーがサービスをアップグレードまたはダウングレードしたことに気付いたときに、ユーザーの現在のサブスクリプションをプログラムでキャンセルできるかどうかを知っている人はいますか?

このリンクを使用することを見てきました https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions ユーザーがサブスクリプションを手動で管理できるようにしますが、新しいプランへの移行を処理したいと思います自動的。

0 投票する
1 に答える
405 参照

ios - Swift In-App-Purchase: サインインするための絶え間ないプロンプト。.finishTransaction の処理が間違っていますか?

非消費型 IAP を多数含めていますが、アプリをロードするときに問題が発生します。これは、セットアップしたテスト アカウント ユーザーにログインするように常に求められるように見えるためです。

同様の質問を見た後、これは、最初に次の行を各 .case に追加できなかったためだと思います。

以下のコードからわかるように、これは各 .case に追加されます。再テストするために、追加のテスト アカウントを作成しましたが、まったく同じ結果が得られます (各 viewDidLoad で、2 つのテスト アカウントにログインするように求められます...)。

SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) が期待どおりに機能していないと思いますか?

どんな助けでも大歓迎です。

に続く

この問題が発生したのは、finishTransaction が期待どおりに機能していないためですか、それとも元のトランザクションが「スタック」したためですか?

編集: ここで SKPaymentQueue.defaultQueue().addPayment(payment); を呼び出します。