#### 一.设置付费协议

1.进入开发者平台,点击如下图所示:

设置

2.查看付费同意条款

1. 设置付费协议

添加这3个信息

4.添加银行账户

5.选择报税表

默认美国

6.根据报税表填写报税情况,根据自己实际情况,在这里我们需要选择NO,后面选了几个勾,以为可以,后面报错了!

三者必须填写 **注意**:这里可以随便填写。

7.填写联系人,这几个部分可以填写同一人

#### 二.添加内购项目

1. 点击添加

2.选择内购项目类型

根据功能选择

3.设置产品价格及名称

4.显示信息

5.审核信息

**注意:这些信息都要填完整,否则会提示元数据丢失。**

内购项目

#### 三.创建沙盒技术测试号

添加账号

#### 三.代码集成

在需要购买的控制器内

```

#import

@interface HomeViewController ()

@end

- (void)viewDidLoad {

[super viewDidLoad];

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"总共免费使用5次,已消耗完" message:@"付费后可无限次使用" preferredStyle:UIAlertControllerStyleAlert];

[alert addAction:[UIAlertAction actionWithTitle:@"付费" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

[IHUtility addWaitingView:@"支付中"];

//监听购买结果

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

if([SKPaymentQueue canMakePayments]){

[self requestProductData:@"com.IntelligentNetwork.QuickIdentificationDiagram.purchase1"];

}else{

NSLog(@"不允许程序内付费");

}

}]];

[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];

// 弹出对话框

[self presentViewController:alert animated:true completion:nil];

}

//去苹果服务器请求商品

- (void)requestProductData:(NSString *)type{

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;

NSLog(@"productID:%@", response.invalidProductIdentifiers);

if(product.count==0){

[WHToast showMessage:@"查找不到商品信息" duration:1 finishHandler:^{

}];

return;

}

[IHUtility addWaitingView:@"支付中"];

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: @"com.IntelligentNetwork.QuickIdentificationDiagram.purchase1"]){

p = pro;

}

}

SKPayment *payment = [SKPayment paymentWithProduct:p];

NSLog(@"发送购买请求");

[[SKPaymentQueue defaultQueue] addPayment:payment];

}

//请求失败

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{

[IHUtility removeWaitingView];

[WHToast showMessage:@"支付失败" duration:1 finishHandler:^{

}];

}

- (void)requestDidFinish:(SKRequest *)request{

[IHUtility removeWaitingView];

}

//监听购买结果

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{

[IHUtility removeWaitingView];

for(SKPaymentTransaction *tran in transaction){

[self verifyPurchaseWithPaymentTransaction:[NSNumber numberWithInt:tran.transactionState]];

switch(tran.transactionState) {

case SKPaymentTransactionStatePurchased:{

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"buyed"];

[[SKPaymentQueue defaultQueue] finishTransaction:tran];

}

break;

case SKPaymentTransactionStatePurchasing:

break;

case SKPaymentTransactionStateRestored:{

[[SKPaymentQueue defaultQueue] finishTransaction:tran];

}

break;

case SKPaymentTransactionStateFailed:{

[[SKPaymentQueue defaultQueue] finishTransaction:tran];

[WHToast showMessage:@"购买失败" duration:1 finishHandler:^{

}];

}

break;

default:

break;

}

}

}

//交易结束

- (void)completeTransaction:(SKPaymentTransaction *)transaction{

NSLog(@"交易结束");

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

}

- (void)dealloc{

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

}

-(void)verifyPurchaseWithPaymentTransaction:(NSNumber*)resultState{

//从沙盒中获取交易凭证并且拼接成请求体数据

NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];

NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];

}

```

四.注意事项

1.内购必须用真机测试

2.测试时必须退出App Store自己的Apple ID,登录沙盒的测试Apple ID .

3.本身请求美国服务器就慢,为防止审核人员误解,我们需要在购买时加载动画。

