AndroidPIT-Lizensierung

  • Antworten:6
  • OffenNicht stickyNicht beantwortet

22.07.2011 11:11:16

ich habe jetzt die App Lizensierung (http://www.androidpit.de/de/android/developer-licensing-howto) eingebunden, war ja nicht weiter schwer.

Etwas hat mich jedoch verwundert. Ich habe es so implementiert, dass die Lizenz zugleich bei AndroidPIT als auch beim Android Market geprüft wird.
Beim Start der App wird die Methode IAndroidPitLicenseCheckerCallback.applicationError() mit dem errorCode ERROR_COMMUNICATION_WITH_APP_CENTER aufgerufen. Ist ja auch logisch, denn in meinem Emulator ist dasApp Center nicht installiert, und meine App ist noch gar nicht hochgeladen.

Aber m.E. findet dann gar keine Prüfung der Lizenz beim Android Market statt.

Denn zuvor hatte ich nur den LicenseChecker von Google implementiert. Und beim Ausführen von meiner App im Emulator war logischerweise die Lizenz ungültig und die Methode LicenseCheckerCallback.dontAllow() wurde aufgerufen.
Wenn man die App über den Android Market gekauft hat, hat es funktioniert und die Methode LicenseCheckerCallback.allow() wird aufgerufen.

Nachdem ich aber nun die AndoidPIT-Implementierung verwende, kann ich die App ohne weiteres im Emulator starten, was m.E. nicht gehen sollte.
Wo ist mein Denkfehler?

Alexander Miehlke
http://www.almisoft.de

22.07.2011 11:27:59

Nun ja, die App habe ich ja noch gar nicht bei AndroidPIT hochgeladen. Sie ist z.Zt. nur beim Google Android Market verfügbar.
Ich erhalte ja auch ERROR_COMMUNICATION_WITH_APP_CENTER. Weil eben das App-Center gar nicht in meinem Emulator installiert ist.
Eine Prüfung der Lizenz kann also gar nicht stattfinden. Dann müsste aber m.E. eine Prüfung über den Android Market passieren, was aber nicht geschieht.

22.07.2011 11:32:17

Ich meine mich zu erinnern, dass die Prüfung erst bei Google stattfindet, dann bei AP.
Wenn Google was anderes als LICENSED liefert und das App-Center nicht installiert ist, kommt es zu der o.g. Meldung.

Das ist halt das Dilemma in der Situation.
dontAllow() wäre ja im Grunde falsch, denn es könnte ja einfach sein, dass der User die App bei AndroidPIT legal erworben hat und dann das AppCenter deinstalliert hat.
So kann man er in der Situation immerhin den hilfreichen Hinweis geben, wie er das Problem beheben könnte.

EDIT:
Hab grad die passende Aussage von Carsten gefunden:
To clearify why there is no dontAllow() on most of the error messages: We think that it is unwise not to allow the user to use his program because some problems with the license check environment arised. We think that we will leave it to the developer of the app which links against the library to decide how to react properly. So dontAllow() is called only when the library gets a NOT_LICENSED from the server or - if in use - the signature validator of the signed license checker.

Siehe: http://www.androidpit.com/en/android/forum/thread/416141/AppCenter-default-debug-response#p632450

— geändert am 22.07.2011 11:36:04

22.07.2011 23:27:11

Das heißt also auch, dass ich eine App, die ich mit der AndroidPIT-Lizensierung versehe, nicht in den Android Market hochladen sollte, nicht wahr?
Ich muss also zwei verschiedene Versionen meiner App herstellen:

1. Eine, die nur die Android Market-Lizensierung enthält, diese lade ich in den Android Market hoch
2. Eine andere, die über die AndroidPIT-Lizensierung (und damit sogleich auch über die Android Market-Lizensierung) verfügt. Diese darf ich nur bei AndroidPIT hochladen. Wenn jemand diese bei AndroidPIT kauft, muss er ja auch das AppCenter auf seinen Smartphone haben.

Wenn man mal länger drüber nachdenkt, macht AndroidPIT es Raubkopierern leicht:
Eine bei AndroidPIT gekaufte App kann man ja auf beliebige andere Smartphones kopieren (natürlich wenn man an die apk kommt). Sofern nirgendwo das AppCenter läuft, wird nie dontAllow() aufgerufen. Und wenn man als App-Entwickler Fehler, die in applicationError() auflaufen, nicht behandelt, lässt sich die App illegal nutzen.

Für mich stellt sich in dem Zusammenhang die Frage, bei welchen Antwort-Codes, die in applicationError() auflaufen, man den Start der App verhindern sollte.

m.E. ist es bei Apps, die man im Android Market kauft, anders. Die apk's lassen sich nicht ohne weiteres auf anderen Smartphones nutzen.



Alexander Miehlke
http://www.almisoft.de

— geändert am 22.07.2011 23:30:14

23.07.2011 11:23:49

Hallo!

Es geht auch mit beiden Lizensierungen in einer App.
AndroidPit hat es doch deswegen so eingebaut.

Hast du im Emulator ein Googlekonto eingerichtet? Im orginal Emulatorimage
geht dieses ja nicht, dann kann auch die Lizensierung nicht geprüft werden.

Gruß Denny

23.07.2011 11:27:47

Warum zwei Versionen? :)

Ich hab eine Version meiner App, die ich in beiden Markets hochlade.
Liefert die Lizenzprüfung dontAllow() oder den AndroidPIT App Center Fehler, gebe ich einfach eine zum Fehler passende Meldung aus, setze ich in der App eine boolean Variable und sie läuft im FREE Modus. Der ist ja eh kostenlos im Market erhältlich.

Es gibt ja nur die folgenden Konstellationen:
Wird sie über den Google Market gekauft, liefert die erste Prüfung allow() -> alles klar
Wird sie über den PIT Market gekauft, liefert die zweite Prüfung allow() -> alles klar
Wird sie über den PIT Market gekauft, aber App Center fehlt -> ich gebe eine entsprechende Meldung aus und starte im FREE Modus, dann weiss der User was zu tun ist, um die App wieder voll funktionsfähig zu machen.
Die Prüfung schlägt warum auch immer fehl -> FREE Modus (das ist aber bisher noch nie passiert, keine einzige User-Beschwede)

Die LVL cached ja auch die Prüfungen sehr intelligent. D.h. wenn die Prüfung einmal erfolgreich war und kurz darauf eine neue Prüfung erfolgt, die wegen fehlender Netzverbindung nicht durchgeführt werden kann, wird eine gewisse Zeit lang die positive Antwort aus dem Cache genommen.
Erst wenn man lange Zeit nicht online war, wird die LVL einen Fehler melden, weil es die Prüfung erneuern muss.