In-App-Purchase

内购类型

  • 消耗型项目
  • 非消耗性项目
  • 自动续期订阅
  • 非自动续期订阅
消耗型项目 非消耗型项目 自动续期订阅 非自动续期订阅
可以Restore
有时间限制

收据验证

On-device validation Server-side validation Validates authenticity of receipt Yes Yes Includes renewal transactions Yes Yes Includes additional user subscription information No Yes Handles renewals without client dependency No Yes Resistant to device clock change No Yes

交易流程图

graph TB
    appStart(App启动)-->register[注册交易观察者]
    register--SKPaymentQueue.defaultQueue addTransactionObserver:-->getProducts(根据ID获取Products)

    subgraph apple
    giveProducts[App Store提供Products Info]
    appleHandlePay[Apple处理支付订单]
    appleHandleRestore[Apple处理恢复购买]
    end

    subgraph user
    uesrSelectProduct[用户选择Product]
    uesrSelectRestore[用户选择恢复购买]
    end
    getProducts--SKProductsRequest实例方法start-->giveProducts
    giveProducts--SKProductsRequestDelegate-->appStoreUI[展示商店页面]
    giveProducts--SKProductsRequestDelegate-->invaildID[不合法ProductID]
    appStoreUI-->uesrSelectProduct
    uesrSelectProduct-->makePayReq[发送支付请求]
    makePayReq--SKPaymentQueue.defaultQueue addPayment-->appleHandlePay
    appleHandlePay--调用队列观察者的SKPaymentTransactionObserver中 paymentQueue:updatedTransactions:-->appleHandlePayRes[处理支付订单结果]
    appleHandlePayRes--Failed-->payFail[购买失败]
    appleHandlePayRes--Purchased-->payPurchased[已购买]
    appleHandlePayRes--Restored-->payRestored[恢复购买]
    appleHandlePayRes--Deferred-->payDeferred[购买延迟]
    appleHandlePayRes--    Purchasing-->payPurchasing[购买中]

    appStoreUI-->uesrSelectRestore
    uesrSelectRestore--SKPaymentQueue.defaultQueue restoreCompletedTransactions-->appleHandleRestore
    appleHandleRestore--调用队列观察者的SKPaymentTransactionObserver中 paymentQueue:updatedTransactions:和 paymentQueueRestoreCompletedTransactionsFinished: 或 paymentQueue:restoreCompletedTransactionsFailedWithError:-->appleHandlePayRes[处理恢复购买结果]

    payPurchased--SKPaymentTransaction-->paySuccessed[购买完成]
    payRestored--SKPaymentTransaction的originalTransaction获取到商品id支付凭证等信息-->paySuccessed[购买完成]
    paySuccessed--NSBundle mainBundle appStoreReceiptURL-->getReceipt[获取收据验证交易]
    getReceipt--本地验证-->AppVerifyReceipV[App验证收据]
    getReceipt--服务端验证-->ServerVerifyReceipV[服务端验证收据]
    AppVerifyReceipV-->unlock[解锁内容]
    ServerVerifyReceipV-->unlock[解锁内容]
    unlock--SKPaymentQueue.defaultQueue finishTransaction-->finish[完成交易]

    payFail--SKPaymentQueue.defaultQueue finishTransaction-->finish[完成交易]

    finish--SKPaymentQueue.defaultQueue removeTransactionObserver:-->appEnd(App停止)

results matching ""

    No results matching ""

    results matching ""

      No results matching ""