android in app Einkauf wiederherstellen

  • Antworten:0
AndroidEntwickler
  • Forum-Beiträge: 58

25.03.2016, 15:44:16 via Website

in meiner android app kann man eine Vollversion freischalten (in app purchase).

das funktioniert soweit auch ganz gut.
aber jetzt erhielt ich von einem user die Mitteilung, das er die App vor wenigen Tagen erfolgreich zur Vollversion freigeschaltet hatte. nun hat er sein Smartphone gewechselt (gleiches Google Konto) und er möchte seinen Einkauf wiederherstellen.

Mit dem unten stehenden Code, habe ich folgenden Test durchgeführt:

  1. App heruntergeladen und geöffnet
  2. Vollversion mit Hilfe eines Promo Codes freigeschaltet
  3. App deinstalliert und erneut heruntergeladen
  4. Die Activity für die Freischaltung der Vollversion geöffnet und ich erhielt direkt die Meldung "App wurde bereits erworben - Vollversion wird freigeschaltet" => Fertig
  5. Habe die App auf einem anderen Smartphone (mit dem selben Google Konto) heruntergeladen, Schritt 4 mit selben Resultat erfolgreich wiederholt.

Der User erzählt mir, dass diese Meldung aus Schritt 4 bei Ihm nicht erschien und er die Vollversion erneut kostenpflichtig freischalten musste (diese doppelte Bestellung habe ich natürlich storniert)

Habe ich irgendwo noch einen Fehler oder möchte der User vllt. nur einen kostenlosen Promo Code "ergattern"?

FullVersion Activity

public class FullVersion extends AppCompatActivity implements IabBroadcastListener {

    Intent intent = null;
    boolean mIsPremium = false;
    static final String SKU_PREMIUM = "IAP-NAME";
    static final int RC_REQUEST = 10001;

    IabHelper mHelper;
    IabBroadcastReceiver mBroadcastReceiver;

    Button BuyFullVersion;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fullversion);

        BuyFullVersion = (Button) findViewById(R.id.BuyFullVersion);


        BuyFullVersion.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String payload = "";
                mHelper.launchPurchaseFlow(FullVersion.this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, payload);
            }
        });





        String base64EncodedPublicKey = "XXXXXXXXX";

        mHelper = new IabHelper(this, base64EncodedPublicKey);
        mHelper.enableDebugLogging(true);
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {

                if (!result.isSuccess()) {
                    // GOOGLE ACCOUNT MISSING
                    return;
                }

                if (mHelper == null) return;
                mBroadcastReceiver = new IabBroadcastReceiver(FullVersion.this);
                IntentFilter broadcastFilter = new IntentFilter(IabBroadcastReceiver.ACTION);
                registerReceiver(mBroadcastReceiver, broadcastFilter);
                mHelper.queryInventoryAsync(mGotInventoryListener);
            }
        });



    }







    IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result, Inventory inventory) {

            if (mHelper == null) return;

            if (result.isFailure()) {
                Log.e("-->","Failed to query inventory: " + result);
                return;
            }

            if (result.isFailure()) {
                Log.e("-->", "ERROR");
            }
            else {
                if (inventory.hasPurchase(SKU_PREMIUM) == true) {
                // ALERT MELDUNG: VOLLVERSION BEREITS ERWORBEN
                    // SET SHARED PREFERENCES BOOLEAN "FULLVERSION" = TRUE
                }
            }


        Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM);
        mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase));
       }
   };


    @Override
    public void receivedBroadcast() {
        mHelper.queryInventoryAsync(mGotInventoryListener);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (mHelper == null) return;

        if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    boolean verifyDeveloperPayload(Purchase p) {
        return true;
    }



    IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {

            if (mHelper == null) {
                return;
            }

            if (result.isFailure()) {
                Log.e("-->","Error purchasing: " + result);
                return;
            }


            if (purchase.getSku().equals(SKU_PREMIUM)) {
                mHelper.consumeAsync(purchase, mConsumeFinishedListener);
            }




            if (!verifyDeveloperPayload(purchase)) {
                Log.e("-->","Error purchasing. Authenticity verification failed.");
                return;
            }
        }
    };


    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
        public void onConsumeFinished(Purchase purchase, IabResult result) {

            if (mHelper == null) return;

            if (result.isSuccess()) {
                // SET SHARED PREFERENCES BOOLEAN "FULLVERSION" = TRUE
            } else {
                Log.e("-->","Error while consuming: " + result);
            }
        }
    };


}

— geändert am 25.03.2016, 15:46:58

Antworten