iOSのアプリ内購入
IOS アプリ内購入
概要
アプリ内購入は、追加のコンテンツやアップグレードされた機能を購入するためにアプリで使用されます。
インスタンス手順
1. iTunes 接続に一意の App ID (ユニーク App ID) があることを確認してください。バンドル ID (バンドル ID) アプリケーションが更新されると、コードがXcode
2 で対応する設定ファイルに署名し、新しいアプリケーションを作成し、アプリケーション情報を更新します。これについて詳しくは、Apple の「新しいアプリの追加」ドキュメントを参照してください。
3.「アプリ」ページの「アプリ内購入の管理」で、アプリ内購入用の新しい製品を追加します。
4.必ず次のことを行ってください。アプリを銀行の詳細に設定します。アプリ内購入として設定する必要があります。また、iTunes の [ユーザーの管理] オプションを使用して、アプリケーションのページに接続するテスト ユーザー アカウントを作成します。
5.次のステップは、コードの処理とアプリ内購入用の UI の作成に関連します。
6. シングル ビュー アプリケーションを作成し、iTunes で指定された識別子接続にバンドル識別子を入力します
7. ViewController.xib を次のように更新します
8. 3 つのラベルの IBOutlet を作成し、ボタンに 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 を変更する必要があります。あなたが作成したアプリ内Pur(アプリ内購入)。 fetchAvailableProducts 製品識別子の NSSet を変更することで、複数の製品を追加できます。
出力
アプリケーションを実行すると、出力結果は次のようになります。
ログインしていることを確認してください。 「購入」をクリックして既存の Apple ID を選択します。テスト アカウントの有効なユーザー名とパスワードを入力します。数秒後、以下の情報が表示されます。
#製品が購入されると、以下の情報が取得されます。この情報が表示されている場合、アプリケーション関数