9

自動再生可能サブスクリプションを実装しています。その中で、以下の質問があります

有効期限が切れた後でも、ユーザーはサブスクリプション コンテンツを復元できますか?

もしそうなら、どうすればそれらを検証してダウンロードさせることができますか

4

2 に答える 2

5

自動更新サブスクリプションの復元をご覧ください

基本的に、電話する必要があり、[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]復元されたトランザクションが返されます。originalTransaction物件を見たほうがいいです。各取引の取引日がわかります (期限切れのものも)。次に、製品 ID を確認すると、アプリは各製品 ID のサブスクリプションの期間を知る必要があります。また、各トランザクションの開始日と期間がわかっているため、サブスクリプションが有効であった期間を計算できます。それらを他のトランザクションと同様に検証します-サーバーに送信し、サーバーから送信されますhttp://buy.itunes.apple.com/verifyReceipt(テスト用に購入をサンドボックスに変更します)。

于 2012-08-20T09:21:52.573 に答える
3
-(void)restoreSubscription:(SKPaymentTransaction *)transaction {
NSUserDefaults *defaultData = [NSUserDefaults standardUserDefaults];
NSArray *productID = [defaultData objectForKey:@"productID"];
NSArray *subMonths = [defaultData objectForKey:@"SubMonth"];

NSLog(@"%@",productID.description);

NSLog(@"Array ==%@",objContantManeger.subscriptionMonth);
NSMutableArray *arrID = [[NSMutableArray alloc] initWithArray:objContantManeger.subscriptionProductID];

NSMutableArray *arrMonth = [[NSMutableArray alloc] initWithArray:subMonths];

NSDate *date;
NSDate *exDate;
for (int i =0;i<arrID.count;i++)
{
    NSString *idStr =[arrID objectAtIndex:i];
    NSString *monthStr = [arrMonth objectAtIndex:i];
    int addsubMonth = [monthStr intValue];

    NSLog(@"%i--%@",i,idStr);
    NSLog(@"%i-->%i",i,addsubMonth);

    NSLog(@"Transaction Date--%@",transaction.originalTransaction.payment.productIdentifier);

    if ([transaction.originalTransaction.payment.productIdentifier isEqualToString:idStr])
    {
        NSLog(@"Date..%@",transaction.originalTransaction.transactionDate);


        date = transaction.originalTransaction.transactionDate;

        NSString *dateStr = [date description];
        NSRange range;

        // year
        range.location = 0;
        range.length = 4;
        NSString *yearStr = [dateStr substringWithRange:range];
        int year = [yearStr intValue];
        NSLog(@"%i",year);

        // month
        range.location = 5;
        range.length = 2;
        NSString *monthStr = [dateStr substringWithRange:range];
        int month = [monthStr intValue];
        NSLog(@"%i",month);
        // day
        range.location = 8;
        range.length = 2;
        NSString *dayStr = [dateStr substringWithRange:range];
        int day = [dayStr intValue];
        NSLog(@"%i",month);

        NSCalendar *calendar = [NSCalendar currentCalendar];

        NSDateComponents *components = [[NSDateComponents alloc] init];
        NSLog(@"addsubMonth---)%i",addsubMonth);
        [components setYear:year];
        [components setMonth:month+addsubMonth];
        [components setDay:day]; 

        NSLog(@"Expire DATE-->%@",[calendar dateFromComponents:components]);

        exDate = [calendar dateFromComponents:components];

        NSUserDefaults *defult = [NSUserDefaults standardUserDefaults];
        [defult setObject:exDate forKey:@"subexpiredate"];
        [defult synchronize];


       // return;

    }
}

このメソッドを使用してサブスクリプションを検証できます。これは、サブスクリプションの開始日と有効期限を提供するためです。

チップ -

アプリケーション デリゲート メソッド applicationDidEnterBackground を使用して、チェック サブスクリプションを実装します。

于 2012-08-20T10:37:17.183 に答える