JSRUN 用代码说话

应用内购买

编辑教程

应用内购买

应用程序内购买是应用程序用于购买额外内容或升级功能。

实例步骤

1、在 iTunes 连接中请确保拥有一个唯一的 App ID(unique App ID ),当创建捆绑的ID( bundle ID)应用程序更新时,代码会以相应的配置文件签名在Xcode上

2、创建新的应用程序和更新应用程序信息。你可以知道更多有关的,在苹果的 添加新的应用程序 文档中

3、在应用程序页的管理应用程序( Manage In-App Purchase)中,为app内付费添加新产品

4、确保设置的应用程序为的银行详细。需要将其设置为在应用程序内购买(In-App purchase)。此外在 iTunes 中使用管理用户(Manage Users)选项,创建一个测试用户帐户连接您的应用程序的页。

5、下一步是与处理代码和为我们在应用程序内购买创建有关的 UI。

6、创建一个单一的视图应用程序,并在 iTunes 中指定的标识符连接输入捆绑标识符

7、更新ViewController.xib ,如下所示

iOS应用内购买

8、为三个标签创建IBOutlets,且将按钮分别命名为 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

注意: 需要修改你创建In-App Pur(应用内购买)的 kTutorialPointProductID 。通过修改fetchAvailableProducts产品标识符的 NSSet, 你可以添加多个产品。

输出

运行该应用程序,输出结果如下

iOS应用内购买

确保已经中登录。单击购买选择现有的Apple ID。输入有效的测试帐户的用户名和密码。几秒钟后,显示下面的信息

iOS应用内购买

一旦产品成功购买,将获得以下信息。可以在显示此信息的地方,更新应用功能相关的代码

iOS应用内购买

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