IOs-如何处理应用内购买计费?

时间:2021-04-29 09:52:03

标签: xcode react-native in-app-purchase expo

为了使用 expo am using https://docs.expo.io/versions/latest/sdk/in-app-purchases 实现应用内购买。
我按照文档实施并在沙箱模式下对其进行了测试。我所做的是:

1)在应用商店的应用购买中设置。

2) 相应地实现功能。

3)使用云功能验证收据并返回到期日期。

我的问题是,我们到底有什么关于计费的事情?在沙盒模式下,如果是虚假交易,它不会询问任何有关付款的问题。它在生产中的工作方式有所不同,需要我们做任何事情用于管理计费? 任何解释、建议和更正都很棒。

我的代码是:

........
if (InAppPurchases.setPurchaseListener) {
        InAppPurchases.setPurchaseListener(({ responseCode, results, errorCode }) => {
            if (responseCode === InAppPurchases.IAPResponseCode.OK) {
                results.forEach(purchase => {
                    if (!purchase.acknowledged) {
                        if (purchase.transactionReceipt) {
                            if (Platform.OS === "ios") {
                                if (!this.flag) {
                                    this.flag = true;
                                    fetch("url", {
                                        method: "POST",
                                        body: JSON.stringify(purchase),
                                        headers: { "Content-type": "application/json;charset=UTF-8" }
                                    })
                                        .then(response => {
                                            if (response.ok) {
                                                return response.json();
                                            }
                                        })
                                        .then(json => {
                                            if (json && Object.keys(json).length) {
                                                let subscriptionDetails = {};
                                                subscriptionDetails.subscribed = json.isExpired;
                                                subscriptionDetails.expiry = JSON.parse(json.expiryDate);
                                                subscriptionDetails.inTrialPeriod = json.inTrial;
                                                subscriptionDetails.productId = json.id;
                                                SecureStore.setItemAsync(
                                                    "Subscription",
                                                    JSON.stringify(subscriptionDetails)
                                                )
                                                    .then(() => {
                                                        console.info("subscription Saved:");
                                                        store.dispatch(
                                                            setWsData("isSubscriptionExpired", json.isExpired)
                                                        );
                                                        let expired = json.isExpired;
                                                        store.dispatch(setUiData("isCheckAnalyze", true));
                                                        store.dispatch(setWsData("firstSubscription", false));
                                                        
                                                        this.setState({ checkExpiry: json.isExpired });
                                                        
                                                        if (!expired) {
                                                            InAppPurchases.finishTransactionAsync(purchase, true);
                                                            
                                                            alert("Now you are Subscribed!!");
                                                        } else {
                                                            alert("Expired");
                                                        }
                                                    })
                                                    .catch(error =>
                                                        console.error("Cannot save subscription details:", error)
                                                    );
                                            }
                                        })
                                        .catch(err => console.log("error:", err));
                                }
                            }
                        }
                    }
                });

0 个答案:

没有答案