In App Billing - Theorie!!

StefMa

StefMa

Dauergast
450
Habe mir mal das Tutorial von Google zu In-App Billing angeschaut und etwas "zerflückt". Selbstverständlich findet man in den Offiziellen Google Docs bessere Anleitungen. Allerdings denke ich, dass ich alles "wichtige" auch zusammengefasst bekomme :)
Dennoch, ein blick in die Docs schadet nie!!

-> Erster Teil
Auf GitHub
Code:
// Vorbereitung
/* Lade dir das Example von Google runter.
 * Es heißt "TrivialDrive" und findet man unter <sdk>/extras/google/play_billing/
 * 
 * Für schon vorhandene Projekte:
 * Suche dir die "IInAppBillingService.aidl" aus TrivialDrive
 * und lad sie in deinen "src/" Ordner.
 * Builde deine App neu. In "gen/" sollte nun 
 * eine "IInAppBillingService.java" vorhanden sein.
 * Kopiere vom Example Projekt aus "/util" die Helfer-Klasse
 * "IabHelper" in dein Projekt. Vergesse nicht dein Package-Name
 * zu ändern. 
 * 
 * In der Manifest musst du die Erlaubnis 
 * <uses-permission android:name="com.android.vending.BILLING" />
 * hinzufügen
 *
 * Nun muss man die App schon in den Play Store hochladen.
 * Unter In-App Billing steht ein 64bit-String. Den wir uns
 * irgendwo speichern. Den benötigen wir später nochmal.
*/
 
// Der Quelltext
/*
 * Zuerst erstellst du eine Instanz von IabHelper.
 * Die Paramter daür sind: Activity & den Base64-String aus dem Store
*/
IabHelper mHelper;
 
@Override
public void onCreate(Bundle savedInstanceState) {
   // ...
   String base64EncodedPublicKey;
   
   // compute your public key and store it in base64EncodedPublicKey
   mHelper = new IabHelper(this, base64EncodedPublicKey);
}
 
/*
 * Damit der Dialog zum Kaufen eines Produktes kommt,
 * müssen wir die Methode "startSetup" vom IabHelper
 * aufrufen. Die Übergabe ist der
 * IabHelper.OnIabSetupFinishedListener
 * Dieser wird aufgerufen, wenn wir eine Verbindung mit
 * dem Google Play hergestellt haben.
*/
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
   public void onIabSetupFinished(IabResult result) {
      if (!result.isSuccess()) {
         // Oh noes, there was a problem.
         Log.d(TAG, "Problem setting up In-app Billing: " + result);
      }            
         // Hooray, IAB is fully set up!  
   }
});
 
/*
 * Damit wir kein battery-drain haben
 * müssen wir in die onDestroy den Helper
 * vom Play Store lösen
*/
@Override
public void onDestroy() {
   super.onDestroy();
   if (mHelper != null) mHelper.dispose();
   mHelper = null;
}

-> Zeiter Teil
Auf GitHub
Code:
// In-App Produkte vorbereiten
/*
 * Dazu loggen wir uns in die Play Console ein.
 * Dort gehen wir auf die APK, die wir hochgeladen haben,
 * und dort auf In-App Billing.
 * Hier können wir jetzt Produkte hinzufügen
 * Die Form dafür kenne ich nicht. Sollte aber laut Gooogle
 * selbsterklärend sein.
 * Wichtig ist hioerbei die SKU!
*/

