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
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
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
Setelah produk berjaya dibeli, anda akan mendapat maklumat berikut. Anda boleh mengemas kini kod yang berkaitan dengan fungsi aplikasi di mana maklumat ini dipaparkan