2016-08-24 1 views
1

Ursprünglich hatte ich den Code nur einmal für den Kauf implementiert.Möchten Sie die Geschichte des gekauften Artikels kennen

 IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
     public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
      Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 

      // if we were disposed of in the meantime, quit. 
      if (mHelper == null) return; 

      if (result.isFailure()) { 
       Log.e(TAG,"Error purchasing: " + result); 
       return; 
      } 
      if (!verifyDeveloperPayload(purchase)) { 
       Log.e(TAG,"Error purchasing. Authenticity verification failed."); 
       return; 
      } 

      Log.d(TAG, "Purchase successful."); 

      if (purchase.getSku().equals(ITEM_SKU)) { 
       // bought 1/4 tank of gas. So consume it. 
       Log.d(TAG, "Purchase is gas. Starting gas consumption."); 
       Log.e("Successful","prrrrrrr"); 
       GlobalClass.savePreferences2("isPremiumUser",1,context); 
       mHelper.consumeAsync(purchase, mConsumeFinishedListener); 
      } 
     } 
    }; 
    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() { 
     public void onConsumeFinished(Purchase purchase, IabResult result) { 
      Log.d(TAG, "Consumption finished. Purchase: " + purchase + ", result: " + result); 

      // if we were disposed of in the meantime, quit. 
      if (mHelper == null) return; 

      // We know this is the "gas" sku because it's the only one we consume, 
      // so we don't check which sku was consumed. If you have more than one 
      // sku, you probably should check... 
      if (result.isSuccess()) { 
       // successfully consumed, so we apply the effects of the item in our 
       // game world's logic, which in our case means filling the gas tank a bit 
       Log.d(TAG, "Consumption successful. Provisioning."); 
       Log.e("Consume ","Successful"); 
       start_Activity(); 
      } 
      else { 
       Log.e("Purchase ","failed"+result); 
      } 
      Log.d(TAG, "End consumption flow."); 
     } 
    }; 

Dies funktioniert nur, bis der Benutzer die App deinstalliert. Jetzt möchte ich es in einen einmaligen Kauf umwandeln. Ich habe

IabHelper.OnConsumeFinishedListener and mHelper.consumeAsync(purchase, mConsumeFinishedListener); 

aus meinem Code entfernt. Es funktioniert gut für die zukünftigen Zahlungen. Aber ich möchte, dass die Zahlungen, die vor den Änderungen vorgenommen wurden, auch nach der Neuinstallation der App keine Bezahlung erfordern. Ist es möglich, das zu tun?

Antwort

0

Es ist möglich, IAP-Artikel zu erstellen, die nur einmal gekauft und auf den Google Play-Servern gespeichert werden müssen. Das einzige, was geändert werden muss, ist, das vom Benutzer erworbene Element nicht zu verbrauchen. Spielen

So kratzen im Grunde nur das Stück, wo Sie

consumeAsync... 

und stattdessen das Inventar beim Start App abfragen rufen von Google-Servern spielt, wie der IAP seine schnelle v3, da die Käufe von Google zwischengespeichert werden.

Weitere Informationen zu Verbrauchsmaterialien und Verbrauchsmaterialien finden Sie unter official site.

Nur Problem, das Sie treffen werden, die Benutzer, auf denen Sie das Element bereits verbraucht haben, erhalten es nicht zurück, für das Sie etwas auf Ihrem eigenen Server implementieren müssen, um diese Fälle zu behandeln, oder dann lassen Sie sie sich mit Ihnen in Verbindung setzen und geben Sie ihnen manuell einige Codes, die Sie implementiert haben, um das Feature zu erhalten, aber das ist wirklich eine anwendungsspezifische Wahl.

Verwandte Themen