链接:https://www.jianshu.com/p/8d33953a3e3f

*深坑记录,以后发现一些不常见的坑可能会更新

1.一般发生于首次提交app或添加新商品,当你的app通过审核以后,你发现在生产环境下获取不到商品,这是因为app虽然过审核了,但是内购商品还没有正式添加到苹果的服务器里,耐心等待一段时间就可以啦~

2.我创建的IAP商品,当我不用,想删除时,发现无法删除,我点击删除按钮以后,页面就自动刷新,刷新回来,那条商品依然存在,我换了N多浏览器,连手机浏览器都试了,就是不行,没办法只能提交审核,然后苹果给我反馈说他们找不到我这个商品在哪......

  • 解决办法:审核时在附加里向苹果说明情况,最好录个视频上传到网站上(优酷就可以),把视频地址给苹果
  • 后续:当时有过申诉,但是因为苹果只会给注册开发者账号的邮件发信息,而老大每天都不在公司,所以与苹果的沟通终中断了。我在将App转移账号以后,这个Bug消失了,不知道是转移账号解决的还是苹果修复了。

一:iap开发

具体的开发过程不太想写了,网上太多了,随随便便百度一下就有好几页,这里只给大家推荐一个库,使用起来很方便
下载地址: IAPHelper

NSSet* dataSet = [[NSSet alloc] initWithObjects:@"这里是iap商品id", nil];[IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];// 请求商品信息
[[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response){if(response.products.count > 0 ) {SKProduct *product = response.products[0];[[IAPShare sharedHelper].iap buyProduct:productonCompletion:^(SKPaymentTransaction* trans){if(trans.error){}else if(trans.transactionState == SKPaymentTransactionStatePurchased) {// 到这里购买就成功了,但是因为存在越狱手机下载某些破解内购软件的情况,需要跟苹果服务器的确认是否购买成功// IAPHelper提供了这个方法,验证这步可以写在前端,也可以写在服务器端,这个自己看情况决定吧...### //   !! 这里有一种情况需要注意。程序走到这里的时候,已经是支付成功的状态。### // 此时用户的钱已经被苹果扣掉了,接下来需要做的是验证购买信息。### // 但是如果在 '购买成功'——'验证订单' 中间出现问题,断网、App崩溃等问题的话,会出现扣了钱但是充值失败的情况### // 所以在这里可以将下文中的验证信息存在本地,验证成功再后删除。验证失败的话,可以在每次App启动时将信息取出来重新验证// 购买验证NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];//网上的攻略有的比较老,在验证时使用的是trans.transactionReceipt,需要注意trans.transactionReceipt在ios9以后被弃用[[IAPShare sharedHelper].iap checkReceipt:receipt onCompletion:^(NSString *response, NSError *error) {}];}else if(trans.transactionState == SKPaymentTransactionStateFailed) {if (trans.error.code == SKErrorPaymentCancelled) {}else if (trans.error.code == SKErrorClientInvalid) {}else if (trans.error.code == SKErrorPaymentInvalid) {}else if (trans.error.code == SKErrorPaymentNotAllowed) {}else if (trans.error.code == SKErrorStoreProductNotAvailable) {}else{}}}];}else{//  ..未获取到商品}}];

关于内购的开发大概就这些,网上攻略贼多,大概搜索一下就能写的出来,iap开发起来虽然不难,但是玛德法克这里面坑实在太多...

二:iap开发时的注意事项

1.什么情况需要使用iap,什么情况使用三方支付

这里我的理解是:

购买的东西是实物,不存在于APP中,用三方支付,比如淘宝等一堆电商,他们的商品都是不存在于App中的。
如果你的支付和购买是为了解锁App的功能,就一定要用iap,即内购

举个栗子:现在有很多在线教育App,比如网易云课堂,腾讯课堂,可以在App中购买视频并在APP中观看,也就是说 '观看视频' 这个功能是本身就存在于APP中的,只是需要你先购买视频,才能使用'观看视频'这个功能,这个时候,这种解锁APP已有功能的操作,就必须要使用iap

2.关于商品类型:iap创建商品时选择的商品类型大概分三类

Paste_Image.png

1.消耗型商品:

类似游戏中的钻石,还有现在某些APP中的货币,比如斗鱼里的鱼丸、映客里的映票。会被消耗的,要选择消耗型商品

2.非消耗型商品:

无法被消耗的商品,比如上文提到的视频课程,一次购买,就应该永久可以观看

3.订阅类型商品:

多用于会员,会员也可以做成用 消耗型商品获取的货币来购买

现在不行了,之前提交过很多都没事,也许以前会员功能存在感太低审核团队没发现?又或是最近的新规,新提交的版本因为这个原因被拒了,错误描述:
Business - 3.1.1 We noticed that your app is using Consumable In-App Purchase products as intermediary currency for the exchange of items that function as Non-Renewing Subscriptions.

这里要提一点:如果你的公司是外包公司,有订阅类型商品的APP一定要用客户的账号提交审核,因为当APP中有过订阅类型商品,注意是有过,创建过再删除也算,这个APP无法被转移账号

3.注意事项

1.当你使用消耗型商品

大多数的消耗型商品都是需要登录的,因为需要在数据库存余额嘛。
需要注意的是:在登录之前,你最好不要让用户看到商品,有可能会因为这个原因被拒(看运气),栗子:

如上图。这是充值页面,即商品页面。
你有两个选择:
# 1.增加游客购买,即用户到达充值页面,点击充值时,即使用户未登陆,也能充值

 # 2.让未登录用户无法到达充值页面。且必须要由用户来选择栗子:有个按钮,点击跳转此充值页面,当未登录用户点击按钮时,你必须要弹出选择框,由用户来选择是登录/注册或者取消,并说明情况 如下:
2.当你使用非消耗型商品

当你使用非消耗型商品时,你需要添加一个恢复购买的按钮
这个常见于各种游戏中,其实知道这个规定以后还是挺好理解的,非消耗型商品是不可被消耗的,一次购买终身使用的,非消耗型的商品是跟appleId绑定的,就是你平时下载APP让你输入账号密码的内个。
你需要一个恢复购买的按钮,来让用户恢复他购买的内容,上面内个IAPHelper也有这个方法,自己看一下

3.订阅型商品

使用或曾经使用过订阅型商品的APP无法转移

在苹果帮助里,有个分类是:什么样的APP可以被转让
我一看,完全符合啊,然后就是开发、提交审核、通过,但是当我转让时却TM提示我无法转让,当我再次回去查看帮助,向下拉网页拉倒底部时
发现有另一个分类:为什么我的APP无法转让。。。。。。

iOS内购-iap-In-App Purchases-开发及注意事项相关推荐

  1. iOS内购(IAP,In App Purchases-在APP内部支付),设置及使用

    项目中使用到了中间货币(金币)的形式来进行功能使用,模式是使用RMB换成-金币比如:(1RMB = 10金币),所以会集成第三方的支付平台,使用了微信和支付宝的第三方平台过后,发现审核失败,被苹果拒绝 ...

  2. iOS 内购IAP(In-App Purchases)代码实现(上)

    iOS 内购IAP(In-App Purchases)代码实现(上) iOS 内购,也叫内支付,是在iOS应用内部,向苹果服务器发起购买请求的过程.我们在这边来讲一讲代码的实现过程.还有,在做内购的时 ...

  3. IOS 内购IAP 自动订阅收据验证文档服务端翻译

    将收据数据发送到App Store: 提交此JSON对象作为HTTP POST请求的有效负载. 中文文档:https://help.apple.com/app-store-connect/#/dev7 ...

  4. iOS 内购项目的App Store推广

    iOS 11以后的用户可以在App Store内的下载页面内直接购买应用的内购商品,这项功能苹果称作做Promoting In-App Purchases,如果你的App需要在App Store推广自 ...

  5. iOS内购IAP(In App Purchases)入门

    成为ios开发者最大的好处就是,你编写的应用程序会有很多方式可以赚钱.比如,收费版,免费挂广告版,还有就是程序内置购买. 程序内置购买会让你爱不释手,主要有以下原因: 相比程序本身的下载收费以,你还可 ...

  6. PHP实现苹果(IOS)内购(IAP)

    反反复复经过多次重写(内部需要),发现苹果使用PHP来验证苹果内购数据是否正确并不是一件很难的事情.我把我的一些心得写出来,以供以后有这方面需求的小伙伴参考,以PHP语言为例,谁让PHP是最好的语言呢 ...

  7. IOS内购IAP(IN-APP-PURCACHE)收据

    将receipt_data发送到App Store获得app内商品的ios收据详情 请求方式:向appstore发送HTTP POST请求 在测试环境中,URL为 https://sandbox.it ...

  8. IOS 内购IAP 自动订阅收据验证返回结构体

    exclude-old-transactions 参数等于true时. 数据通过json_decode()转换后 1.首次订阅支付通过票据进行验单的返回结构体: Array ([status] =&g ...

  9. iOS开发支付篇——内购(IAP)详解

    iOS开发支付篇--内购(IAP)详解 苹果客户端购买虚拟商品是需要走内购 先看gif图 具体步骤: 协议.税务和银行业务 信息填写 内购商品的添加 添加沙盒测试账号 内购代码的具体实现 内购的注意事 ...

  10. iOS应用突然无法从App Store获取到内购(IAP)产品列表的解决

    问题现象 Apple开发中,在应用中嵌入内购(IAP)功能的小伙伴们可能会发现,吃着火锅唱着歌,突然App就无法获取到产品列表了,而且产品请求操作并不会返回任何错误. 此时检查发现,并没有对App的内 ...

最新文章

  1. tableau技术小积累
  2. java集合代码_Java-集合(示例代码)
  3. VPTR的分步初始化
  4. socket绑定的ip为INADDR_ANY 的意义 htonl(INADDR_ANY)(0.0.0.0所有地址、不确定地址、任意地址)(htonl和htons区别)
  5. checkInterruptWhileWaiting
  6. SAP Commerce的路由实现(Route Implementation)
  7. 我国火力发电站的大脑用上了国产系统
  8. es6 属性名表达式
  9. 非专业人士观点(3)不要假如
  10. oracle数据库删除用户(schema)操作
  11. 液晶8K电视也能打造家庭影院?一起“宅”过电影情人节吧
  12. Unity Shader案例之——阴阳师画符效果
  13. linux命令界面切换桌面,Linux图形界面和命令行界面切换
  14. 1021 Deepest Root (25 分)连通图个数、图的遍历dfs
  15. TCP/IP网络编程之多进程服务端(二)
  16. 小程序转 App 帮助企业打开营销局面
  17. APR协议及RARP协议
  18. 信用卡数字识别(opencv,轮廓计算)
  19. ROS简介-从零开始讲解ROS(适合超零基础阅读)
  20. 管理学原理期末复习笔记

热门文章

  1. Makefile中的奇葩字符
  2. 【虹科ELPRO - EMS系统】实现苏州某医药仓库温湿度自动监测 - 100% GxP合规(下)
  3. 用传统流程图表示求解以下问题的算法有两个瓶子A和B
  4. k22.第九章 K8s进阶篇-高级调度计划任务临时容器 (三)
  5. python内置函数getattr()和setattr()
  6. 今天在隧道一车上的一幕
  7. 老友记剧本台词全十季下载
  8. 【urllib的使用(下)】
  9. c语言关键词中英翻译机编程,C语言关键字中英翻译机.doc
  10. 骨传导蓝牙耳机哪个牌子好?目前好用的骨传导蓝牙耳机推荐