内购是移动端一值在讨论的话题,每次上架内购功能要做好被拒的准备,小萌在2年前也做过内购,是OC版本,回想那段往事一把血泪呀,被拒了无数次才把内购功能送上AppStore

小萌之前的OC内购,中间也经历了不少的困难,详情请看苹果内购审核那些被拒的原因,不过之前是用OC封装的,现在小萌的主要语言是Swift,闲暇之余做了Swift5.X内购StoreKit原生的封装,特别齐全,可以直接使用哦Swift版StoreKit的内购Demo

语言: Swift5

Xcode: 11.4.1

环境: Mac CataLina 10.15.4

注意⚠️: 不建议大家升级,不能传送大文件,小萌升级之后上传AppStore就没有成功过

一、内购的流程

网上有很多,也是各种各样,不过小萌对下面的这张图很感兴趣,好好的研究了一下这张图,看完之后茅塞顿开呀

总结内购流程:

1、获取内购列表(从App内读取或从自己服务器读取(推荐服务器获取))

2、App Store请求可用的内购列表(其实就是判断从服务器获取的产品列表是否可用)

3、向用户展示内购列表

4、用户选择了要购买的产品,发个购买请求,收到购买完成的回调(购买完成后会把钱打给申请内购的银行卡内)

5、购买流程结束后, 向服务器发起验证凭证以及支付结果的请求

6、自己的服务器将支付结果信息返回给前端并发放虚拟产品

7、服务端的工作比较简单,分4步:

        7.1、接收ios端发过来的购买凭证。7.2、判断凭证是否已经存在或验证过,然后存储该凭证。7.3、将该凭证发送到苹果的服务器验证,并将验证结果返回给客户端。7.4、如果需要,修改用户相应的会员权限。7.5、考虑到网络异常情况,服务器的验证应该是一个可恢复的队列,如果网络失败了,应该进行重试。

简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证服务器,苹果将验证结果以JSON形式返回。

二、审核流程

网上特别多,小萌在这里就不分享了,小萌主要分享一下,上架的时候注意事项

三、创建产品流程

小萌在创建产品的之后提交AppStore上,因为创建的产品不符合要求,也被拒绝过一次,所以在这里分享一下内购产品创建需要注意的地方
第一步:填写参考名称和内购产品的ID

第二步:选择定价,保持一致

第三步:填写说明和描述,说明可以随意填,但是一定要有意义,描述一定是消耗多少人民币获得多少自己定义的币

第四步:App Store推广 无特殊需要不用传图片

第五步:截屏一定包含内购信息,否则会审核不通过,审核备注里面自己的测试账号和密码写进去,方便测试人员测试哦

四、注意事项

注意⚠️:

1、别提示是否登录,如果没有登录,点击直接跳到登录界面即可,一定不要询问哦

2、别提示是否购买,直接购买即可,美国就是这么直接呀,不买不要点击嘛,增加审核通过率

3、充值说明一定要有,并且声明仅限iOS系统使用,其他系统无权使用

4、创建项目的时候App Store 推广那里的图片是可选的,不必要选哦,如下图⬇️所示

5、还有其他需要注意的地方,详情看苹果内购审核那些被拒的原因,一次又一次被拒的血泪!

五、苹果的二次验证

第一次:交易完成后在移动端验证,返回正确的数据,验证完毕

第二次:小萌交给了后台去做验证,传了Base64位编码数据给后台

六、DemoSwift版StoreKit的内购Demo

小萌已经做了Swift的StoreKit原生的封装,下载直接可以使用

主要代码:

//交易完成在这里完成苹果验证func completeTransaction(transaction:SKPaymentTransaction){//        let environmentStr = String(data: transaction, encoding: .utf8)// 验证凭据,获取到苹果返回的交易凭据// appStoreReceiptURL iOS7.0增加的,购买交易完成后,会将凭据存放在该地址let receiptURL = Bundle.main.appStoreReceiptURL// 从沙盒中获取到购买凭据let receiptData = NSData(contentsOf: receiptURL!)// 发送网络POST请求,对购买凭据进行验证var urls : URL?let receiptURLString = receiptURL?.absoluteStringif receiptURLString?.contains("sandbox") == true { //判断是沙盒路径还是正式环境urls = URL(string: ITMS_SANDBOX_VERIFY_RECEIPT_URL)}else{urls = URL(string: VERIFY_RECEIPT_URL)}// 国内访问苹果服务器比较慢,timeoutInterval需要长一点var requset = URLRequest(url: urls!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)requset.httpMethod = "POST"// 在网络中传输数据,大多情况下是传输的字符串而不是二进制数据// 传输的是BASE64编码的字符串/**BASE64 常用的编码方案,通常用于数据传输,以及加密算法的基础算法,传输过程中能够保证数据传输的稳定性BASE64是可以编码和解码的*/let encodeStr = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions.endLineWithLineFeed)let payload = NSString(string: "{\"receipt-data\" : \"" + encodeStr! + "\"}")
//         print(payload)let payloadData = payload.data(using: String.Encoding.utf8.rawValue)requset.httpBody = payloadData;weak var weakSelf = self //避免循环引用let result = URLSession.shared.dataTask(with: requset) { (data, response, error) inif data == nil{print("验证失败")return}if response == nil {print("验证失败")return}let dict = try? JSONSerialization.jsonObject(with: data!, options: .mutableContainers)if dict != nil {//                print(dict!)}NotificationCenter.default.post(name: NSNotification.Name(rawValue: ProductPurchasedNotification), object: nil)weakSelf?.finishTransaction(transaction: transaction)}result.resume()}

