美文网首页
iOS14 内购审核被拒

iOS14 内购审核被拒

作者: 剁椒鸡蛋zy | 来源:发表于2020-11-02 18:36 被阅读0次

iOS14 内购失败 审核被拒

在iOS14发布后,我们提交了新版本,但是审核被拒,审核人员说是在iOS14下购买失败。
我们开始排查,发现在sandbox 环境下确实购买失败概率很高。

import Foundation
import StoreKit

class GrammPayQueueMgr: NSObject {
    static let `default` = GrammPayQueueMgr()

    var products: [SKProduct] = []
    func setup() {
        SKPaymentQueue.default().add(self)
        fetchProduct()
    }

    func restoreAction() {
        SKPaymentQueue.default().restoreCompletedTransactions()
    }

    func bugyAction(p: SKProduct) {
        let payment = SKPayment(product: p)
        SKPaymentQueue.default().add(payment)
    }

    var weekProcut: SKProduct {
        return products[0]
    }

    func fetchProduct() {
        let req = SKProductsRequest(productIdentifiers: ["xxxx"])
        req.delegate = self
        req.start()
    }

    func refreshReceipt() {
        let req = SKReceiptRefreshRequest()
        req.delegate = self
        req.start()
    }
}

extension GrammPayQueueMgr: SKRequestDelegate {
    func requestDidFinish(_ request: SKRequest) {
        print("sub- 请求完成")
    }

    func request(_ request: SKRequest, didFailWithError error: Error) {
        print("sub- 请求失败err= \(error)")
    }
}

extension GrammPayQueueMgr: SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        print("sub- 获取到商品\(response.products)")
        products = response.products
    }
}

// 复现步骤: iOS14下 ,点击restore恢复完成后,然后点击购买,看updatedTransactions代理回调打印输出,(iOS13下先加载一会, 然后显示购买弹框,返回一个purchasing交易,输入密码后购买成功返回purchased),但是在iOS14下立即返回一个restored,就结束了。

// 点击购买后,正常情况下应该先回调一个purchasing交易,购买完成后返回,purchased。但是在iOS14下会返回一个restored
extension GrammPayQueueMgr: SKPaymentTransactionObserver {
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        print("sub-交易状态来更新了\(transactions.count)")
        guard let fobj = transactions.first else { return }

        switch fobj.transactionState {
        case .purchased:
            print("sub-purchased 购买成功")
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                self.finsihTrans(trans: transactions)
            }
        case .restored:
            print("sub-restored恢复")
            finsihTrans(trans: transactions)
        case .failed:
            print("sub-failed 失败")
            finsihTrans(trans: transactions)
        case .purchasing:
            print("sub-purchaing 购买中。。。")
        default:
            finsihTrans(trans: transactions)
        }
    }

    func finsihTrans(trans: [SKPaymentTransaction]) {
        for t in trans {
            print("sub-finish 处理完成\(t.transactionIdentifier)-state=-\(t.transactionState)")
            SKPaymentQueue.default().finishTransaction(t)
        }
    }

    func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
    }

    func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
        print("sub- 恢复完成 错误")
    }

    func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
        print("sub- 恢复完成")
    }
}

  1. 我们的产品逻辑是,用户点击购买按钮后,先执行恢复操作先判断是否是已购买用户,不是才会进行购买。这个在iOS13下没有没有任何问题。但是在iOS14下面就会有问题,看上面的代码,发现iOS 14下面,finishTransaction 是异步处理的, 而且会很慢,如果你这个沙盒测试账号购买历史记录比较多的话,需要等待很久的时间才能全部finish完,比如我的账号有100多个购买记录,每次先restore,后就会把这些交易记录添加到队列中,然后再finish,全部finish完成需要十几分钟,但是在iOS13下面就会立即处理完成。这就是购买失败的原因。

  2. 然后我们就修改代码添加一些等待吗逻辑,确认都处理完了,再去购买,再次提审,又被拒了,但是我们这边测试都没有问题,就是可能需要等待比较长的时间,我们就写了一个小作文,并且录屏说我们这边没有问题,让他们换个设备,换个沙盒账号再测试,但是等了几天没有回信,后来申述,又等了几天还是没有回信,前后耽误了半个月。

  3. 然后我们就继续开发新版本,然后又提审新版本,内购相关代码并没有修改,然后就过了。

相关文章

  • iOS14 内购审核被拒

    iOS14 内购失败 审核被拒 在iOS14发布后,我们提交了新版本,但是审核被拒,审核人员说是在iOS14下购买...

  • iOS cocoapods依赖库重复问题

    项目中用到了MagicWindowSDK,WechatOpenSDK,但是审核被拒了,iOS端走的是内购,没有走微...

  • iOS 内购流程整理

    最近项目因为集成了支付宝,上架时被APP审核拒掉了,无奈只能接入内购。 参考文章: App内购通关:(一)非代码准...

  • 审核被拒 内购产品提前提交审核了

    Guideline 2.1 - Performance - App Completeness We are una...

  • 苹果内购审核那些被拒的原因

    小萌做的教育类型的项目终于上架了,小萌瞬间喜极而泣,内购终于符合苹果的审核要求啦,小萌感动的稀里哗啦的。 每次上架...

  • OC(廿六)内购审核规则-防止被拒

    1、创建内购买项目时,如果有某些地方没填,保存后会显示“元数据丢失”,这种状态的内购买项目是无法提交审核的,需要把...

  • iOS内购总结(含漏单、串单、流程、测试点)

    这两天因为appstore审核被拒的原因,不得不把微信支付宝等支付替换成苹果内购。经过两天的研究和学习我发现了内购...

  • 艰难的被拒经历

    所有人肯定都在提交1.0版本的时候出现各种问题。最恶心的就是因为内购问题被拒,需要接入内购苹果那边才会给你审核通过...

  • 苹果内购被拒

    App内购之外还有第三方支付,直接被拒绝,即使做了隐藏开关也是。还是老老实实的只做苹果支付吧!

  • iOS内购被拒

    我的个人app跟你的模式一致,前期也是被拒,详细阅读了苹果关于内购的说明后,理解了苹果内购针对的是设备和当前应用。...

网友评论

      本文标题:iOS14 内购审核被拒

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