IOS AppStore内有料チュートリアル


変換元:http://www.bubuko.com/infodetail-580520.html
この図は私がすでに発表したアプリで切り取ったもので、3つの商品が追加され、すでに通過している状態(緑表示)ですが、あなたが提出したばかりの頃は、アップルの審査で時間がかかるので黄色の待機状態が表示されるので、商品編集が間違っているかどうか心配する必要はありません.図:
技术分享
==================================================
このセクションでは、テストアカウントを申請し、アップルの砂箱テスト環境を利用してAppStoreの購入プロセスをシミュレートする方法を主に説明します.
ItunesConnectで「ユーザーと機能」オプションを選択します~
技术分享
次に、左上隅のオプションで砂箱のテスト者を選択し、左上隅のプラス記号アイコンをクリックして、図のようにテスト者を追加します.
技术分享
対応する内容を編集して、保存をクリックして、テストアカウントを作成しました.簡単ではありませんか.もちろんこのアカウントはパスワードを忘れたら再生成できますが、どうでもいいです.
ついでに、正式なappstoreの上で砂箱のテストのアカウントでログインしないでください.そうしないと、結果は深刻です.
========================================================
次はコード部分ですね~
1.まずプロジェクトプロジェクトに「storekit.framework」を入れ、ヘッダファイル#importを入れる
2.はい.hファイルに「SKPaymentTransactionObserver,SKProductsRequestDelegate」リスニングメカニズムを追加
以下に購入したコアコードを貼って、いくつかの関数について、私はここでもっと詳しく説明していません.皆さんが実行して走ることができるのは一目瞭然です.
.hファイル
//
//  PaymentViewController.h
//  IAPPayTest
//
//  Created by silicon on 14-10-28.
//  Copyright (c) 2014  silicon. All rights reserved.
//

#import 

#import 

@interface PaymentViewController : UIViewController

@property (strong, nonatomic) IBOutlet UITextField *productID;

@property (strong, nonatomic) IBOutlet UIButton *purchase;

- (IBAction)purchaseFunc:(id)sender;

@end

.mファイル
//
//  PaymentViewController.m
//  IAPPayTest
//
//  Created by silicon on 14-10-28.
//  Copyright (c) 2014  silicon. All rights reserved.
//

#import "PaymentViewController.h"

@interface PaymentViewController ()

@end

@implementation PaymentViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    self.productID.text = @"com.games.ztyxs.product_point.1";
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)purchaseFunc:(id)sender {
    NSString *product = self.productID.text;
    if([SKPaymentQueue canMakePayments]){
        [self requestProductData:product];
    }else{
        NSLog(@"        ");
    }
}

//    
- (void)requestProductData:(NSString *)type{
    NSLog(@"-------------         ----------------");
    NSArray *product = [[NSArray alloc] initWithObjects:type, nil];

    NSSet *nsset = [NSSet setWithArray:product];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
    request.delegate = self;
    [request start];
    
}

//        
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{

    NSLog(@"--------------        ---------------------");
    NSArray *product = response.products;
    if([product count] == 0){
        NSLog(@"--------------    ------------------");
        return;
    }
    
    NSLog(@"productID:%@", response.invalidProductIdentifiers);
    NSLog(@"      :%d",[product count]);
    
    SKProduct *p = nil;
    for (SKProduct *pro in product) {
        NSLog(@"%@", [pro description]);
        NSLog(@"%@", [pro localizedTitle]);
        NSLog(@"%@", [pro localizedDescription]);
        NSLog(@"%@", [pro price]);
        NSLog(@"%@", [pro productIdentifier]);
        
        if([pro.productIdentifier isEqualToString:self.productID.text]){
            p = pro;
        }
    }
    
    SKPayment *payment = [SKPayment paymentWithProduct:p];
    
    NSLog(@"      ");
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

//    
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
    NSLog(@"------------------  -----------------:%@", error);
}