ios 内购正式环境_iOS苹果内购(详细步骤)相关推荐

  1. ios 内购正式环境_iOS app内购

    一.测试账户生成 1.添加沙盒测试员 在App Store Connect中选择 Users and Access打开页面后在sandbox 下点击Testers,点击添加按钮(+),输入测试信息然后 ...

  2. ios 内购正式环境_iOS开发-2017苹果内购最新教程

    公司项目中有虚拟产品,所以要使用苹果内购.自此记录一下苹果内购的流程.前提是已有开发者账号 协议,税务和银行业务 协议,税务和银行业务 协议,税务和银行业务 申请合同 这里提示地址太长,按照要求重新填 ...

  3. ios 内购正式环境_iOS 内购的实现

    自己开发的视频直播项目,牵涉到充值金币,用到了苹果公司的内购,趴坑了两天,这里总结下实现苹果内购. 一. 创建测试App 首先你需要登录 App的ItunesConnection,你会看到如下界面 简 ...

  4. ios 内购正式环境_iOS 内购经验

    最近在做iOS内购,碰到的一些问题及解决方案,希望能帮到大家 1.如果需要内购实现代码,请留下你的QQ 2.关于内购商品被退回 内购被退回,主要有两个原因, 一是标题描述等信息没写清楚,这里需要你填写 ...

  5. ios 内购正式环境_iOS 内购最新讲解

    本文为CocoaChina网友IIronMan投稿 一.总说内购的内容协议.税务和银行业务 信息填写 内购商品的添加 添加沙盒测试账号 内购代码的具体实现 内购的注意事项 二.协议.税务和银行业务 信 ...

  6. ios 内购正式环境_iOS内购-部分玩家无法恢复购买

    起因是这样,自去年12月份,就陆续有玩家反馈以下问题购买了商品,却无法获得,也无法恢复购买 兑换码无法兑换到商品 重现:在设备1上兑换了A商品,恢复购买和再次免费购买,是无效的,而在设备2上用同一个账 ...

  7. ios 内购正式环境_ios内购之服务端操作

    { "status": 0, "environment": "Sandbox", "receipt": { " ...

  8. JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)

    链接地址:http://www.cnblogs.com/dartagnan/archive/2011/03/25/2003426.html JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apa ...

  9. Android Studio环境配置安装、搭建详细步骤及使用方法

    APP准备工作如下 1.源码下载 因为我已经下载好了 就不演示了 连下载都不会我就不说什么了. 稍后我会随教程发源码出去 jdk-8u77-windows-x64 萝卜app 1.1 mahuaTV这 ...

最新文章

  1. FPGA笔试题解析(五):串并转换与奇分频电路
  2. Docker框架的使用系列教程(四)容器的使用
  3. 华为mate40会不会有鸿蒙系统,鸿蒙OS系统正式推送,拿华为Mate40更新后,发现了优缺点...
  4. M​y​E​c​l​i​p​s​e​下​反​编​译​插​件​安​装​使​用​方​法
  5. 单纯形法只有两个约束条件_教学 | 线性规划 7 :单纯形法的引入
  6. Ext3和Ext4文件系统
  7. [daily][device] linux挂载iphone
  8. JavaScript高级程序设计(第3版)中文在线阅读,也可以免费下载~
  9. multisim C语言编程,基于Multisim10的51单片机仿真实战教程:使用汇编和C语言
  10. woocommerce修改商品详情页
  11. 给群联PS3111/inic6081量产工具添加闪存颗粒支持
  12. 计算机重装系统怎么链接打印机,如何连接打印机,详细教您电脑如何与打印机连接...
  13. lpad()函数oracle,oracle 中lpad的用法
  14. P8842 [传智杯 #4 初赛] 小卡与质数2 垃圾筛
  15. GEE开发之NDVI和EVI数据集
  16. 9.高性能计算 期末复习
  17. DoT/DoH/DoQ 之 CoreDNS配置
  18. cds云服务器_云探CDS拨测服务全面上线
  19. 安卓轻量级线上APM监测
  20. nnunet 扩充流程

热门文章

  1. 云计算 第4章 云计算与大数据
  2. 我和webshell的不解之缘之webshell再解密
  3. 雅虎股东批准44.8亿美元出售核心互联网业务 股价大涨10%
  4. php virualbox,浏览器远程控制VBox 虚拟机phpVirtualBox
  5. 【Android】基础控件【基础】【复习】
  6. favicon是什么,怎么用?
  7. Python基础第十三节—面向对象(中)
  8. 三种标识的计算机和U盘,了解这三种方法并轻松加密U盘
  9. Noah Mt4跟单系统制作第五篇 Mt4TradeApi挂单篇
  10. TCP/IP网络协议栈在Linux内核中的如何使用丨内核开发丨驱动开发丨操作系统丨内核源码