转载请注明出处!!!

1、关于支付类型的选择

(1)消耗型物品:用一次,使用后失效,商品会在使用中一点一点消耗,这里最多使用的是游戏道具之类.游戏中内购大多使用这个,还有直播送礼物等等;

(2)非消耗型物品:最最坑爹的一种,这个不依赖自己服务器,只和苹果appid联系,只要同一个id购买,即使100个设备同时用这个id登录,都不需要进行再次购买,而且苹果强制要求要有一个Restore Purchases button,这个按钮的主要作用是恢复之前的购买.(appstore上面收费软件的下载就是这种类型)

附上这种类型的处理方法:

开发中有2种方案:

一种是直接在购买按钮下面添加一个恢复购买按钮(但是你要告诉审核人员,这个按钮在哪,发图片或者视频给审核人员,这种方便最简单,但是显示不好)

一种是通过获取该appid下面购买过的商品,然后在判断该商品是否在购买过的商品列表中,如果有,显示回复购买按钮,如果没有显示购买按钮.

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
if ([SKPaymentQueue canMakePayments]) {
//用户允许app内购
if (productId.length) {
NSArray *product = [[NSArray alloc]initWithObjects:@"商品id", nil];
NSSet *set = [NSSet setWithArray:product];
SKProductsRequest *productRequest =[[SKProductsRequest alloc] initWithProductIdentifiers:set];
productRequest.delegate = self;
[productRequest start];
} else { //商品id为空 }
}else{ //不支持购买 }
#pragma mark SKProductsRequestDelegate 查询成功后的回调
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray *product = response.products;
if (product.count == 0) { //无法获取商品信息 }else{ //发起购买请求
SKPayment *payment = [SKPayment paymentWithProduct:product[0]];
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];//这句代码就是恢复购买
}
}

接下来是代理函数,在这里你可以获取到已经购买过的商品集合

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions: (nonnull NSArray *)transactions { self.restoreArray = [[NSMutableArray alloc]init];
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing://正在交易
break;
case SKPaymentTransactionStatePurchased://交易完成
break;
case SKPaymentTransactionStateFailed://交易失败
break;
case SKPaymentTransactionStateRestored://已经购买过该商品
[self.restoreArray addObject:transaction.payment.productIdentifier];
[self restoreTransaction:transaction];
break;
default:
break;
}
}
}
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
if ([self.restoreArray containsObject:self.goodsProductId]) {
//用户购买过商品.就应该显示"恢复购买按钮"
}else{
//用户没有购买过该商品
}
}

(3)自动续期订阅:使用很少,适合报刊订阅等等

(4)非续订型订阅:用到的比较多的,可以依赖自已服务器,可以无数次购买,没有appid限制,比如一个价格商品有很多种规格,就可以使用这个.比如网易云课堂的收费课,腾讯课堂收费课等

2.游客模式:一般这个会是提示你5.1.1然后被拒。

最近审核比较严格,内购的时候最好提供游客模式,即使用户没有登录,也能进行购买,不要在购买的时候,强行提示用户登录(本人因为这个被拒N次)。

参考过的链接:

http://www.cocoachina.com/bbs/read.php?tid-1716937.html
http://www.cocoachina.com/bbs/read.php?tid-1720959-page-2.html
http://www.cocoachina.com/bbs/read.php?tid=1692154
https://developer.apple.com/app-store/review/guidelines/#data-collection-and-storage

总结方法:

1.我遇到过类似的,你在购买的时候提示他登录审核就会被拒绝,购买时直接跳转登录页面审核就过了。。。(容易被拒,还是看人)

2.添加游客模式

3.默默登录 判断是不是在审核期间 不是则跳转登录 反之默默登录 这时候需要注意的是登录后用户数据的保存

