以下是一个示例代码,用于获取 iOS 自动续费订阅的状态:

#import <StoreKit/StoreKit.h>

@interface YourViewController : UIViewController <SKPaymentTransactionObserver, SKProductsRequestDelegate>

@end

@implementation YourViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 设置自身作为 SKPaymentTransactionObserver 的观察者
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    
    // 请求产品信息
    NSSet *productIdentifiers = [NSSet setWithObject:'your_product_identifier'];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    request.delegate = self;
    [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    // 处理产品信息
    NSArray *products = response.products;
    if (products.count > 0) {
        SKProduct *product = products.firstObject;
        NSLog('产品标题: %@', product.localizedTitle);
        NSLog('产品描述: %@', product.localizedDescription);
        NSLog('产品价格: %@', product.price);
        
        // 发起购买请求
        SKPayment *payment = [SKPayment paymentWithProduct:product];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
}

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                // 用户已购买该产品
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                // 购买失败
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                // 已恢复购买
                [self restoreTransaction:transaction];
                break;
            case SKPaymentTransactionStateDeferred:
                // 交易被推迟
                // 可在此处显示一个加载指示器等待交易完成
                break;
            default:
                break;
        }
    }
}

- (void)completeTransaction:(SKPaymentTransaction *)transaction {
    // 完成交易后的处理逻辑
    // 可以在此处将交易凭证发送到服务器进行验证等操作
    
    // 完成交易
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

- (void)failedTransaction:(SKPaymentTransaction *)transaction {
    if (transaction.error.code != SKErrorPaymentCancelled) {
        // 购买失败的处理逻辑
    }
    
    // 结束交易
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

- (void)restoreTransaction:(SKPaymentTransaction *)transaction {
    // 恢复购买后的处理逻辑
    // 可以在此处将交易凭证发送到服务器进行验证等操作
    
    // 结束交易
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

@end

请注意,您需要将 'your_product_identifier' 替换为您自己的产品标识符。此外,您还需要在 iTunes Connect 中正确设置自动续费订阅的相关信息,并在项目的 Capabilities 中启用 'In-App Purchase' 功能。

iOS 自动续费订阅 Demo - 获取订阅状态代码 (OC)

原文地址: https://www.cveoy.top/t/topic/p3dx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录