这是验证流程,具体封装代码可以下载Swift版StoreKit的内购Demo,直接使用项目中的StoreObserver.swift文件即可,单例模式设计,很简单哦

Swift5.X版本StoreKit原生内购相关推荐

  1. cocos creator 发布IOS版本(六)内购

    cocos creator 版本3.3 参考文档: iOS 内购(In-App Purchase)总结 | 笑忘书店 iOS的应用内支付In-app purchase的开发 - 胡东东博客 App内购 ...

  2. IOS,苹果内购和添加广告

    内购--应用内购买 通过苹果应用程序商店有三种主要赚钱的方式: 直接收费(与国内大部分用户的消费习惯相悖) 广告(降低用户体验 应用程序名称带Lite可以添加广告) O2O -> Online推 ...

  3. 苹果内购IAP记录-2 StoreKit新版

    苹果内购新版的StoreKit2只支持iOS15以上,新的nsync同步接口,简单的使用如下: @available(iOS 15.0, *) public class MXLiveIAPStoreV ...

  4. iOS 内购StoreKit 框架介绍

    StoreKit 框架介绍 一.StoreKit 能做什么? In-App Purchase 提供和促进内容和服务的应用内购买. Apple Music 检查用户的Apple Music功能并提供订阅 ...

  5. iOS开发内购详细版本说明

    转自:http://www.jianshu.com/p/c252b2ccb078 一.最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧. 1.先从内购的iTunesConnect里配置说起吧, ...

  6. swift5 接入内购全流程

    公司需要对接内购,顺便记录一下过程. 填写苹果协议 app store connect 协议 填写其中的付费 App,填写点公司名称.公司简介.公司帐号.公司之类的. 由于已经填写过了无法截图,可以去 ...

  7. 苹果 iOS 内购三步曲:App 内退款、历史订单查询、绑定用户防掉单

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 转自:掘金 37手游iOS技术运营团队 https://juejin.cn/post/697473339 ...

  8. 苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21

    一.前言 如果大家的 App 有使用 IAP 功能,那么可能会遇到用户反馈苹果充值成功,但是服务没有到账的情况,用户一般会提供这样的苹果收据: 用户反馈时提供的苹果收据中,有一个字段中 ORDER I ...

  9. App Store内购机制

    如今,不同系统平台都有专属的商店应用,Android平台有Google Play,Windows平台有Windows Store,iOS与macOS平台则有App Store.苹果公司的成功,很大程度 ...

最新文章

  1. 查看java内存_怎么查看java虚拟机存储空间使用情况
  2. 通过神经图稳定对脑机接口的即插即用控制,四肢瘫痪患者可以轻松控制电脑光标...
  3. day for people, night for material
  4. WARNING: The host '$hostname' could not be looked up with resolveip. (转)
  5. python列表添加元素到中间_python在列表的元素中间插入空行
  6. 如何实现轮播图的内容的多少随div的大小动态变化_小程序学习日志8:swiper滑动轮播组件(轮播图)(上)...
  7. CSS的预编译——less语言基本语法教程(入门)
  8. L1-045 宇宙无敌大招呼-PAT团体程序设计天梯赛GPLT
  9. Android Paint 详细讲解
  10. C# Excel绘制组合图
  11. 嵌入式系统开发流程是怎样的?
  12. 【Scratch画图100例】图39-scratch实心圆 少儿编程 scratch编程画图案例教程 考级比赛画图集训案例
  13. 干货 | 使用京东云搭建视频直播网站
  14. 关于iTerm2 你不知道的一些事
  15. “番茄”让时间变成我们的朋友
  16. alex机器人 ser_机器人Alex
  17. 系统调优---emqx百万连接测试系统、网络、erlang虚拟机参数调优
  18. 纸片人算什么?教你造真“3D小姐姐”!可以动的模型
  19. ios 常用的宏定义
  20. TI am335x 内核分析2--资源遍历代码分析

热门文章

  1. 基于声信号的长距离供水管道泄漏监测系统方案
  2. linux 映射远程文件夹,Linux远程映射磁盘的方法
  3. 嵌入式linux哪个版本,嵌入式Linux的主流版本及开发商
  4. 解决因缺少msvcp71.dll无法启动Windows程序
  5. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025
  6. VMware ESXi 8.0c Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
  7. 手机上怎么用记事本?
  8. 深入浅出Activity插件化相关原理
  9. 文档管理使人力资源部门受益的 7 种主要方式
  10. 浅谈HTTP FTP和P2P网络大文件传输的优劣势