自動継続型購読プロダクト(Auto-Renewable Subscriptions)を購入するとレシートが発行されます。
このレシートをStore Kitを使ってVerifyReceipt(レシートの有効性確認処理)をおこなうと、下記のようなJSONデータが返ってきます。
receipt: { "latest_expired_receipt_info" = { "expires_date" = 1306118975000; }; receipt = { }; status = 21006; }
このJSONデータのexpires_date
に該当のレシートの有効期限が含まれています。この値と現在の日時を比較することで今現在の契約が有効かどうかを検証することができます。
expires_dateは、UNIX時刻で返ってきます。UNIX時刻は、UNIX時間、UNIX時刻とPOSIX timeなどさまざまな呼ばれ方をされていますが、1970年1月1日0時0分0秒からのミリ秒で表されます。
現在時刻は、NSDateクラスのdateメソッド
で取得することができますが、この数字だけではいつレシートの有効期限が切れてしまうか比較することができません。
UNIX時刻からNSDate型へ変換する
UNIX時刻からNSDate型へ変換するには、NSDateクラスのdateWithTimeIntervalSince1970:メソッド
を使用します。
dateWithTimeIntervalSince1970:メソッド
は、1970年1月1日0時0分0秒から指定した秒分だけ進んだNSDate型の時間を返してくれます。
単位を合わせる為に、expires_dateを1000で割っておきましょう。
// さきほどのJSONデータをパースした"expires_date" NSString* data = @"1306118975000"; // ms -> sec NSTimeInterval interval = [data doubleValue] / 1000; NSDate* expiresDate = [NSDate dateWithTimeIntervalSince1970:interval]; NSLog(@"%@", expiresDate);
これで現在の時刻と比較すれば、有効期限がどれくらいかが判るかと思います。