///'以下是一个iOS开发中内购购买逻辑的代码封装示例(Objective-C代码)://n//n首先,创建一个名为IAPManager的类来封装内购逻辑://n//nIAPManager.h文件://n//n//n#import <Foundation///Foundation.h>//n#import <StoreKit///StoreKit.h>//n//n@protocol IAPManagerDelegate <NSObject>//n//n- (void)purchaseSuccessfulWithProductID:(NSString *)productID;//n- (void)purchaseFailedWithError:(NSError *)error;//n//n@end//n//n@interface IAPManager : NSObject<SKPaymentTransactionObserver, SKProductsRequestDelegate>//n//n@property (nonatomic, weak) id<IAPManagerDelegate> delegate;//n//n+ (instancetype)sharedInstance;//n- (void)startObservingTransactions;//n- (void)stopObservingTransactions;//n- (BOOL)canMakePurchases;//n- (void)requestProductWithID:(NSString *)productID;//n- (void)purchaseProduct:(SKProduct *)product;//n- (void)restorePurchases;//n//n@end//n//n//nIAPManager.m文件://n//n//n#import ///'IAPManager.h///'//n//n@implementation IAPManager//n//n+ (instancetype)sharedInstance {//n static IAPManager *sharedInstance = nil;//n static dispatch_once_t onceToken;//n dispatch_once(&onceToken, ^{//n sharedInstance = [[self alloc] init];//n });//n return sharedInstance;//n}//n//n- (void)startObservingTransactions {//n [[SKPaymentQueue defaultQueue] addTransactionObserver:self];//n}//n//n- (void)stopObservingTransactions {//n [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];//n}//n//n- (BOOL)canMakePurchases {//n return [SKPaymentQueue canMakePayments];//n}//n//n- (void)requestProductWithID:(NSString *)productID {//n SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:productID]];//n request.delegate = self;//n [request start];//n}//n//n- (void)purchaseProduct:(SKProduct *)product {//n SKPayment *payment = [SKPayment paymentWithProduct:product];//n [[SKPaymentQueue defaultQueue] addPayment:payment];//n}//n//n- (void)restorePurchases {//n [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];//n}//n//n#pragma mark - SKProductsRequestDelegate//n//n- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {//n NSArray *products = response.products;//n if (products.count > 0) {//n SKProduct *product = products[0];//n [self purchaseProduct:product];//n } else {//n // Product not found//n }//n}//n//n#pragma mark - SKPaymentTransactionObserver//n//n- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {//n for (SKPaymentTransaction *transaction in transactions) {//n switch (transaction.transactionState) {//n case SKPaymentTransactionStatePurchased://n [self completeTransaction:transaction];//n break;//n case SKPaymentTransactionStateFailed://n [self failedTransaction:transaction];//n break;//n case SKPaymentTransactionStateRestored://n [self restoreTransaction:transaction];//n break;//n default://n break;//n }//n }//n}//n//n- (void)completeTransaction:(SKPaymentTransaction *)transaction {//n [[SKPaymentQueue defaultQueue] finishTransaction:transaction];//n if ([self.delegate respondsToSelector:@selector(purchaseSuccessfulWithProductID:)]) {//n [self.delegate purchaseSuccessfulWithProductID:transaction.payment.productIdentifier];//n }//n}//n//n- (void)failedTransaction:(SKPaymentTransaction *)transaction {//n if (transaction.error.code != SKErrorPaymentCancelled) {//n NSLog(@/'Purchase failed with error: %@/', transaction.error.localizedDescription);//n }//n [[SKPaymentQueue defaultQueue] finishTransaction:transaction];//n if ([self.delegate respondsToSelector:@selector(purchaseFailedWithError:)]) {//n [self.delegate purchaseFailedWithError:transaction.error];//n }//n}//n//n- (void)restoreTransaction:(SKPaymentTransaction *)transaction {//n [[SKPaymentQueue defaultQueue] finishTransaction:transaction];//n if ([self.delegate respondsToSelector:@selector(purchaseSuccessfulWithProductID:)]) {//n [self.delegate purchaseSuccessfulWithProductID:transaction.originalTransaction.payment.productIdentifier];//n }//n}//n//n@end//n//n//n使用时,只需在需要进行内购的地方调用相应的方法即可。例如,请求某个产品的信息://n//n//n[[IAPManager sharedInstance] requestProductWithID:///'com.yourproductid///'];//n//n//n购买某个产品://n//n//n[[IAPManager sharedInstance] purchaseProduct:product];//n//n//n恢复购买://n//n//n[[IAPManager sharedInstance] restorePurchases];//n//n//n同时,需要在需要接收内购结果的类中实现IAPManagerDelegate协议的方法,例如://n//n//n@interface YourViewController : UIViewController<IAPManagerDelegate>//n//n@end//n//n@implementation YourViewController//n//n- (void)viewDidLoad {//n [super viewDidLoad];//n [IAPManager sharedInstance].delegate = self;//n}//n//n- (void)purchaseSuccessfulWithProductID:(NSString *)productID {//n // 内购成功处理逻辑//n}//n//n- (void)purchaseFailedWithError:(NSError *)error {//n // 内购失败处理逻辑//n}//n//n@end//n//n//n以上代码封装了基本的内购逻辑,可以根据具体需求进行扩展和修改。///

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

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

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