以下是一个基本的 iOS 内购购买的代码封装,使用 Objective-C 语言编写:

首先,创建一个名为 IAPManager 的类,用于处理内购相关逻辑。

IAPManager.h 文件:

#import <Foundation/Foundation.h>
#import <StoreKit/StoreKit.h>

@protocol IAPManagerDelegate <NSObject>

- (void)purchaseProductSuccess:(NSString *)productIdentifier;
- (void)purchaseProductFailed:(NSError *)error;

@end

@interface IAPManager : NSObject<SKProductsRequestDelegate, SKPaymentTransactionObserver>

@property (nonatomic, weak) id<IAPManagerDelegate> delegate;

+ (instancetype)sharedInstance;
- (void)requestProducts;
- (void)purchaseProduct:(SKProduct *)product;

@end

IAPManager.m 文件:

#import "IAPManager.h"

@implementation IAPManager

+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    static IAPManager *instance = nil;
    dispatch_once(&onceToken, ^{ instance = [[IAPManager alloc] init]; });
    return instance;
}

- (void)requestProducts {
    NSSet *productIdentifiers = [NSSet setWithObjects:'com.example.product1', 'com.example.product2', nil]; // 替换为你自己的产品标识符
    SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    productsRequest.delegate = self;
    [productsRequest start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    NSArray *products = response.products;
    if (products.count > 0) {
        SKProduct *product = [products objectAtIndex:0]; // 取第一个产品
        [self purchaseProduct:product];
    }
}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
    [self.delegate purchaseProductFailed:error];
}

- (void)purchaseProduct:(SKProduct *)product {
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)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;
            default:
                break;
        }
    }
}

- (void)completeTransaction:(SKPaymentTransaction *)transaction {
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
    [self.delegate purchaseProductSuccess:transaction.payment.productIdentifier];
}

- (void)failedTransaction:(SKPaymentTransaction *)transaction {
    if (transaction.error.code != SKErrorPaymentCancelled) {
        [self.delegate purchaseProductFailed:transaction.error];
    }
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

- (void)restoreTransaction:(SKPaymentTransaction *)transaction {
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

@end

在使用内购功能的类中,可以通过以下代码调用 IAPManager:

#import "ViewController.h"
#import "IAPManager.h"

@interface ViewController () <IAPManagerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 请求产品信息
    [[IAPManager sharedInstance] setDelegate:self];
    [[IAPManager sharedInstance] requestProducts];
}

- (void)purchaseProductSuccess:(NSString *)productIdentifier {
    // 内购购买成功处理逻辑
}

- (void)purchaseProductFailed:(NSError *)error {
    // 内购购买失败处理逻辑
}

@end

上述代码中的 'com.example.product1' 和 'com.example.product2' 是示例产品标识符,你需要替换为你自己的产品标识符。同时,你需要在 Xcode 中配置好 App 内购的相关设置,并在代码中添加相应的处理逻辑。

这是一个简单的 iOS 内购购买的代码封装,你可以根据自己的需求进行扩展和修改。

iOS 内购购买详细代码封装 (Objective-C)

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

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