ios - 在 Codenameone 中恢复应用内非消耗性产品
<p><p>我的问题,我真的需要帮助,是我无法让有条件地呈现“恢复购买”按钮的逻辑工作。</p>
<p>我已经使用应用内购买按钮构建了我的 IOS 应用程序,该按钮允许用户支付一次以解锁额外功能 - 类型为“非消耗性产品”。使用我的普通家庭用户 Apple ID 和其他一些测试 Apple ID(不是沙盒测试人员),购买功能在 TestFlight 中运行良好。我没有 Mac,因此无法使用沙盒环境。当试用期结束时,我会显示 Purchase 按钮,这会调用 CN1 Purchase API 和 PurchaseCallback,然后我使用 Storage 来存储已购买的标志。</p>
<pre><code> 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");
}
});
</code></pre>
<p>(我没有对收据或收据商店做任何事情。)</p>
<p>但为了符合 Apple 的要求,我需要一个“恢复购买”按钮,这样用户就不会在新设备上再次付款。困难在于逻辑正确,因为我只希望在他们之前支付过费用的情况下显示“恢复”按钮,否则我只希望显示“购买”按钮。</p>
<p>所以我在下面创建了 userHasPreviousPurchased() 方法来测试要显示的按钮,并根据 CN1 文档将 RestoreCallback 接口(interface)添加到我的主类中。但是下面的方法永远不会在我的 iPhone 上使用 TestFlight 构建返回 true,所以我的恢复按钮永远不会显示。这是 p.getReceipts() 总是返回一个空列表,当我期望 1 行包含我的 SKU 时。</p>
<pre><code> 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;
}
</code></pre>
<p>请您指出正确的方向。使用 CN1 API,您如何使用此类 IAP 测试以前的购买?</p>
<p>我尝试创建一个沙盒测试用户,并在我的设备上注销后,使用该用户购买 IAP(已被接受)。我在我的应用程序中有调试代码,并测试了上述方法,但仍然没有返回收据(由于我没有以沙盒用户身份登录,我看不到它是如何产生的)。</p>
<p>在此先感谢</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>如果您想跟踪谁已经购买了您的产品,您需要有一个服务器端组件来存储它。 Receipts API 依赖于此,并要求您实现 ReceiptStore。查看这些详细介绍此内容的博客文章。</p>
<ul>
<li> <a href="https://www.codenameone.com/blog/intro-to-in-app-purchase.html" rel="noreferrer noopener nofollow">Introduction to In-App Purchase</a> </li>
<li> <a href="https://www.codenameone.com/blog/in-app-purchase-non-renewable-subscriptions.html" rel="noreferrer noopener nofollow">Non-renewable Subscriptions</a> - 这将向您介绍 ReceiptStores 及其工作原理。</li>
<li> <a href="https://www.codenameone.com/blog/autorenewing-subscriptions-in-ios-and-android.html" rel="noreferrer noopener nofollow">Auto-renewing Subscriptions in iOS and Android</a> - 这包括适用于 Android 和 iOS 的客户端和服务器的完整示例代码。</li>
</ul></p>
<p style="font-size: 20px;">关于ios - 在 Codenameone 中恢复应用内非消耗性产品,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/43598522/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/43598522/
</a>
</p>
页:
[1]