首页 > 移动平台 > 详细

iOS 应用内付费(IAP)开发步骤

时间:2015-09-29 11:30:43      阅读:343      评论:0      收藏:0      [点我收藏+]

测试的话不需要有上线产品,随便创一个应用就行了不过需要配置一些信息

 技术分享

上面圈出的里面的内容要全部填完才能成功

1.点击“Request”,填写一下Legal Entity的基本信息, 完成之后同意一个协议并提交

之后页面会变为

技术分享

2.需要分别填写里面的内容,大致需要以下信息

姓名,邮箱,标题,电话号码,传真(可选)
CNAPS Code,这个号有的地方说是联行号,可以理解为每个银行支行的唯一ID吧,这个可以打电话问你银行卡开户行,就是他们那的一个唯一12位的标示号码,也可以通过苹果的Look up Transit Number去搜索。
银行账户号码  帐户持有人姓名
银行账户的货币,人命币是CNY
个人或组织名字
注册地-中国

contact

技术分享

bank

技术分享

tax

 技术分享     

 

 

3.填写完毕后,进入我的app

技术分享

选择功能

技术分享

点击添加

技术分享

没有填写上面信息的话只有一个免费订阅

技术分享

 现在进去填写相关信息,保存就行了

4.创建沙盒测试员,进行模拟测试

技术分享

技术分享

技术分享

填写相关信息,测试的时候就用你这个测试的电子邮件和密码就行了

技术分享

 5.代码方面

导入库文件

技术分享

//
//  ViewController.m
//  ApplePayTest
//
//  Created by apple on 15/9/28.
//  Copyright (c) 2015年 tqh. All rights reserved.
//

#import "ViewController.h"
#import <StoreKit/StoreKit.h>

@interface ViewController ()<SKProductsRequestDelegate,SKPaymentTransactionObserver>

@end

@implementation ViewController

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

- (void)viewDidLoad {
    [super viewDidLoad];
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    NSLog(@"点击屏幕获取产品列表信息");
}

// 下面的ProductId应该是事先在itunesConnect中添加好的,已存在的付费项目。否则查询会失败。
- (void)getProductInfo {
    //这里填你的产品id,根据创建的名字
    
//ProductIdofvip
    
//ProductId
    NSSet * set = [NSSet setWithArray:@[@"ProductId"]];
    SKProductsRequest * request = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
    request.delegate = self;
    [request start];
    NSLog(@"请求开始请等待...");
}

#pragma mark - 以上查询的回调函数-------

// 以上查询的回调函数
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    //
    NSArray *myProduct = response.products;
    NSLog(@"%@",myProduct);
    if (myProduct.count == 0) {
        NSLog(@"无法获取产品信息,购买失败。");
        return;
    }
    SKPayment * payment = [SKPayment paymentWithProduct:myProduct[0]];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}


#pragma mark - ????????????????事件监听

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //查询是否允许内付费
    if ([SKPaymentQueue canMakePayments]) {
        // 执行下面提到的第5步:
        [self getProductInfo];
    } else {
        NSLog(@"失败,用户禁止应用内付费购买.");
    }
}



#pragma mark - others SKPaymentTransactionObserver


- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased://交易完成
                NSLog(@"transactionIdentifier = %@", transaction.transactionIdentifier);
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed://交易失败
                NSLog(@"交易失败");
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored://已经购买过该商品
                NSLog(@"已经购买过该产品");
                [self restoreTransaction:transaction];
                break;
            case SKPaymentTransactionStatePurchasing:      //商品添加进列表
                NSLog(@"商品添加进列表");
                break;
            default:
                break;
        }
    }
}
- (void)completeTransaction:(SKPaymentTransaction *)transaction {
    // Your application should implement these two methods.
    NSLog(@"---------进入了这里");
    NSString * productIdentifier = transaction.payment.productIdentifier;
    //transaction.transactionReceipt
//    NSString * receipt = [[NSString alloc]initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding];
    
    
//这里要用base64编码
    
    
//
//    NSLog(@"%@",receipt);
    if ([productIdentifier length] > 0) {
        // 向自己的服务器验证购买凭证
    }
    // Remove the transaction from the payment queue.
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
    
}
- (void)failedTransaction:(SKPaymentTransaction *)transaction {
    if(transaction.error.code != SKErrorPaymentCancelled) {
        NSLog(@"购买失败");
    } else {
        NSLog(@"用户取消交易");
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void)restoreTransaction:(SKPaymentTransaction *)transaction {
    // 对于已购商品,处理恢复购买的逻辑
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

 差不多就这样的,弄清楚流程就简单了,如果觉得还没怎么弄懂的话就看下面一些链接吧,-0-

网址链接

iOS应用内购内付费:http://blog.csdn.net/shenjie12345678/article/details/40978977

iap(程序内购买)完全攻略:http://fei263.blog.163.com/blog/static/927937242011321105241823/

iOS应用内付费开发步骤:http://blog.csdn.net/xiaoxiangzhu660810/article/details/17434907

iOS应用内付费开发步骤列表:http://www.cocoachina.com/industry/20130313/5814.html

iOS应用iap设置总结:http://www.cocoachina.com/ios/20120214/3976.html

 

 

iOS 应用内付费(IAP)开发步骤

原文:http://www.cnblogs.com/hxwj/p/4845732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!