Die Licensing Library erlaubt Ihnen das Android Market Licensing Service zu benutzen um zu prüfen ob der Benutzer die Erlaubniss hat auf Ihre Anwendung zuzugreifen.
Ihre Anwendung sendet eine Abfrage an die lokale Market-Anwendung. Die Market-Anwendung kontaktiert den Market-Server und gibt das Resultat zurück. Das Ergebnis wird, basierend auf den Regeln des Marktes, zwischengespeichert.
Es ist empfohlen die Google Dokumentation über die Licensing Methoden zu lesen:
Application Licensing | Android Developers
Die Licensing Library ist einfach zu konfigurieren. Sie müssen zuerst ein Publisher Account im Markt bekommen.
Ein Klicken auf den 'Edit Profile Link' zeigt eine Seite an, die Ihren Publisher Public Key anzeigt. Diese Seite enthält auch die "test console".
Diese 'test console' erlaubt Ihnen das Resultat zu definieren das vom Server, im Testmodus, zurück gegen weden soll. Der Testmodus erstellt sich, auf Geräten die mit Ihren Publisher Account laufen, automatisch ein.
Die Licensing Library verhindert nicht daß klevere Hacker ihre Anwendung 'hacken', macht es aber schwerer.
Der erste Schritt ist das LicenseChecker Objekt zu initialisieren:
Das Resultat von dem 'licensing Check' wird lokal zwischengespeichert. Der Zwischenspeicher (cache) ist mit dem AES Algorithmus verschlüsselt. Um Benutzer vor Manipulationen mit dem Cache und dem Kopieren des Cache auf verschiedenen Geräten zu vermeiden, wird die Geräte-ID zusammen mit dem Paket-Namen als Paßwort verwendet.
Beachten Sie daß der gleiche Benutzer die Möglichkeit hat Ihre Anwendung auf andere Geräte herunterzuladen, die mit dem gleichen User Account laufen,.
PhoneId (von der Phone Library) benötigt die READ_STATE Erlaubniss (permission). Der Schutz funktioniert auch wenn Sie einen beliebigen String übergeben. Er wird aber schwächer.
Der 'Salt' Parameter sollte ein Array von Bytes sein, mit Zufallswerten (die Werte sollten aber bei jedem Lauf gleich sein).
Der nächste Schritt ist [FONT="]lc.CheckAccess[/FONT] aufzurufen. Dies ruft wiederum die Markt Anwendung oder den lokalen Cache und überprüft, ob der Benutzer berechtigt ist, auf das Programm zuzugreifen.
Eines der folgenden Ereignisse (events) wird ausgelöst, wenn das Ergebnis eintrifft: [FONT="]Allow[/FONT], [FONT="]DontAllow[/FONT] oder [FONT="]Error(ErrorCode As String)[/FONT].
Es liegt an Ihnen, die Eventsubroutinen nach Bedarf zu behandeln.
LicenseChecker.SetVariableAndValue
Eine einfache Möglichkeit eine Anwendung zu 'hacken' besteht darin den Prüfungscode (checking code) zu überspringen. Ein Hacker könnte, zum Beispiel, [FONT="]CheckAccess[/FONT] wegnehmen und anstatt Ihre [FONT="]Allow[/FONT] Eventroutine aufrufen. Um Dieses etwas schwerer zu machen können Sie [FONT="]LicenseChecker.SetVariableAndValue[/FONT] aufrufen.
Zum Beispiel:
Der obige Code wird den Wert von einer Prozess globalen String-Variable in der Main.Activity, mit dem Namen [FONT="]test1[/FONT], auf "some secret value " setzen, wenn die Prüfung erfolgreich war. Sie sollten den Wert von [FONT="]test1[/FONT] nicht in der [FONT="]Allow[/FONT] Eventroutine benutzten weder testen, denn das wäre zu offensichtlich. Stattdessen sollten Sie es später in Ihrem Programm verwenden.
Sie können kreativ sein und übergeben Sie den Namen der Variablen oder den Wert mit BytesToString oder auf andere Weise.
Ein kompletteres Beispiel:
Die Library befindet sich hier: http://www.b4x.com/forum/addit...g-library.html
Das Englische Originaltutorial.
Ihre Anwendung sendet eine Abfrage an die lokale Market-Anwendung. Die Market-Anwendung kontaktiert den Market-Server und gibt das Resultat zurück. Das Ergebnis wird, basierend auf den Regeln des Marktes, zwischengespeichert.
Es ist empfohlen die Google Dokumentation über die Licensing Methoden zu lesen:
Application Licensing | Android Developers
Die Licensing Library ist einfach zu konfigurieren. Sie müssen zuerst ein Publisher Account im Markt bekommen.
Ein Klicken auf den 'Edit Profile Link' zeigt eine Seite an, die Ihren Publisher Public Key anzeigt. Diese Seite enthält auch die "test console".
Diese 'test console' erlaubt Ihnen das Resultat zu definieren das vom Server, im Testmodus, zurück gegen weden soll. Der Testmodus erstellt sich, auf Geräten die mit Ihren Publisher Account laufen, automatisch ein.
Die Licensing Library verhindert nicht daß klevere Hacker ihre Anwendung 'hacken', macht es aber schwerer.
Der erste Schritt ist das LicenseChecker Objekt zu initialisieren:
B4X:
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
Dim lc As LicenseChecker
Dim p As PhoneId
lc.Initialize("lc", p.GetDeviceId, publicKey, "kljdflkf".GetBytes("UTF8"))
lc.SetVariableAndValue("test1", "some secret value")
lc.CheckAccess
End If
End Sub
Beachten Sie daß der gleiche Benutzer die Möglichkeit hat Ihre Anwendung auf andere Geräte herunterzuladen, die mit dem gleichen User Account laufen,.
PhoneId (von der Phone Library) benötigt die READ_STATE Erlaubniss (permission). Der Schutz funktioniert auch wenn Sie einen beliebigen String übergeben. Er wird aber schwächer.
Der 'Salt' Parameter sollte ein Array von Bytes sein, mit Zufallswerten (die Werte sollten aber bei jedem Lauf gleich sein).
Der nächste Schritt ist [FONT="]lc.CheckAccess[/FONT] aufzurufen. Dies ruft wiederum die Markt Anwendung oder den lokalen Cache und überprüft, ob der Benutzer berechtigt ist, auf das Programm zuzugreifen.
Eines der folgenden Ereignisse (events) wird ausgelöst, wenn das Ergebnis eintrifft: [FONT="]Allow[/FONT], [FONT="]DontAllow[/FONT] oder [FONT="]Error(ErrorCode As String)[/FONT].
Es liegt an Ihnen, die Eventsubroutinen nach Bedarf zu behandeln.
LicenseChecker.SetVariableAndValue
Eine einfache Möglichkeit eine Anwendung zu 'hacken' besteht darin den Prüfungscode (checking code) zu überspringen. Ein Hacker könnte, zum Beispiel, [FONT="]CheckAccess[/FONT] wegnehmen und anstatt Ihre [FONT="]Allow[/FONT] Eventroutine aufrufen. Um Dieses etwas schwerer zu machen können Sie [FONT="]LicenseChecker.SetVariableAndValue[/FONT] aufrufen.
Zum Beispiel:
B4X:
lc.SetVariableAndValue("test1", "some secret value")
Sie können kreativ sein und übergeben Sie den Namen der Variablen oder den Wert mit BytesToString oder auf andere Weise.
Ein kompletteres Beispiel:
B4X:
Sub Process_Globals
Dim publicKey As String
publicKey = "MIIBIjANBgkqhAADSFEFEFkiG9w0BfW/cGhTbtIs6QIDAQAB..."
Dim test1 As String
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
Dim lc As LicenseChecker
Dim p As PhoneId
lc.Initialize("lc", p.GetDeviceId, publicKey, "kljdflkf".GetBytes("UTF8"))
lc.SetVariableAndValue("test1", "some secret value")
lc.CheckAccess
End If
End Sub
Sub lc_Allow
Log("Allow")
End Sub
Sub lc_DontAllow
Log("DontAllow")
ToastMessageShow("Closing application.", True)
Activity.Finish
End Sub
Sub lc_Error (ErrorCode As String)
Log("error: " & ErrorCode)
ToastMessageShow("Closing application.", True)
Activity.Finish
End Sub
Sub Activity_Pause(UserClosed As Boolean)
End Sub
Sub Activity_Resume
End Sub
Das Englische Originaltutorial.