我的问题,我真的需要帮助,是我无法让有条件地呈现“恢复购买”按钮的逻辑工作。
我已经使用应用内购买按钮构建了我的 IOS 应用程序,该按钮允许用户支付一次以解锁额外功能 - 类型为“非消耗性产品”。使用我的普通家庭用户 Apple ID 和其他一些测试 Apple ID(不是沙盒测试人员),购买功能在 TestFlight 中运行良好。我没有 Mac,因此无法使用沙盒环境。当试用期结束时,我会显示 Purchase 按钮,这会调用 CN1 Purchase API 和 PurchaseCallback,然后我使用 Storage 来存储已购买的标志。
purchaseApp.addActionListener(e -> {
if (Purchase.getInAppPurchase().wasPurchased("full_product")) {
ToastBar.showMessage("You have already previously purchased this product.", FontImage.MATERIAL_INFO);
...
} else {
Purchase p = Purchase.getInAppPurchase();
p.purchase("full_product");
}
});
(我没有对收据或收据商店做任何事情。)
但为了符合 Apple 的要求,我需要一个“恢复购买”按钮,这样用户就不会在新设备上再次付款。困难在于逻辑正确,因为我只希望在他们之前支付过费用的情况下显示“恢复”按钮,否则我只希望显示“购买”按钮。
所以我在下面创建了 userHasPreviousPurchased() 方法来测试要显示的按钮,并根据 CN1 文档将 RestoreCallback 接口(interface)添加到我的主类中。但是下面的方法永远不会在我的 iPhone 上使用 TestFlight 构建返回 true,所以我的恢复按钮永远不会显示。这是 p.getReceipts() 总是返回一个空列表,当我期望 1 行包含我的 SKU 时。
private boolean userHasPreviousPurchased() {
Purchase p = Purchase.getInAppPurchase();
if (p.isRestoreSupported()) {
p.synchronizeReceipts();
List<Receipt> receipts = p.getReceipts();
for (Receipt receipt : receipts) {
if (receipt.getSku().equalsIgnoreCase("full_product")) {
return true;
}
}
}
return false;
}
请您指出正确的方向。使用 CN1 API,您如何使用此类 IAP 测试以前的购买?
我尝试创建一个沙盒测试用户,并在我的设备上注销后,使用该用户购买 IAP(已被接受)。我在我的应用程序中有调试代码,并测试了上述方法,但仍然没有返回收据(由于我没有以沙盒用户身份登录,我看不到它是如何产生的)。
在此先感谢
Best Answer-推荐答案 strong>
如果您想跟踪谁已经购买了您的产品,您需要有一个服务器端组件来存储它。 Receipts API 依赖于此,并要求您实现 ReceiptStore。查看这些详细介绍此内容的博客文章。
关于ios - 在 Codenameone 中恢复应用内非消耗性产品,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/43598522/
|