私はサンドボックスユーザーを設定し、iPhoneデバイス上の1か月の自動更新サブスクリプションにサブスクライブしました。ユーザーのサブスクリプションが終了したかどうかを検出するにはどうすればよいですか?それは最終的に、この方法およびロジックを呼び出します有効期限の自動更新サブスクリプションの確認
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
:
私は、次のコードを持っている
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
for (SKPaymentTransaction *transaction in queue.transactions) {
if (transaction.transactionState == SKPaymentTransactionStateRestored) {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
[self setSubscriptionActive]; // <-- Probably not the right way to restore subscriptions?
return; // Return because we have successfully set the subscribed state of the app.
}
}
[self purchase:self.validProduct]; // No valid transactions, so ask them to purchase.
}
私の問題は私の現在のロジック、そのなって二時間になりましたし、このテストを与えられたということですユーザーは常にコード行[self setSubscriptionActive];
になります。したがって、彼のテストアカウントで支払った唯一の支払い額は常にSKPaymentTransactionStateRestored
です。 according to the documentation from Table 3-1 (Subscription durations for testing)が期限切れになることを期待しています...今私は何か間違っていますか、誰かがこの1ヶ月/タイムリーな定期購読の有効期限が切れているかどうかを検証する正しい方法を知っていますか?
私は、受信確認の記事に続いて、Appleのサンドボックスサーバー上の領収書をJSONに照会しようとしました。慎重にこのデータを見て、すべてがあり、これを破らどのように自分の目で確かめてください:私が見る二つの問題があります
"original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
"original_purchase_date_ms" = 1375340400000;
"original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
"receipt_creation_date" = "2016-08-18 01:05:09 Etc/GMT";
"receipt_creation_date_ms" = 1471482309000;
"receipt_creation_date_pst" = "2016-08-17 18:05:09 America/Los_Angeles";
"receipt_type" = ProductionSandbox;
"request_date" = "2016-08-18 01:05:09 Etc/GMT";
"request_date_ms" = 1471482309971;
"request_date_pst" = "2016-08-17 18:05:09 America/Los_Angeles";
:
は、これが最初の購入ですが、まだそれは
2013-08-01 07:00:00 Etc/GMT
のoriginal_purchase_date
を示しています。私は今日それを購入しました。この時間は8月17日のどこにもありません。これは非常に間違っています。receipt_creation_date
は、2016-08-18 01:05:09 Etc/GMT
である。request_date
は2016-08-18 01:05:09 Etc/GMT
です...私は領収書を作成した分割をWebリクエストにしなければなりませんでした。私はrequest_date
(このゴミのAPIの多くのようなもの)は有効なインターネット時刻が記録されていないので、(ローカル時間の代わりに)それとreceipt_creation_date
の間のデルタ時間を比較するために使用できると仮定しています。神様はこのような悪夢です...誰も誰もがこのような複雑でばかげたバックエンドシステムを作れるようにするのはなぜですか?これは絶対に恐ろしいことです。 Appleの他のAPIは一般的に優れているので、そのような残念なことです。