- (void)requestDidFinish:(SKRequest *)request{
    NSLog(@"------------      -----------------");
}


//      
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{
    for(SKPaymentTransaction *tran in transaction){
        
        switch (tran.transactionState) {
            case SKPaymentTransactionStatePurchased:
                NSLog(@"    ");
                
                break;
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"       ");
                
                break;
            case SKPaymentTransactionStateRestored:
                NSLog(@"       ");
            
                break;
            case SKPaymentTransactionStateFailed:
                NSLog(@"    ");
                
                break;
            default:
                break;
        }
    }
}

//    
- (void)completeTransaction:(SKPaymentTransaction *)transaction{
    NSLog(@"    ");
    
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}


- (void)dealloc{
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
    [super dealloc];
}

@end

コードはこれだけで、こちらのIOS内購入チュートリアルは終わりに近づいています.テストの時、いくつかの要素に注意してください.
1.砂箱環境テストappStore内購入プロセスの場合、脱獄していない設備を使用してください.
2.必ず本物を使ってテストしてください.すべては本物を基準にしてください.
3.プロジェクトのBundle identifierは、AppIDを申請するときに記入したbundleIDと一致する必要があります.そうしないと、商品情報を要求できません.
こんなにたくさん話して、いくつかのテストスクリーンを添付して皆さんに展示します.
商品リクエスト時の印刷ログ
技术分享
取引が成功した後:
技术分享
携帯電話のスクリーンショット:
AppStoreのアカウントを入力する必要があります.テストで生成したものを使用すればいいです.
技术分享
購入の確認:
IOS AppStore内付费教程_第1张图片
取引完了:
IOS AppStore内付费教程_第2张图片
はい、すべての内购の流れは基本的に话し终わって、私の写真の上で涂ることを许して、制品の敏感な言叶に関系するので、みんなが気にしないことを望みます.このブログを急いでいる時間は急いでいますが、もし子供靴に何か疑問があったり、私が書いたところが私の手紙やコメントを歓迎してくれなかったりしたら、私は最初の時間に返事します.ありがとう~
この図は私がすでに発表したアプリで切り取ったもので、3つの商品が追加され、すでに通過している状態(緑表示)ですが、あなたが提出したばかりの頃は、アップルの審査で時間がかかるので黄色の待機状態が表示されるので、商品編集が間違っているかどうか心配する必要はありません.図:
技术分享
==================================================
このセクションでは、テストアカウントを申請し、アップルの砂箱テスト環境を利用してAppStoreの購入プロセスをシミュレートする方法を主に説明します.
ItunesConnectで「ユーザーと機能」オプションを選択します~
技术分享
次に、左上隅のオプションで砂箱のテスト者を選択し、左上隅のプラス記号アイコンをクリックして、図のようにテスト者を追加します.
技术分享
対応する内容を編集して、保存をクリックして、テストアカウントを作成しました.簡単ではありませんか.もちろんこのアカウントはパスワードを忘れたら再生成できますが、どうでもいいです.
ついでに、正式なappstoreの上で砂箱のテストのアカウントでログインしないでください.そうしないと、結果は深刻です.
========================================================
次はコード部分ですね~
1.まずプロジェクトプロジェクトに「storekit.framework」を入れ、ヘッダファイル#importを入れる
2.はい.hファイルに「SKPaymentTransactionObserver,SKProductsRequestDelegate」リスニングメカニズムを追加
以下に購入したコアコードを貼って、いくつかの関数について、私はここでもっと詳しく説明していません.皆さんが実行して走ることができるのは一目瞭然です.
.hファイル
//
//  PaymentViewController.h
//  IAPPayTest
//
//  Created by silicon on 14-10-28.
//  Copyright (c) 2014  silicon. All rights reserved.
//

#import 

#import 

@interface PaymentViewController : UIViewController

@property (strong, nonatomic) IBOutlet UITextField *productID;

@property (strong, nonatomic) IBOutlet UIButton *purchase;

