ios开发iap,iOs开发自身优势

iOS 内购(IAP) 简单总结

IAP(In-App Purchase),是指苹果App Store的应用内购买,是苹果为APP内购买虚拟商品或服务提供的一套交易系统。

创新互联公司专注于吕梁网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供吕梁营销型网站建设,吕梁网站制作、吕梁网页设计、吕梁网站官网定制、小程序设计服务,打造吕梁网络公司原创品牌,更为您提供吕梁网站排名全网营销落地服务。

在APP内需要付费使用的产品功能或虚拟商品、服务。例如在斗鱼上充鱼翅、在视频APP上冲会员、在王者农药里买皮肤等....这些购买的商品或服务只能在APP内消费使用的适用IAP。反之,在京东或淘宝买东西、在滴滴上打车等...这些购买的商品或服务只能在APP外使用的情况是不适用IAP的。

IAP是一套商品交易系统,而非简单的支付系统。每一个购买项目都需要在App的itunes connect后台创建一个商品,提交给苹果审核,审核通过后,购买项目才会生效。

在创建IAP商品时,主要有四中类型:

3.2.2 商品的购买

关于iOS内购IAP的一个可能导致丢单的问题

 首先:我只是个iOS开发的菜鸟,语文不及格的学渣。写的东西都只是一点自己的浅显的理解。如有不对,欢迎大神们指点,小弟虚心学习~我只是个梦想成为大神的菜鸟。

    闲话少说。这篇文章是关于苹果IAP的一个可能导致项目丢单的bug.(可能是bug,也可能是我没有透彻的领悟苹果的用意,抛出来供大家参考)

    问题的根本出现在内购SKMutablePayment 类的 applicationUsername对象在部分情况下会被苹果丢掉,成为null。

applicationUsername  是苹果在iOS7.0及以后为内购增加的一个自定义字段,开发者可以在该字段中记录一些自定义的数据。但是在使用过程中发现,部分(注意强调下,是部分)用户第一次使用苹果内购时,手机会提示用户去绑定银行卡。这时用户点确定过去绑定银行卡后继续点确定支付,苹果内购回调:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;

方法接收到的付款成功的 SKPaymentTransaction交易中的SKMutablePayment对象的applicationUsername会被苹果置为null.再次强调,这个问题只会部分用户发生。目前还没有找到规律,也没办法复现。

基于以上问题。如果大家的项目将例如内部订单号等信息存入applicationUsername中,就有可能导致存入的信息丢失的问题。不同的设计可能会引发不同的bug。由于我的项目将内部订单号存入applicationUsername,丢失后,无法提交服务器校验小票。所以就丢单了。

    另外在分享个需要注意的:就是前面提到当用户点击确认绑定手机卡跳走后,苹果会首先返回一个支付取消的通知。如果用户很乖的绑卡并且确认支付,苹果又会返回一个支付成功的通知。所以这里也需要大家注意,不要因此引发什么问题。

可能这个问题对大家来说并不会导致丢单或其他问题。只是在这里给大家分享下这样的一个坑,万一有人跟我一样的做法呢~防止大家入坑,希望能帮到大家~ Ps.马上过年了,祝大家新年愉快。

Flutter iOS 苹果IAP(内购)实现步骤及问题总结(全网最全)

点击 “协议、税务和银行业务”

内购用的是付费应用程序,先签署《付费应用程序协议》,同意后状态变更为“用户信息待处理”,等待审核。

状态更改完毕后,点击“开始设置税务、银行业务和联系信息”。

(1)添加银行账户,按照要求填写相关内容即可。

(2)选择报税表,并填写。所有与 Apple 有商业合作者必选都是美国,若有其他需求,可以多选。

继续填写,首先认证公司基本信息,选择所有人类型,确认无误后认证条款处打对勾

Part I 部分,继续核对公司相关信息,选填内容可不填。

Part III 部分,签署税务条约,设置利益限制条款的种类,选填内容可不填。此部分如果需要可勾选上下图勾选框,不需要可不勾选,我们这个项目没有用到part III 部分,所以没有勾选。

Part XXX 部分,确认之前填写的信息,勾选完毕后,提交

(3)填写联系信息,共5个。高级管理、财务、技术、法务、营销。只需要提供5个人的基本信息即可。

