StefMa
Dauer-User
- 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
-> Zeiter Teil
Auf GitHub
Gruß
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ß