pembelian dalam apl iOS


Pembelian Dalam Apl IOS


Pengenalan

Pembelian dalam apl digunakan oleh apl untuk membeli kandungan tambahan atau ciri yang dinaik taraf.

Contoh langkah

1 Sila pastikan anda mempunyai ID Apl (ID Apl unik) dalam sambungan iTunes Apabila aplikasi ID (ID bundle) dikemas kini, kod tersebut akan ditandatangani dalam Xcode dengan konfigurasi yang sepadan. fail

2. Cipta aplikasi baharu dan kemas kini maklumat permohonan. Anda boleh mengetahui lebih lanjut tentang ini dalam dokumentasi Tambah Apl Baru Apple

3 Dalam Urus Pembelian Dalam Apl pada halaman Apl, tambah produk baharu untuk pembelian dalam apl

4. Ia perlu disediakan sebagai pembelian Dalam Apl. Juga gunakan pilihan Urus Pengguna dalam iTunes untuk mencipta akaun pengguna ujian yang bersambung ke halaman aplikasi anda.

5 Langkah seterusnya adalah berkaitan dengan pengendalian kod dan mencipta UI untuk pembelian dalam apl kami.

6 Cipta aplikasi paparan tunggal dan masukkan pengecam berkas dalam sambungan Pengecam yang dinyatakan dalam iTunes

7 Kemas kini ViewController.xib seperti yang ditunjukkan di bawah

InAppPurchase_OutputInterface

8. Buat IBOutlet untuk tiga label tersebut productTitleLabel, productDescriptionLabel, productPriceLabel dan purchaseButton masing-masing

9 Pilih fail projek, kemudian pilih sasaran, dan kemudian tambah StoreKit.framework

10 Kemas kini ViewController.h seperti yang ditunjukkan di bawah

#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 ditunjukkan di bawah

#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

Nota: Anda perlu mengubah suai kTutorialPointProductID tempat anda mencipta In-App Pur (pembelian dalam apl). Anda boleh menambah berbilang produk dengan mengubah suai NSSet pengecam produk fetchAvailableProducts.

Output

Jalankan aplikasi, output adalah seperti berikut

InAppPurchase_Output1

Pastikan anda telah log masuk. Klik Beli untuk memilih ID Apple sedia ada. Masukkan nama pengguna dan kata laluan yang sah untuk akaun ujian anda. Selepas beberapa saat, maklumat berikut dipaparkan

InAppPurchase_Output2

Setelah produk berjaya dibeli, anda akan mendapat maklumat berikut. Anda boleh mengemas kini kod yang berkaitan dengan fungsi aplikasi di mana maklumat ini dipaparkan

InAppPurchase_Output3