只可使用一次的产品,使用之后即失效,必须再次购买。

示例: 钓鱼 App 中的鱼食。

只需购买一次,不会过期或随着使用而减少的产品。

示例: 游戏 App 的赛道。

允许用户在固定时间段内购买动态内容的产品。除非用户选择取消,否则此类订阅会自动续期。

示例: 每月订阅提供流媒体服务的 App。

允许用户购买有时限性服务的产品。此 App 内购买项目的内容可以是静态的。此类订阅不会自动续期。

示例: 为期一年的已归档文章目录订阅。

App 内购买项目的截屏,即所售项目的示意图。例如,如果 App 内购买项目是一本图书,您可以提交图书的截屏。您也可以提交购买页的截屏。该截屏仅用于 Apple 审核,不会在 App Store 中显示。

截屏要求如下:

iOS 至少需要 640 x 920 像素

Apple tvOS 需要 1920 x 1080 像素

macOS 需要 1280 x 800 像素

App 审核图像上传后,可以替换,但无法移除。当您的 App 内购买项目处于审核中时,您无法更新截屏。

沙箱账号是不能直接在App Store进行登录的,只能在点击了购买商品之后,在弹出的登录框进行登录 。

验证是否已登录沙箱测试账号:

设置--iTunes Store与App Store,页面拉到最底部,会看到沙箱账户项会列出你已登录的沙箱测试账号!

操作方法一:打开App Store应用首页滑到最下方--选中AppleID--注销

操作方法二:设置--iTunes Store与App Store--选中AppleID--注销

checks if the client can make payments(检测App是否能支付)

getAvailablePurchases

Get all non-consumed purchases 获取未消费的商品

打印信息查询;

原因:

没有先执行getProducts,直接执行requestPurchase方法,要先拉取商品列表,再执行购买操作.

问题描述;

1.漏单必须要处理,玩家花RMB购买的东西却丢失了,是绝对不能容忍的。所谓的漏单就是玩家已经正常付费,却没有拿到该拿的道具。

解决:只要购买成功,便将购买记录(receipt等账单信息)保存下来,然后将账单信息传送给我们游戏服务器,游戏服务器获得账单后,和苹果服务器验证,账单有效的话,回馈给游戏服务器处理,游戏服务器处理后,返回给游戏客户端处理,处理完毕,将本地保存的购买记录删除。

官方文档:向苹果校验支付凭证

21000 App Store无法读取你提供的JSON数据

21002 收据数据不符合格式

21003 收据无法被验证

21004 你提供的共享密钥和账户的共享密钥不一致

21005 收据服务器当前不可用

21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中

21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证 【请求sandbox校验支付凭证】

21008 收据信息是产品环境中使用,但却被发送到测试环境中验证

消耗类型: 例如:金币、道具等。

非续订订阅: non-renewable subscription 例如:VIP

您的首个 App 内购买项目必须以新的 App 版本提交。请创建您的 App 内购买项目,然后前往 App 的“App Store”页,从“App 内购买项目”中进行选择,点按“提交”。 了解更多

在上传二进制文件并提交首个 App 内购买项目以供审核后,您可以使用下表提交其他 App 内购买项目。

唐巧-iOS应用内付费(IAP)开发步骤列表

未完~待续

当使用内购购买过商品之后没有把这个交易关闭,所以再次去购买商品后就会调用以前已经购买成功的交易去购买因为已经购买过,才会有这个提示

原因:添加内购项目时,信息填写不完整,app审核图像未上传

处理方法:上传app审核图片( 合适的尺寸 ),点击提交,状态改为正在准备审核中。

这个是内购选择类型不匹配原因导致。

购买成功之后,Apple会返回以下四个数据给应用

Reference

Review the updated Paid Applications Schedule.

游客身份解决方案:即不登录也要能购买

1)服务器端做一个苹果审核机制,审核期间游客身份可以进行一切行为,一旦审核通过,修改服务端即可达到强制用户登录进行内购买的目的(这个有点。。。)

2)游客可以进行内购买,购买时以设备UUID为准,生成一个游客账号,将购买信息保存在服务器和本地,当用户登录正式账户后判断此设备是否进行过内购,有的话提示用户将游客身份购买的权益与现有账号绑定,如果绑定,游客权益则迁移到正式账户,如果不迁移,则游客身份和正是账户是两个独立账户,正式账户不享有游客身份的权益(我用的这个)

