Դաս 17 – iOS Development: In-App Purchase

0

In-App purchase-ը օգտագործվում է գնելու լրացուցիչ բովանդակություն կամ հատկանիշներ բարելավելու համար:

Քայլեր

Քայլ 1.  iTunes-ում, վստահ եղեք, որ ունեք եզակի App ID և երբ ստեղծենք հավելվածի թարմացում bundle ID-ով և կոդի ստորագրմամբ Xcode-ում համապատասխան նախակարգման պրոֆիլով:

Քայլ 2. Նոր հավելված ստեղծեք և թարմացրեք հավելվածի ինֆորմացիան: Կարող եք ավել ինֆորմացիա ստանալ apple-ի  Add new apps փաստաթղթում:

Քայլ 3. Նոր ապրանք ավելացրեք in-app purchase-ի համար ձեր հավելվածի Manage In-App Purchase-ում:

Քայլ 4. Վստահ եղեք, որ տեղադրում եք ճիշտ բանկային տվյալներ ձեր հավելվածի համար: Այս քայլը պարտադիր է, որպեսզի In-App purchase-ը աշխատի: Նաև ստեղծեք փորձարկման էջ օգտագործելով Manage Users տարբերակը iTunes-ում:

Քայլ 5. Հաջորդ քայլերը կապված են handling code-ի և UI ստեղծելու հետ մեր In-App purchase-ում:

Քայլ 6. Ստեղծեք single view application և մուտքագրեք փաթեթի նույնացուցիչը iTunes-ում:

Քայլ 7. Թարմացրեք ViewController.xib-ը հետևյալ կերպ−

inapppurchase_outputinterface

Քայլ 8. Ստեղծեք IBOutlets 3 պիտակների համար և կոճակ, որն անվանում է նրանց productTitleLabel, productDescriptionLabel, productPriceLabel և purchaseButton:

Քայլ 9. Ընտրեք ձեր պրոյեկտի ֆայլը, ապա ընտրեք թիրախներ և ավելացրեք 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

Ուշադրություն

Պետք է թարմացնեք kTutorialPointProductID-ը productID-ում, որը ստեղծել եք In-App Purchase-ում: Կարող եք մեկից ավելի ապրանք ավելացնել թարմացնելով productIdentifiers-իNSSet-ը fetchAvailableProducts-ում:

Արդյունք

Երբ հավելավծում ենք կտեսնենք հետևյալ արդյունքը−

inapppurchase_output1

Վստահ եղեք, որ դուրս եք եկել ձեր հաշվից կարգավորումների էկրանից: Կլիկ անելով Initiate Purchase-ին ընտրեք Use Existing Apple ID-ին:  Մուտքագրեք ձեր your վավեր փորձարկամ հաշվի օգտատիրոջ անունը և գաղնաբառը: Մի քանի վարկյանից կստանաք հետևյալ ազդանշանը:

inapppurchase_output3inapppurchase_output2

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.