iOS 인앱 구매
IOS 인앱 구매
Introduction
인앱 구매는 앱에서 추가 콘텐츠나 업그레이드된 기능을 구매하는 데 사용됩니다.
인스턴스 단계
1. 애플리케이션의 번들 ID(번들 ID)를 생성할 때 iTunes 연결에 고유한 앱 ID(고유 앱 ID)가 있는지 확인하세요. 업데이트되면 코드는 해당 구성 파일
2을 사용하여 Xcode에 서명됩니다. 새 애플리케이션을 생성하고 애플리케이션 정보를 업데이트합니다. 이에 대한 자세한 내용은 Apple의 새 앱 추가 문서 New Product
에서 확인할 수 있습니다. 4. 앱을 은행 정보로 설정했는지 확인하세요. 인앱 구매로 설정해야 합니다. 또한 iTunes의 사용자 관리 옵션을 사용하여 애플리케이션 페이지에 연결하는 테스트 사용자 계정을 생성하세요.
5. 다음 단계는 코드 처리 및 인앱 구매용 UI 생성과 관련됩니다.
6. 단일 보기 애플리케이션을 생성하고 iTunes
7에 지정된 식별자 연결에 번들 식별자를 입력합니다. # 🎜🎜##🎜 🎜#
8. 세 개의 라벨에 대한 IBOutlets를 만들고 버튼 이름을 productTitleLabel, productDescriptionLabel, productPriceLabel 및 buyButton9로 지정합니다. 프로젝트 파일을 선택한 다음 대상을 선택하고 StoreKit.framework
10.아래와 같이 ViewController.h를 업데이트합니다
#import <UIKit/UIKit.h> #import <StoreKit/StoreKit.h> @interface ViewController : UIViewController< SKProductsRequestDelegate,SKPaymentTransactionObserver> { SKProductsRequest *productsRequest; NSArray *validProducts; UIActivityIndicatorView *activityIndicatorView; IBOutlet UILabel *productTitleLabel; IBOutlet UILabel *productDescriptionLabel; IBOutlet UILabel *productPriceLabel; IBOutlet UIButton *purchaseButton; } - (void)fetchAvailableProducts; - (BOOL)canMakePurchases; - (void)purchaseMyProduct:(SKProduct*)product; - (IBAction)purchase:(id)sender; @end
11.아래와 같이 ViewController.m을 업데이트합니다.
#import "ViewController.h" #define kTutorialPointProductID @"com.tutorialPoints.testApp.testProduct" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Adding activity indicator activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; activityIndicatorView.center = self.view.center; [activityIndicatorView hidesWhenStopped]; [self.view addSubview:activityIndicatorView]; [activityIndicatorView startAnimating]; //Hide purchase button initially purchaseButton.hidden = YES; [self fetchAvailableProducts]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)fetchAvailableProducts{ NSSet *productIdentifiers = [NSSet setWithObjects:kTutorialPointProductID,nil]; productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; productsRequest.delegate = self; [productsRequest start]; } - (BOOL)canMakePurchases { return [SKPaymentQueue canMakePayments]; } - (void)purchaseMyProduct:(SKProduct*)product{ if ([self canMakePurchases]) { SKPayment *payment = [SKPayment paymentWithProduct:product]; [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue] addPayment:payment]; } else{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle: @"Purchases are disabled in your device" message:nil delegate: self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alertView show]; } } -(IBAction)purchase:(id)sender{ [self purchaseMyProduct:[validProducts objectAtIndex:0]]; purchaseButton.enabled = NO; } #pragma mark StoreKit Delegate -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction in transactions) { switch (transaction.transactionState) { case SKPaymentTransactionStatePurchasing: NSLog(@"Purchasing"); break; case SKPaymentTransactionStatePurchased: if ([transaction.payment.productIdentifier isEqualToString:kTutorialPointProductID]) { NSLog(@"Purchased "); UIAlertView *alertView = [[UIAlertView alloc]initWithTitle: @"Purchase is completed succesfully" message:nil delegate: self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alertView show]; } [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; break; case SKPaymentTransactionStateRestored: NSLog(@"Restored "); [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; break; case SKPaymentTransactionStateFailed: NSLog(@"Purchase failed "); break; default: break; } } } -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { SKProduct *validProduct = nil; int count = [response.products count]; if (count>0) { validProducts = response.products; validProduct = [response.products objectAtIndex:0]; if ([validProduct.productIdentifier isEqualToString:kTutorialPointProductID]) { [productTitleLabel setText:[NSString stringWithFormat: @"Product Title: %@",validProduct.localizedTitle]]; [productDescriptionLabel setText:[NSString stringWithFormat: @"Product Desc: %@",validProduct.localizedDescription]]; [productPriceLabel setText:[NSString stringWithFormat: @"Product Price: %@",validProduct.price]]; } } else { UIAlertView *tmp = [[UIAlertView alloc] initWithTitle:@"Not Available" message:@"No products to purchase" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil]; [tmp show]; } [activityIndicatorView stopAnimating]; purchaseButton.hidden = NO; } @end표시 참고:
In-App Pur(인앱 구매)를 생성한 kTutorialPointProductID를 수정해야 합니다. fetchAvailableProducts 제품 식별자의 NSSet을 수정하여 여러 제품을 추가할 수 있습니다.
Output응용 프로그램을 실행하면 출력 결과는 다음과 같습니다
확인하세요 로그인했습니다. 기존 Apple ID를 선택하려면 구입을 클릭하세요. 테스트 계정의 유효한 사용자 이름과 비밀번호를 입력하세요. 몇 초 후에 다음 정보가 표시됩니다. 제품이 성공적으로 구매되면 다음 정보를 받게 됩니다. 이 정보가 표시되는 응용 프로그램 기능과 관련된 코드를 업데이트할 수 있습니다