我的问题,我真的需要帮助,是因为我无法使逻辑工作有条件地呈现'恢复购买'按钮。
我已经使用应用程序内购买按钮构建了我的IOS应用程序,该按钮允许用户付费一次以解锁额外功能 - 类型为“非消耗性产品”。使用我的常规家庭用户Apple ID和一些其他测试Apple ID(不是沙箱测试人员),购买功能在TestFlight中正常工作。我没有Mac,因此无法使用Sandbox环境。当试用期结束时,我显示购买按钮,这将调用CN1购买API和PurchaseCallback,然后我使用存储来存储已购买的标志。
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接口添加到我的主类。但是下面的方法永远不会在我的IPhone上使用TestFlight构建返回true,因此我的恢复按钮永远不会显示。这是p.getReceipts()总是返回一个空的List,当我期望有一行我的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(已被接受)。我在我的应用程序中调试代码,测试上面的方法,但仍然没有返回收据(我没有看到它可能有什么,因为我没有以沙箱用户身份登录)。
非常感谢提前
答案 0 :(得分:2)
如果您想要跟踪谁已经购买了您的产品,您需要有一个服务器端组件来存储它。 Receipts API依赖于此,并要求您实现ReceiptStore。查看这些详细介绍的博客文章。