iRSSの日記

はてなダイアリーiRSSの日記の続き

アプリ内ストアの定期購読型(Auto-renewable Subscriptions)に関するメモ

Sandboxでのテスト

Sandboxの世界では、時間が早回しですすむ。

Actual Duration Sandbox Duration
1 week 3 minutes
1 month 5 minutes
2 months 10 minutes
3 months 15 minutes
6 months 30 minutes
1 year 1 hour

1年が1時間。1年(1時間)までで、その後の自動更新はテストではされない
After the subscription has auto-renewed 6 times, it will no longer renew in the sandbox. The compressed duration times are as follows:
ということで、自動更新は6回まで。1ヶ月だと、半年で自動更新しなくなるので、注意。

筆者がいろいろ実験して確かめたところ、サンドボックス環境ではiTunes Connectで設定した購読期間ごとに、短い期間で購読の自動更新が機能するようです。例えばiTunes Connectで購読期間を7日間に設定していれば3分、1年間で設定していれば1時間で期限切れになります。

定期的に有効期限を確認

起動時やバックグラウンドから復帰した場合に、有効期限を確認するようにします。

Restoring Auto-Renewable Subscriptions

最新のレシートを確認するとexpires_dateとoriginal_purchase_dateが記載されているが、original_purchase_dateは定期購読が最初に始まった時期。途中で定期購読を中断していても、その期間を除くには情報が足りない。

    receipt =     {
        bid = "jp.co.hoge.hoge";
        bvrs = "1.0";
        "expires_date" = 1319734039000;
        "expires_date_formatted" = "2011-10-27 16:47:19 Etc/GMT";
        "item_id" = 476223202;
        "original_purchase_date" = "2011-10-27 15:19:18 Etc/GMT";
        "original_transaction_id" = 1000000012;
        "product_id" = KATO01;
        "purchase_date" = "2011-10-27 16:42:19 Etc/GMT";
        quantity = 1;
        "transaction_id" = 1000000011;
    };

レシートはただしいが、有効期限が切れているというstatusはありそうな話。

Status Code 21006
This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.
Verifying an Auto-renewable Subscription Receiptの戻り値を見てstatus=21006のときは、期限切れをユーザーにフィードバックすべし。

SKPaymentTransactionStateRestoredでリストアしたときに、でもtransactionReceiptにレシートが入る

リファレンスにはSKPaymentTransactionStateRestoredのときは、originalTransaction.transactionReceiptにレシートがあるように書かれているのだが、その通りにかえってこない。仕様なのか、バグなのか、Sandboxだけの現象なのか、誰か教えてください〜

transactionReceipt
The contents of this property are undefined except when transactionState is set to SKPaymentTransactionStatePurchased.