美文网首页
swift iOS内购

swift iOS内购

作者: 木头炫 | 来源:发表于2022-05-23 09:10 被阅读0次

    一.使用轮子SwiftyStoreKit

    二.方法

    在程序入口didFinishLaunchingWithOptions  //程序启动时在AppDelegate添加观察者,监测购买结果状态,并根据需求作出相应处理。

    1.监听自动续费订单

    因为自动订阅类型,除了第一次购买行为是用户主动触发的。后续续费都是Apple自动完成的,一般在要过期的前24小时开始,苹果会尝试扣费,扣费成功的话会在APP下次启动的时候主动推送给APP。所以,APP启动的时候一定要添加上面的那句话。

    用到SwiftyStoreKit.completeTransactions

    这里的监听只是在重新进入app调用,将苹果放在队列里的订单监听到,然后你可以在回调里做相应的处理

    2.订单支付 SwiftyStoreKit.purchaseProduct

    这里面要传一个 productId (产品ID ) 这个id是你在app创建内购时填写的产品id,即你要支付那个订单,就直接填写对应的产品id就行

    3.需要注意的问题,

    (1)漏单怎么处理,我们的处理方式时添加一个恢复权益的按钮,点击时,将收据Receipt传给后台,后台去appstore请求所有的订单,然后将订单信息同步到我们的数据库,并且同步会员信息

    (2)AppleID 怎么跟用户关联 后台获取到的订单信息json里 latest_receipt_info字典里有一个 original_transaction_id 这个id是跟appleID关联的,so,你可以用original_transaction_id跟用户关联

    (3)服务器验证收据 https://www.jianshu.com/p/aba2edbb7871

    (4)恢复以前的购买

    使用restorepurchase方法恢复已完成的事务。当成功时,该方法返回所有非消耗品购买,以及所有自动更新的订阅购买,而不管它们是否已过期。

    (5)获取收据(已加密)

     SwiftyStoreKit.fetchReceipt(forceRefresh:true, completion: <#T##(FetchReceiptResult) -> Void#>)

    如果为forceRefresh = false,则从文件返回本地收据,如果丢失,则刷新它。

    如果为forceRefresh = true,则始终刷新收据。

    (6)收据验证的环境

    在sandbox中验证receipt:https://sandbox.itunes.apple.com/verifyReceipt

    在生产环境中验证receipt:https://buy.itunes.apple.com/verifyReceipt

    (7)识别沙盒环境下收据的方法有两种:

    1.根据收据字段 environment = sandbox。

    2.根据收据验证接口返回的状态码。如果status=21007,则表示当前的收据为沙盒环境下收据

    苹果反馈的状态码:

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

    21002 收据数据不符合格式

    21003 收据无法被验证

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

    21005 收据服务器当前不可用

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

    21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证

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

    相关文章

      网友评论

          本文标题:swift iOS内购

          本文链接:https://www.haomeiwen.com/subject/fsifahtx.html