内购游客模式解决方案

iOS内购规则

iOS IAP基本流程.md

IAP的流程就是指内购,简单来说就是 应用内支付 ,但是包含的逻辑非常多,有些人说 苹果内购坑太多 ,但是你需要考虑它的承载和应用能力.

题外话: 只要苹果公司在运营, 那么其IAP就会被应用,除非苹果放弃 30% 的分成. 那么对IAP的认识、学习掌握还是值得你下成本的.

????这里面有一些小细节,请仔细阅读哈

注意:该delegate中 queue.transactions 和 transactions 的区别;

正常情况下,是一样的.

3.老用户优惠价: @property(nonatomic, readonly) NSArraySKProductDiscount * *discounts ,注意是 SKProductDiscount

4.价格: @property(nonatomic, readonly) NSDecimalNumber *price() price

苹果规定所有内购绑定的账号都应该是apple账号,所以不登陆你App自己的账号也应该可以购买,也就是游客状态下也要能购买,不然就耽误苹果赚钱了。

关于这个问题有两个解决办法:

(1)做游客模式可购买(未登录是绑定设备,下一个账号登录以后绑定账号)

(2)必须登录才可以使用app。

⚠️⚠️⚠️ 风险性高 : 当然也可以做一个审核接口来应对,被发现会被下架。

最保险的: 你的运营人员和苹果达成协议, 不登录你的App不能做IAP购买. 腾讯视频 应该就是这种用户必须登录.

???????????? 若大家有IAP相关问题,都可询问,或许我可以帮到你

【iOS】苹果IAP(内购)中沙盒账号使用注意事项

iOS应用里面用到了苹果应用内付费(IAP)功能,在项目上线前一定要进行功能测试。测试肯定是需要的,何况这个跟money有关。。。开发完成了之后,如何进行测试呢?难道我测试个内购功能要自己掏钱?就算是公司掏钱,但是苹果要吃掉3成的啊,想想如果是99刀的商品,点下购买的时候心里都有点发慌。。。

苹果当然没这么坑了,测试内购,苹果提供了沙盒账号(也叫沙箱账号)的方式。这个沙箱账号其实是虚拟的AppleID,在开发者账号后台的iTune Connect上配置了之后就能使用沙盒账号测试内购,有了沙盒账号,就能体验一把土豪的感觉了,游戏钻石什么的随便充,反正不用我的钱。

登录苹果开发者后台--iTunes Connect--用户和职能--沙箱测试技术员,在这个界面你可以看到当前账号已经创建好的沙盒账号。

点击“+”进行创建

如图,我创建一个沙盒账号。具体信息:

一些经验总结,不当之处敬请指正。写作不易,喜欢请点个赞= _ =

苹果内支付(iOS IAP)的流程与常用攻击方式

摘录: 苹果应用内支付(iOS IAP)的流程与常用攻击方式

按照安全性原则, 客户端的所有信息都是不可信的,而且支付是业务中的核心模块,所以应该选择第二种。

下面简要介绍下,第二种方式的简单流程。

作为支付,安全性是第一位的,下面简要分析一下常用的攻击手段。

客户端拿到apple的receipt 并发送到server

server拿到这个receipt,向苹果验证得到apple_callback_data

如果apple_callback_data的status是21007,说明是沙盒模式(不用花钱就可以购买) 要根据具体需求判断处理逻辑,需要注意的是,ios的审核在支付的时候就采用的沙盒模式。

如果apple_callback_data的status是0,就要从apple_callback_data[‘receipt’][‘in_app’]这个list中拿到所有的记录,每一个进行充值。然后记录transaction_id和original_transaction_id来防止同一个transaction被重复使用。

= Original Transaction Identifier

返回所有充值成功和重复的transaction_id, 有client来complete transaction

summary

支付作为核心模块,除了技术上的保证,商务也应该每周进行一次对账。如果发现apple上的收入和服务端记录的收入有比较大的差距,就应该抓紧查看原因。

最后给出一个apple_callback_data的例子


文章名称:ios开发iap,iOs开发自身优势
网站地址:http://myzitong.com/article/dsddchi.html