iOS 内购补充点的更多相关文章

  1. iOS - 内购总结

        如果有人以后要在做内购这一块.希望可以好好的阅读这篇文章,虽然不是字字珠玑.但是也是本人亲人趟过了无数的坑,希望可以对大家有所帮助!  下面是在研究工程中遇到的问题(iOS 内购的流程如下 1 ...

  2. IOS内购支付server验证模式

    IOS 内购支付两种模式: 内置模式 server模式 内置模式的流程: app从app store 获取产品信息 用户选择须要购买的产品 app发送支付请求到app store app store ...

  3. IOS内购支付服务器验证模式

    IOS 内购支付两种模式: 内置模式 服务器模式 内置模式的流程: app从app store 获取产品信息 用户选择需要购买的产品 app发送支付请求到app store app store 处理支 ...

  4. Unity苹果(iOS)内购接入(Unity内置IAP)

    https://www.jianshu.com/p/4045ebf81a1c Unity苹果(iOS)内购接入(Unity内置IAP) Kakarottog                       ...

  5. iOS 内购遇到的坑

    一.内购沙盒测试账号在支付成功后,再次购买相同 ID 的物品,会提示如下内容的弹窗.您以购买过此APP内购项目,此项目将免费恢复 原因: 当使用内购购买过商品后没有把这个交易事件关,所以当我们再次去购 ...

  6. 苹果IOS内购二次验证返回state为21002的坑

    项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...

  7. iOS 内购相关

    iOS 内购相关 下面总结一下过往订阅和内购的项目的代码方面的实现细节和注意事项,特别是掉单方面的处理. 后台的协议.商品ID.银行卡.内购类型.沙盒账号测试人员都由运营或者产品在苹果后台中申请处理. ...

  8. iOS 内购讲解

    一.总说内购的内容 1.协议.税务和银行业务 信息填写 2.内购商品的添加 3.添加沙盒测试账号 4.内购代码的具体实现 5.内购的注意事项 二.协议.税务和银行业务 信息填写 2.1.协议.税务和银 ...

  9. IOS内购--后台PHP认证

    参考网址:https://blog.csdn.net/que_csdn/article/details/80861408 http://www.php.cn/php-weizijiaocheng-39 ...

  10. IOS - 内购

    内购的五种产品类别 •非消耗品(Nonconsumable)买了就有,头衔,功能 –指的是在游戏中一次性购买并拥有永久访问权的物品或服务.非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用 ...

随机推荐

  1. 使用three.js,实现微信3D小游戏系列教程,框架篇(一)

    引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...

  2. Modbus TCP转Modbus ASCII解决方案

    Modbus TCP和Modbus ASCII是两种不同的通信协议.Modbus TCP是一种二进制协议,Modbus ASCII是一种基于文本的协议.二者不能直接转换,因为它们的数据表示方式.消息结 ...

  3. 前端开发系列009-基础篇之JavaScript内置Math

    本文介绍JavaScript中的内置对象Math,以及Math的常用方法. 一.Math简单介绍 ECMAScript为我们提供了一个专门处理数学计算的内置对象--Math对象.Math对象提供了很多 ...

  4. 最近在做一个关于D3数据可视化的项目 知识点记录

    简介 RT 跑 Minist 数据集 安装 tensorflow & tensorboard 安装 CUDA cuDnn D3 优秀的例子 gallery例子 http://github.co ...

  5. tigervnc配置

    简介 使用vnc 访问 服务器 下载链接 https://bintray.com/tigervnc/stable/tigervnc/1.10.1 简易使用命令 x0vncserver -rfbport ...

  6. java 核心编程设计模式

    简介 MVC模式 是 设计模式中的一种 模型:存储内容 视图:显示内容 控制器:处理用户输入

  7. POLIR-Lawsuits: 法院审核通过后迟迟不立案可以提起上诉 + 当法院迟迟不立案怎么办

    法院审核通过后迟迟不立案可以提起上诉. 法院一般需要在当事人起诉后七日内决定是否立案,如果拖着不立案可以问明原因, 要求法院在规定期限内立案,如果裁定不予受理,原告对裁定不服的,可以提起上诉. 立案: ...

  8. Linguistics-English-10级英语水平

    可以自我评估一下你的英语水平吗? 完全不会英文,无法听懂或说出任何英文内容. 仅能听懂或说出非常简单的单词或短语,如"Hello"."Thank you".&q ...

  9. 校验 ChatGPT4 真实性的三个经典问题:区分 GPT3.5 与 GPT4,并提供免费测试网站

    现在已经有很多 ChatGPT 的套壳网站,以下分享验明 GPT-4 真身的三个经典问题,帮助你快速区分套壳网站背后到底用的是 GPT-3.5 还是 GPT-4. 大家可以在这个网站测试:https: ...

  10. unity text mesh pro 缺字

    解决方案 把图集大小从1024改成2048,因为汉字太多了,1024的图集本来就装不下导致的部分缺字 做字体的我们先根据原始字体创建一个 Font Asset 这个为静态,复制一个做动态,修改动态的图 ...