2017-04-24 7 views
2

私の問題は、本当に助けが必要です。なぜなら、「購入の復元」ボタンを条件付きでレンダリングするロジックを手に入れることができないからです。Codenameoneでのアプリ内非消耗品の復元

私は自分のIOSアプリを「非消耗品」タイプの追加機能をロック解除するために1回の支払いが可能なアプリ内購入ボタンで構築しました。購入機能は、私の定期的な家庭用Apple IDと他のいくつかのApple ID(Sandboxテスターではない)を使用して、TestFlightで正常に動作します。私はMacを持っていないので、Sandbox環境を使用することはできません。試用期間が終了すると、購入ボタンが表示され、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"); 
     } 
    }); 

(私は領収書またはreceipt_storesで何もしておりません。)

しかし、Appleに準拠するために、私は、ユーザーが新しいデバイスに再び払っていないので、ボタン「購入復元]を必要としています。難しかったのは、以前に支払いを済ませた状態でリストアボタンを表示させたいだけだったからです。そうでなければ、購入ボタンを表示したいだけです。

私は、以下のuserHasPreviousPurchased()メソッドを作成し、表示するボタンをテストし、RestoreCallbackインターフェイスをメインクラスのCN1ドキュメントに追加しました。しかし、以下のメソッドは、TestFlightビルドを使用している私のIPhoneで真実を返すことはないので、私の復元ボタンは決して表示されません。 p.getReceipts()は、SKUが入っている行が1行あると予想されるときに、常に空のListを返します。

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を購入しました(これは受け入れられました)。上記のメソッドをテストしてアプリでデバッグコードを取得しましたが、それでも領収書は返されませんでした(私はサンドボックスユーザーとしてサインインしていないので、どのように表示するのか分かりません)。あなたはすでにあなたの製品を購入した人を追跡したい場合は、事前

答えて

2

多くのおかげで、あなたはこれを格納するためのサーバー側コンポーネントを持っている必要があります。 Receipts APIはこれに依存しており、ReceiptStoreを実装する必要があります。詳細については、これらのブログ記事をご覧ください。

+1

非常に包括的なブログです。私はサブスクリプションではなく、非消耗品を使用していますが、Appstoreは私に依然としてRestore機能を要求しています。したがって、元のクエリです。それは、彼らが私のアプリを誤解している可能性がありますか、またはあなたはちょうど領収書を追跡する必要があります(そして、サーバーを持っている)は、AppStoreでIAPをやっていますか?もしそうなら、私はAppstoreがレシートを保持している「サーバー」であることを素朴に考えていた。ブログから、領収書を保持するために自分のサーバーを作成する必要があります。私はこれが悲しいことにIAPを使用している私を阻止していると思う。ありがとう –

+0

上記に加えて、Applesの開発者ガイドラインを読むと、「購入したコンテンツへのアクセスを維持するためにトランザクションを復元します...ほとんどの場合、すべてのアプリで領収書を更新し、領収書に商品を配達する必要があります...レシートを更新すると、App Storeに領収書の最新コピーがあるかどうかを尋ねます。 AppStoreが私のためにこれを行うことができるはずである場合、私自身のデータベースで領収書を保持することができますか?多くのおかげです –

+0

あなたのケースでは、あなたのストレージ変数をチェックして購入がデバイスにロードされたかどうかを検出できます。 –

関連する問題