4

自動更新可能なサブスクリプションを処理するためにMKStoreKitを使用しています。現在、1か月のサブスクリプションをテストしています(テストでは、サブスクリプションは5分間続きます)。サブスクリプションを購入した後、有効期限が切れるのを待ちます。有効期限が切れたら、サブスクリプションがまだアクティブかどうかを確認します。

[[MKStoreManager sharedManager] isSubscriptionActive:kSubscriptionMonthlyIdentifier]

これは私が期待するようにfalseを返します。ただし、自動更新であるため、その時点でMKStoreKitがAppleに連絡してサブスクリプションを再検証することを期待しています。MKStoreKitを間違って使用している可能性がありますが、ドキュメントブログ投稿によると、次のように単純である必要があります。

//App Delegate
[MKStoreManager sharedManager];
//lets me know when the subscription was purchased
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subscriptionPurchased:) name:kSubscriptionsPurchasedNotification object:nil];    
//lets me know when the subscription expires
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subscriptionFailed:) name:kSubscriptionsInvalidNotification object:nil];

//In a view with subscription feature
if([[MKStoreManager sharedManager] isSubscriptionActive:kSubscriptionMonthlyIdentifier]){
    //access to subscription feature
}

//Where the user would purchase the subscription
[[MKStoreManager sharedManager] buyFeature:subscriptionId onComplete:^(NSString* purchasedFeature, NSData* receiptData)
{
...
}
 onCancelled:^
{
...
}

私の質問は、サブスクリプションがApple側でまだアクティブなのに、MKStoreKitが私に知らせないのはなぜですか?

4

1 に答える 1

3

ドキュメントには次のように書かれています。

テストのために、本番環境とテスト環境の自動更新可能なサブスクリプションの動作にはいくつかの違いがあります。

更新は加速された速度で行われ、自動更新可能なサブスクリプションは1日あたり最大6回更新されます。これにより、アプリがサブスクリプションの更新をどのように処理するか、経過後の更新をどのように処理するか、ギャップを含むサブスクリプション履歴をどのように処理するかをテストできます。

有効期限と更新率が加速するため、システムがサブスクリプションの更新を開始する前にサブスクリプションが期限切れになり、サブスクリプション期間にわずかな経過が残る可能性があります。このような失効は、さまざまな理由で本番環境でも発生する可能性があります。アプリがそれらを正しく処理することを確認してください。

次のことを試していただけますか:

  1. より長いサブスクリプション期間をテストして、「システム」がサブスクリプションを更新するためのより多くの時間を確保できるようにしますか(6か月= 30分、1年= 1時間)?
  2. タイマーを実行して、サブスクリプションが長期間後に更新されるかどうかを確認し続けますか?
  3. 購入を復元して更新を強制しますか?

また、ここで詳しく説明するように、サブスクリプションは1つのテストアカウントに対して1日6回しか更新できないため、チェックする前にサブスクリプション期間を6回以上待機していないことを確認してください。

自分のアプリでこれを実装し始めようとしているので、同じ状況が発生した場合は返信します。

アップデート:

自動更新は、有効期限が切れる24時間前の期間にアプリが起動されたときに発生することを(どこかで)読みました。これをサンドボックスで複製するのは難しいかもしれません。アプリのレシートを更新するか(> = iOS 7)、最新の購入からのレシートを再確認する(<iOS 7)ことで、更新を強制することもできます。

私はあなたの熟読のために私の実装をgithubに投稿しました。

于 2013-10-16T23:29:47.477 に答える