با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، این جلسه نحوه خرید درون برنامه ای در iOS را آموزش می دهیم. خرید درون برنامه برای خرید امکانات اضافی در iOS یا ارتقاء ویژگی های مربوط به یک برنامه کاربردی استفاده می شود.
مراحل مربوطه برای امکانات اضافی در iOS:
برای گذاشتن گزینه خرید دورن برنامه ای در iOS ابتدا مراحل زیرا طی کنید :
مرحله ۱ : در اتصال با iTunes ، اطمینان حاصل کنید که شما دارای شناسه برنامه منحصر به فرد (unique App ID) هستید.
سپس به روز رسانی نرم افزار با شناسه بسته نرم افزاری و کد در Xcode با مشخصات ارائه مربوطه را ایجاد می کنیم.
مرحله ۲ : ایجاد یک برنامه جدید و به روز رسانی اطلاعات برنامه.
شما می توانید برای اطلاعات بیشتر به اسناد Add new apps اپل مراجعه کنید.
مرحله ۳ : اضافه کردن یک محصول جدید برای خرید درون برنامه در مدیریت خرید برنامه در صفحه برنامه خود.
مرحله ۴ : سپس اطمینان حاصل کنید که جزئیات بانکی خود را برای درخواست خود تنظیم کرده اید.
اینکار برای عملکرد درست خرید درون برنامه لازم است.
همچنین، یک حساب کاربری آزمایشی با استفاده از گزینه Manage Users در iTunes، در صفحه اتصال برنامه خود ایجاد کنید.
مرحله ۵ : مراحل بعدی مربوط به بررسی به کد و ایجاد رابط کاربری برای خرید در برنامه ما است.
مرحله ۶ : ایجاد یک برنامه ساده و وارد کردن شناسه بسته نرم افزاری مشخص شده در اتصال iTunes .
مرحله ۷ : به روز رسانی کد ViewController.xib به صورت زیر :
مرحله ۸ : ایجاد IBOutlets برای سه برچسب و دکمه نام آنها به ترتیب با عنوان productTitleLabel، productDescriptionLabel، productPriceLabel و purchaseButton .
مرحله ۹ : فایل پروژه خود را انتخاب کنید، سپس target ها را انتخاب کنید و سپس فریم ورک StoreKit.framework را اضافه کنید.
مرحله ۱۰ : فایل ViewController.h را به صورت زیر به روزرسانی نمایید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #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 |
مرحله ۱۱ : سپس فایل ViewController.m را به صورت زیر به روزرسانی نمایید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #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 را به کد محصولی که برای خرید درون برنامه خود ایجاد کرده اید به روزرسانی کنید.
شما می توانید بیش از یک محصول را با به روز رسانی NSSet productIdentifiers در fetchAvailableProducts اضافه کنید.
به طور مشابه، اقدامات مربوط به خرید را برای شناسه های محصول اضافه می کند.
هنگامی که برنامه را اجرا می کنیم، خروجی زیر را دریافت می کنیم :
مطمئن شوید که از حساب کاربری خود در صفحه تنظیمات خارج شده اید.
سپس با کلیک بر روی خرید اولیه، گزینه Use Existing Apple ID را انتخاب کنید.
نام کاربری و رمز عبور حساب آزمون معتبر خود را وارد کنید هشدار زیر در چند ثانیه نشان داده می شود.
هنگامی که محصول شما با موفقیت خریداری شد، هشدار زیر را دریافت خواهید کرد.
شما می توانید کد مربوطه را برای به روز رسانی ویژگی های برنامه که در آن این هشدار را نشان می دهد مشاهده کنید.
همانطور که در جریان می باشید ، اپلیکیشن های بسیاری در اپ استور وجود دارند که پس از دانلود و نصب ان ها بر روی دیوایس های شما از امکانات اضافی در iOS ،کاربردی و قابل استفاده بسیاری به منظور خرید بهره می برند که برای دسترسی به آن ها می بایست خرید های درون برنامه ای را پس از پرداخت مبلغ تعیین شده انجام دهید .
در نتیجه ، به این دسته از برنامه ها و عمل انجام شده خرید های درون برنامه ای (یا همان In-App Purchases) می گویند.