// App-Produkte kaufen
/*
 * Um In-App Produkte zu kaufen, müssen wir von IabHelper
 * die Methode "launchPurchaseFlow" aufrufen.
 * Übergeben werden 5 Paramter:
 * 1. Activity: Activity
 * 2. String: SKU-ID
 * 3. Integer: Eine ID die auch im onActivityResult zurückgegeben wird
 * 4. OnIabPurchaseFinishedListener: Wenn der Einkauf erfolgreich war
 * 5. String: Ein spezieller string, wo man "beliebig" was übergeben kann.
 * 5. Wird auch in onActivityResult übergeben
*/
mHelper.launchPurchaseFlow(this, SKU_GAS, 10001,   
   mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
   
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
   = new IabHelper.OnIabPurchaseFinishedListener() {
   public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
   {
      if (result.isFailure()) {
         Log.d(TAG, "Error purchasing: " + result);
         return;
      }      
      else if (purchase.getSku().equals(SKU_GAS)) {
         // consume the gas and update the UI
      }
      else if (purchase.getSku().equals(SKU_PREMIUM)) {
         // give user access to premium content and update the UI
      }
   }
};

// Zukünftig
/*
 * Die Gekauften Items werden alle bei Google Play gespeichert.
 * Somit kann man schon beim Programm-Start schauen, ob
 * der User ein Produkt gekauft hat.
 * Dazu ruft man vom Helper die Methode
 * queryInventoryAsync(mGotInventoryListener);
 * auf.
 * Im Listener bekommt man dann angezeigt, ob der User
 * das Produkt gekauft hat, oder nicht
*/
IabHelper.QueryInventoryFinishedListener mGotInventoryListener 
   = new IabHelper.QueryInventoryFinishedListener() {
   public void onQueryInventoryFinished(IabResult result,
      Inventory inventory) {

      if (result.isFailure()) {
        // handle error here
      }
      else {
        // does the user have the premium upgrade?
        mIsPremium = inventory.hasPurchase(SKU_PREMIUM);        
        // update UI accordingly
      }
   }
};

Gruß
 
  • Danke
Reaktionen: erli2909 und ui_3k1
Hellow,

ich teste jetzt mal die Prozedur und teile meine Erkenntnisse mit.
Ach so, bevor es vergessen geht: hier der Link zur Google Dokumentation.

@StefMa: Beim "zweiten" Schritt in deiner Zusammenfassung ist noch zu ergänzen, dass ein Paket unter dem Namen "com.android.vending.billing" anzulegen ist, in das man die .aidl-Datei kopiert. (Ohne das gings bei mir jedenfalls nicht)
 
Nachtrag:
Ich checks gar nicht. Werde somit meine App auch nicht mit in-app-Käufen ausstatten. Meiner Meinung nach ist die Google Dokumentation ganz schön beschissen (sorry für die harten Worte) und generell funktioniert alles eher schlecht, als recht. (mein Projekt ging mehrmals kaputt, wobei ich mich stets an die Google Doc. gehalten habe - der Fehler "couldnt find xyz.apk" -> top!)

Allgemeines:
-> Wenn man Informationen haben möchte, wie erfolgreich In-App-Billing ist, findet fast nichts (positives) / Anleitungen wie man in App Billings "hackt" (aha!^^) findet man dagegen haufenweise.
-> Testen ist wohl auch nur unter widrigsten Bedingungen möglich (via eigenem Devl. Account scheinbar gar nicht) - wobei das ja nichts neues ist (ich sag nur "Google Kontakte")...

Mein vorläufiges Fazit: "In App Billings, nein Danke!"
Darüber hinaus bin ich von Google ziemlich enttäuscht, dass der Entwicklungsstand dieser Technik scheinbar reihenweise Probleme bereitet. Ich stehe jedenfalls nach Stunden des Recherchierens nicht alleine mit einem riesen Fragezeichen da.

Wäre mal interessant wie Apple das löst...
 
Danke für das Feedback. Sobald ich wieder mehr Zeit habe, werde ich es selbst testen, ein Testprojekt erstellen und den entsprechenden Source-Code hochladen...

Gruß
 
  • Danke
Reaktionen: ui_3k1
Hallo StefMa,
hat jetzt geklappt... Deine Anleitung passt schon in weiten Teilen, auch wenn meiner Meinung nach noch ein paar Hinweise fehlen...

Wenn du willst können wir mal ein Tutorial schreiben was möglichst alles erklärt und umfassend ist, bei ein paar Inhalten wirst du mir bei dem Vorhaben wahrscheinlich sehr gut helfen können - jedenfalls so meine Vermutung, wenn ich manche Beiträge von dir lese. :)
Ich habe das komplette Web durchsucht und auf deutsch findet man da wirklich gar nichts Brauchbares, da ist dein "Einstieg" schon vorbildlich.
Meine neusten Erkenntnisse habe ich hier zusammengefasst - wobei sich bei mir die Probleme erst gegen Ende der Implementierung ergeben haben. (Bin halt ein ungeduldiger Depp) :D
 

Ähnliche Themen

CreepaZz
  • CreepaZz
Antworten
0
Aufrufe
608
CreepaZz
CreepaZz
M
Antworten
0
Aufrufe
1.146
mglinka99
M
D
Antworten
1
Aufrufe
1.565
koje71
koje71
Zurück
Oben Unten