- (IBAction)purchaseFunc:(id)sender;

@end

.mファイル
//
//  PaymentViewController.m
//  IAPPayTest
//
//  Created by silicon on 14-10-28.
//  Copyright (c) 2014  silicon. All rights reserved.
//

#import "PaymentViewController.h"

@interface PaymentViewController ()

@end

@implementation PaymentViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    self.productID.text = @"com.games.ztyxs.product_point.1";
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)purchaseFunc:(id)sender {
    NSString *product = self.productID.text;
    if([SKPaymentQueue canMakePayments]){
        [self requestProductData:product];
    }else{
        NSLog(@"        ");
    }
}

//    
- (void)requestProductData:(NSString *)type{
    NSLog(@"-------------         ----------------");
    NSArray *product = [[NSArray alloc] initWithObjects:type, nil];

    NSSet *nsset = [NSSet setWithArray:product];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
    request.delegate = self;
    [request start];
    
}

//        
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{

    NSLog(@"--------------        ---------------------");
    NSArray *product = response.products;
    if([product count] == 0){
        NSLog(@"--------------    ------------------");
        return;
    }
    
    NSLog(@"productID:%@", response.invalidProductIdentifiers);
    NSLog(@"      :%d",[product count]);
    
    SKProduct *p = nil;
    for (SKProduct *pro in product) {
        NSLog(@"%@", [pro description]);
        NSLog(@"%@", [pro localizedTitle]);
        NSLog(@"%@", [pro localizedDescription]);
        NSLog(@"%@", [pro price]);
        NSLog(@"%@", [pro productIdentifier]);
        
        if([pro.productIdentifier isEqualToString:self.productID.text]){
            p = pro;
        }
    }
    
    SKPayment *payment = [SKPayment paymentWithProduct:p];
    
    NSLog(@"      ");
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

//    
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
    NSLog(@"------------------  -----------------:%@", error);
}

- (void)requestDidFinish:(SKRequest *)request{
    NSLog(@"------------      -----------------");
}


//      
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{
    for(SKPaymentTransaction *tran in transaction){
        
        switch (tran.transactionState) {
            case SKPaymentTransactionStatePurchased:
                NSLog(@"    ");
                
                break;
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"       ");
                
                break;
            case SKPaymentTransactionStateRestored:
                NSLog(@"       ");
            
                break;
            case SKPaymentTransactionStateFailed:
                NSLog(@"    ");
                
                break;
            default:
                break;
        }
    }
}

//    
- (void)completeTransaction:(SKPaymentTransaction *)transaction{
    NSLog(@"    ");
    
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}


- (void)dealloc{
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
    [super dealloc];
}

@end

コードはこれだけで、こちらのIOS内購入チュートリアルは終わりに近づいています.テストの時、いくつかの要素に注意してください.
1.砂箱環境テストappStore内購入プロセスの場合、脱獄していない設備を使用してください.
2.必ず本物を使ってテストしてください.すべては本物を基準にしてください.
3.プロジェクトのBundle identifierは、AppIDを申請するときに記入したbundleIDと一致する必要があります.そうしないと、商品情報を要求できません.
こんなにたくさん話して、いくつかのテストスクリーンを添付して皆さんに展示します.
商品リクエスト時の印刷ログ
技术分享
取引が成功した後:
技术分享
携帯電話のスクリーンショット:
AppStoreのアカウントを入力する必要があります.テストで生成したものを使用すればいいです.
技术分享
購入の確認:
IOS AppStore内付费教程_第3张图片
取引完了:
IOS AppStore内付费教程_第4张图片
はい、すべての内购の流れは基本的に话し终わって、私の写真の上で涂ることを许して、制品の敏感な言叶に関系するので、みんなが気にしないことを望みます.このブログを急いでいる時間は急いでいますが、もし子供靴に何か疑問があったり、私が書いたところが私の手紙やコメントを歓迎してくれなかったりしたら、私は最初の時間に返事します.ありがとう~