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 및 buyButton

InAppPurchase_OutputInterface9로 지정합니다. 프로젝트 파일을 선택한 다음 대상을 선택하고 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를 선택하려면 구입을 클릭하세요. 테스트 계정의 유효한 사용자 이름과 비밀번호를 입력하세요. 몇 초 후에 다음 정보가 표시됩니다.

InAppPurchase_Output1

제품이 성공적으로 구매되면 다음 정보를 받게 됩니다. 이 정보가 표시되는 응용 프로그램 기능과 관련된 코드를 업데이트할 수 있습니다

InAppPurchase_Output2