Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Gerät (IOS/Android) zwecks Lizenz identifizieren (https://www.delphipraxis.net/189444-geraet-ios-android-zwecks-lizenz-identifizieren.html)

QuickAndDirty 13. Jun 2016 17:30

Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Gibt es eine Möglichkeit IOS und Android Geräte an einem Merkmal zu identifizieren, dass von Delphi aus zugänglich ist?

Für Android wäre es in Java meist die WifiMac-Adresse. Gibt es Wrapper dafür in Delphi XE8?
Für IOS,soweit meine Recherchen, ist alles Eindeutige verboten, außer eine speziellen VendorID die leider auch nicht reproduzierbar ist... somit ausfällt.


Gibts irgend eine elegante Lösung?
Kann man etwas, z.b. eine zufällige GUID, auf einem Gerät permanent hinerlassen was in der Regel nicht wo anders hinkopiert werden kann?


Edit:
da gibts vielleicht was
http://community.embarcadero.com/ans...ce-information

RWarnecke 13. Jun 2016 17:45

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Lies doch das Betriebssystem aus. Das ist doch ein eindeutiger Unterschied. Oder was willst Du damit erreichen ?

mkinzler 13. Jun 2016 17:57

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Ich vermute mal, es geht um einen Art Kopierschutz. Da wirst Du die offiziell verfügbaren Mittel verwenden müssen (AppleID), welche allerdings keine Einschränkung auf ein einziges Gerät ermöglichen.

QuickAndDirty 13. Jun 2016 18:15

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Nun ich habe eine Lizenznummer welche mehr als ein Device lizensiert.
Ich möchte das auf dem Lizenzserver zählen können.
Alles wäre soviel einfacher wenn eine Lizenznummer genau ein Gerät lizensieren würden....
Denn eindeutige lizenznummern auszugeben ist ja machbar.

in dem oben geposteten Link habe folgende Code-schnipsel gefunden.

Sind die eurer meinung nach brauchbar?

Bei der "Android_ID" weiß ich bereits das diverse NoName/NoGoogle Tablets unterumständen alle die selbe oder keine haben können.
Also muss man bei Android mindestens ne generierte GUID und die Android_ID führen...so das im Zweifel ein unterscheidungsmerkmal da ist.

IOS hat mit der UUID eine ausreichend sichere Identifizierungsmöglichkeit.


Android
Delphi-Quellcode:
uses
 
  Androidapi.Helpers, Androidapi.JNI.Provider,
 
function GetDeviceId: string;
 
begin
 
  Result := JStringToString(TJSettings_SECURE.JavaClass.getString(SharedActivity.getContentResolver, TJSettings_SECURE.JavaClass.ANDROID_ID));
 
end;
IOS
Delphi-Quellcode:
   
uses
 
  Macapi.Helpers, iOSapi.UIKit,
 
 
 
function GetDeviceId: string;
 
var
 
  Device : UIDevice;
 
begin
 
  Device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
 
  Result := NSStrToStr(Device.identifierForVendor.UUIDString);
 
end;

mm1256 13. Jun 2016 20:54

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Wenn du beim ersten Programmstart auf jedem Device "einmalig" eine GUID erzeugst und "an einem sicheren Ort auf dem Device" abspeicherst, dann hast du doch eine eindeutige Identifikation, die auch nicht verloren gehen dürfte, wenn der User die App wieder deinstalliert und neu installiert. So mache ich es jedenfalls mit Windows. Ob das 1:1 auf Android/IOS auch so funktioniert, weiß ich mangels Erfahrung leider nicht. Denke aber, es müsste machbar sein.

QuickAndDirty 13. Jun 2016 22:17

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Dessen bin ich mir bewusst.
Leider weiß ich nicht wie ich diesen Sicheren Ort finde in Android und IOS. Die meisten Apps laufen in einer Sandbox und können in den neusten Versionen von z.b. Android. garnicht mehr in Verzeichnisse zugreifen die außerhalb der Sandbox liegen.

In IOS gibt es wohl sowas wie KeyChain-Services. Ich habe mich darüber noch nicht genau informiert aber es könnte ein globaler Schlüsselbund sein um Passörter sicher zu speichern...da könnte man dann evtl. etwas hinterlegen...
https://developer.apple.com/library/...0897-CH204-TP9

QuickAndDirty 14. Jun 2016 08:25

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Kann ich ein Zertifiakt im AndroidKeystore hinterlegen und den verifizierungsschlüssel im moment des erzeugens an den Lizenzserver senden?
Oder ist das etwas anderes?
https://developer.android.com/traini.../keystore.html

bra 14. Jun 2016 08:25

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von mm1256 (Beitrag 1340060)
Wenn du beim ersten Programmstart auf jedem Device "einmalig" eine GUID erzeugst und "an einem sicheren Ort auf dem Device" abspeicherst, dann hast du doch eine eindeutige Identifikation, die auch nicht verloren gehen dürfte, wenn der User die App wieder deinstalliert und neu installiert. So mache ich es jedenfalls mit Windows. Ob das 1:1 auf Android/IOS auch so funktioniert, weiß ich mangels Erfahrung leider nicht. Denke aber, es müsste machbar sein.

Keine Chance unter iOS und Android ab Version 5. Jede App darf dort nur auf ihren eigenen Userspace zugreifen, was auch gut so ist.

QuickAndDirty 14. Jun 2016 08:57

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Bei Apple gibt es ja eine sichere Erkennungsmethode.
Ich bräuchte nen "ORT" in Android oder einen Dienst wo ich eine ID/Zertifikat/Whatever speichern kann um das Gerät zu markieren. Wichtig ist das der Ort nicht für einen mittelmäßig versierten Leser von XDA-developers der APP zugeordnet werden kann. Die Markierung darf niemals auf einem anderen Gerät landen.

bra 14. Jun 2016 09:04

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Helfen da eventuell die SharedPreferences weiter? Ich meine, die bleiben auch nach Deinstallation der App bestehen (bin mir aber nicht sicher):
https://developer.android.com/refere...eferences.html

Ansonsten wäre vielleicht noch eine Möglichkeit die IMEI, sofern man an die rankommt?

Der schöne Günther 14. Jun 2016 10:34

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Bei Embarcadero gab es am 16. März ein Webinar "User accounts and identities on mobile devices" (Quelle)

In der YouTube-Playlist taucht gerade das (es war das letzte) nicht mehr auf:
https://www.youtube.com/playlist?lis...gaFPLtDA-t1Xwc

Triggere doch mal einen Embarcadero-Mann an und frage ob das vergessen wurde..

QuickAndDirty 14. Jun 2016 12:23

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von bra (Beitrag 1340106)
Helfen da eventuell die SharedPreferences weiter? Ich meine, die bleiben auch nach Deinstallation der App bestehen (bin mir aber nicht sicher):
https://developer.android.com/refere...eferences.html

Gibt es dafür einen Wrapper in Delphi?

Zitat:

Zitat von bra (Beitrag 1340106)
Ansonsten wäre vielleicht noch eine Möglichkeit die IMEI, sofern man an die rankommt?

Tabletts haben keine IMEI

QuickAndDirty 14. Jun 2016 12:26

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1340119)
Triggere doch mal einen Embarcadero-Mann an und frage ob das vergessen wurde..

Ich mache es... wie hieß der nochmal? Wir haben einen hier im Forum. Ich weiß nur nicht ob er noch dort arbeitet.

Der schöne Günther 14. Jun 2016 12:28

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
http://www.delphipraxis.net/members/10585-meissing.html

QuickAndDirty 14. Jun 2016 12:33

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1340130)

Jap habe ihn.
https://www.youtube.com/watch?v=hDa-3xcQ2SM

Ich frage mal nach.
Edit: PM ist raus.

mjustin 15. Jun 2016 09:03

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Google hat das bisherige Google Cloud Messaging durch ein neues ersetzt und in diesem Zusammenhang eine neue API bereitgestellt, die für die Geräte-Identifizierung verwendet werden kann


Zitat:

Instance ID, Identity, and Authorization

Instance ID (IID) allows you to retrieve a unique identifier for every app instance, providing a mechanism to authenticate and authorize actions, even if your app does not have user registration and accounts. For example, this allows you to uniquely determine which app instance is sending a request from by including the Instance ID token. We’ve also made it easy to handle edge cases to ensure that you’ll have valid Instance ID tokens.
https://developers.google.com/instance-id/#key_features

http://stackoverflow.com/a/35929333/80901

Könnte das hier hilfreich sein?

Da ich Android Apps nur mit Java erstelle, kenne ich kein Delphi-Binding für diese API.

RWarnecke 15. Jun 2016 12:10

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Also, bei iOS weiß ich es nicht genau, ob Du Dein Vorhaben überhaupt im AppStore durchbekommst, da zum einen ja Apple von der Lizenz her sagt, dass man seine Apps auf jedes Gerät aufspielen kann, was man besitzt und mit der gleichen Apple-ID eingerichtet hat. Wenn es eine hausinterne App ist, würde ich bei iOS die UUID der Geräte nehmen, wie Du oben schon geschrieben hast. Bei Android würde ich entweder die Seriennummer, die WLAN MAC Adresse oder die Telefonnummer der SIM-Karte auslesen. Entweder verwendest Du nur eine der drei genannten Sachen oder alle drei in Kombination. Denn alle drei sind für sich einzigartig.

QuickAndDirty 15. Jun 2016 14:37

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von RWarnecke (Beitrag 1340234)
Also, bei iOS weiß ich es nicht genau, ob Du Dein Vorhaben überhaupt im AppStore durchbekommst, da zum einen ja Apple von der Lizenz her sagt, dass man seine Apps auf jedes Gerät aufspielen kann, was man besitzt und mit der gleichen Apple-ID eingerichtet hat. Wenn es eine hausinterne App ist, würde ich bei iOS die UUID der Geräte nehmen, wie Du oben schon geschrieben hast. Bei Android würde ich entweder die Seriennummer, die WLAN MAC Adresse oder die Telefonnummer der SIM-Karte auslesen. Entweder verwendest Du nur eine der drei genannten Sachen oder alle drei in Kombination. Denn alle drei sind für sich einzigartig.

Ja ich weiß. Aber wie komme ich an die WLAN MAC Adresse des Android device in Delphi?

Und ich würde dieses Webinar von Emba doch wirklich gerne mal sehen. Will wissen was für Gedanken die sich dazu gemacht haben.

QuickAndDirty 15. Jun 2016 14:41

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von mjustin (Beitrag 1340224)
Könnte das hier hilfreich sein?

Hört sich sehr gut an.

Zitat:

Zitat von mjustin (Beitrag 1340224)
Da ich Android Apps nur mit Java erstelle, kenne ich kein Delphi-Binding für diese API.

Ich glaube ohne Wrapper von Embarcadero geht das nicht. Oder kann ich jeglichen javacode inlinen?
Hab halt keine Erfahrung damit.

mkinzler 15. Jun 2016 15:17

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Kommt auf die Delphiversion an. Zwischenzeitlich kann man direkt in der IDE weitere Jars einbinden und Wrapper hierfür erzeugen lassen.

QuickAndDirty 15. Jun 2016 15:21

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
OK hier ein code schnipsel für die WLAN Mac adresse für alle die es brauchen.
Delphi-Quellcode:
unit uDeviceID;

interface

Uses
  FMX.platform,
  {$IFDEF ANDROID}
    fmx.helpers.android, androidapi.JNI.GraphicsContentViewText, androidapi.jni.JavaTypes,
    androidapi.helpers,androidapi.jni.App, androidapi.jni.Net, androidapi.JNIBridge,
  {$ENDIF}
  classes, Types, FMX.types, system.Messaging;

type
  TDeviceIdentifier = class(TComponent)
  private
  {$IFDEF ANDROID}
    WifiManagerObj: JObject;
    WifiManager: JWifiManager;
    WifiInfo: JWifiInfo;
  {$ENDIF}
    FWifiMacAdresse:String;
  public
    Constructor Create(aOwner:TComponent);
  end;

implementation

{ TDeviceIdentifier }

constructor TDeviceIdentifier.Create(aOwner: TComponent);
begin
  inherited;
  {$IFDEF ANDROID}
  WifiManagerObj := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  WifiManager := TJWifiManager.Wrap((WifiManagerObj as ILocalObject).GetObjectID);
  WifiInfo := WifiManager.getConnectionInfo();
  FWifiMacAdresse := JStringToString(WifiInfo.getMacAddress);
  {$ENDIF}
end;



end.

RWarnecke 15. Jun 2016 16:04

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Vielleicht hilft Dir das ja weiter. Ist zwar zu XE6 Zeit entstanden der Artikel, aber vielleicht klappt er ja jetzt auch noch unter 10.1

QuickAndDirty 15. Jun 2016 16:16

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von RWarnecke (Beitrag 1340250)
Vielleicht hilft Dir das ja weiter. Ist zwar zu XE6 Zeit entstanden der Artikel, aber vielleicht klappt er ja jetzt auch noch unter 10.1

Da hab ich es her.

Delphi-Quellcode:
unit uDeviceID;

interface

Uses
  FMX.platform,
  {$IFDEF ANDROID}
    fmx.helpers.android, androidapi.JNI.GraphicsContentViewText, androidapi.jni.JavaTypes,
    androidapi.helpers,androidapi.jni.App, androidapi.jni.Net, androidapi.JNIBridge,
    androidapi.JNI.Provider,
  {$ENDIF}
  {$IFDEF IOS}
    Macapi.Helpers, iOSapi.UIKit,
  {$ENDIF}
  classes, Types, FMX.types, system.Messaging, FMX.Dialogs, FMX.Forms;

type
  TDeviceIdentifier = class(TComponent)
  private
  {$IFDEF ANDROID}
    WifiManagerObj: JObject;
    WifiManager: JWifiManager;
    WifiInfo: JWifiInfo;
  {$ENDIF}
  {$IFDEF IOS}
    fUIDevice : UIDevice;
  {$ENDIF}
    FWifiMacAdresse:String;
    fDeviceID:String;
    function GetID: String;
  public
    Constructor Create(aOwner:TComponent);
    property ID:String read GetID;
  end;

implementation

{ TDeviceIdentifier }

constructor TDeviceIdentifier.Create(aOwner: TComponent);
begin
  inherited;
  {$IFDEF ANDROID}
  WifiManagerObj := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  WifiManager := TJWifiManager.Wrap((WifiManagerObj as ILocalObject).GetObjectID);
  WifiInfo := WifiManager.getConnectionInfo();

  FWifiMacAdresse := JStringToString(WifiInfo.getMacAddress);

  fDeviceID := JStringToString(TJSettings_SECURE.JavaClass.getString(SharedActivity.getContentResolver, TJSettings_SECURE.JavaClass.ANDROID_ID));
  {$ENDIF}
  {$IFDEF IOS}
  fUIDevice := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
  fDeviceID := NSStrToStr(fUIDevice.identifierForVendor.UUIDString);
  {$ENDIF}
end;

function TDeviceIdentifier.GetID: String;
begin
  Result := fDeviceID+FWifiMacAdresse;
  if result = '' then
  Begin
    Showmessage('Dieses Gerät wird nicht von der App unterstützt!');
    Application.terminate;
  End;
end;

end.
Also in etwa so sollte es aussehen. Ist aber ungetestet.



Schöner wäre wenn jemand sowas unter Verwendung einer generierten ID im IOS Keychain Service und im Android Keystore Service präsentieren könnte.


Vielleicht ist es besser statt der IDs und MAC-Adresse lieber nen Hashcode zu nehmen? Da ich den ja auch durchs internet schicke...

mjustin 15. Jun 2016 16:59

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1340252)
Zitat:

Zitat von RWarnecke (Beitrag 1340250)
Vielleicht hilft Dir das ja weiter. Ist zwar zu XE6 Zeit entstanden der Artikel, aber vielleicht klappt er ja jetzt auch noch unter 10.1

Da hab ich es her.

Die Android ID identifiziert seit einigen Jahren nicht mehr das Gerät, sondern das aktive Benutzerprofil.

Das ist hier dokumentiert: https://developer.android.com/refere...tml#ANDROID_ID

Zitat:

When a device has multiple users (available on certain devices running Android 4.2 or higher), each user appears as a completely separate device, so the ANDROID_ID value is unique to each user.

BUG 15. Jun 2016 19:00

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1340252)
Vielleicht ist es besser statt der IDs und MAC-Adresse lieber nen Hashcode zu nehmen? Da ich den ja auch durchs internet schicke...

Streng genommen solltest du noch nicht mal eindeutige Hashes unverschlüsselt durch das Netzwerk schicken, da das die Verfolgung des Benutzers ermöglicht ;)
Also ja, Hashen ist schon besser. Das hat auch den Vorteil, dass du auf Serverseite keine Gedanken darüber machen musst, wie deine ID aufgebaut ist (z.B. Länge).

QuickAndDirty 15. Jun 2016 21:11

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von mjustin (Beitrag 1340254)
Zitat:

Zitat von QuickAndDirty (Beitrag 1340252)
Zitat:

Zitat von RWarnecke (Beitrag 1340250)
Vielleicht hilft Dir das ja weiter. Ist zwar zu XE6 Zeit entstanden der Artikel, aber vielleicht klappt er ja jetzt auch noch unter 10.1

Da hab ich es her.

Die Android ID identifiziert seit einigen Jahren nicht mehr das Gerät, sondern das aktive Benutzerprofil.

Das ist hier dokumentiert: https://developer.android.com/refere...tml#ANDROID_ID

Zitat:

When a device has multiple users (available on certain devices running Android 4.2 or higher), each user appears as a completely separate device, so the ANDROID_ID value is unique to each user.

Das ist schlecht!
Ich muss eine "pro Gerät" Identifizierung haben.

Hat jeder Benutzer auf dem Gerät eigene installationen oder Benutzen alle Benutzer gemeinsam die installierten Apps?
Sprich ist der APP spezifische bereich um Einstellungen zu speichern pro APP oder pro user?
Tendiere immer mehr dazu eine UUID zuspeichern...
https://developer.android.com/refere...util/UUID.html

QuickAndDirty 15. Jun 2016 21:16

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von BUG (Beitrag 1340256)
Zitat:

Zitat von QuickAndDirty (Beitrag 1340252)
Vielleicht ist es besser statt der IDs und MAC-Adresse lieber nen Hashcode zu nehmen? Da ich den ja auch durchs internet schicke...

Streng genommen solltest du noch nicht mal eindeutige Hashes unverschlüsselt durch das Netzwerk schicken, da das die Verfolgung des Benutzers ermöglicht ;)
Also ja, Hashen ist schon besser. Das hat auch den Vorteil, dass du auf Serverseite keine Gedanken darüber machen musst, wie deine ID aufgebaut ist (z.B. Länge).

Also gänzlich im klar text wird sie nicht verschickt. TLS ist es dann leider auch nicht...

QuickAndDirty 15. Jun 2016 21:20

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von mkinzler (Beitrag 1340244)
Kommt auf die Delphiversion an. Zwischenzeitlich kann man direkt in der IDE weitere Jars einbinden und Wrapper hierfür erzeugen lassen.

Delphi XE 8
Aber ich wechsle irgendwann dieses Jahr auf die neuste version.

BUG 15. Jun 2016 21:49

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1340265)
Das ist schlecht!
Ich muss eine "pro Gerät" Identifizierung haben.

Dann wirst du wohl eine Kombination aus verschieden Hardware-IDs nehmen müssen.

Das hier scheint auch ganz interessant zu sein: Best Practices for Unique Identifiers. Für schlecht fälschbare Geräte-IDs werden IMEI/IMSI empfohlen.
Wenn du die Anforderung mit der Geräte-ID unbedingt erfüllen musst, sollte das schon gehen ... für die meisten Fälle sind andere IDs angemessener (Datenschutz).

Sir Rufo 15. Jun 2016 23:22

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Wo ist das Problem eine (völlig losgelöste) ID beim ersten Start der Anwendung zu erzeugen?

Dann wird eine Verbindung zum Lizenzserver aufgebaut und es wird eine Lizenz mit dieser Geräte-ID und den Account-Informationen abgerufen. Sind keine Lizenzen mehr verfügbar, dann kann der Kunde einfach Lizenzen freigeben (am dem Gerät selber oder ohne das Gerät - weil zerstört oder nicht mehr da).

Zur Überprüfung schaut die Anwendung ab und an beim Lizenzserver vorbei und prüft, ob die Geräte-ID noch mit einer Lizenz verknüpft ist. Diese Info (Geräte-ID xy ist jetzt ungültig) könnte man auch per Push-Notification übertragen und sobald das Gerät eine Verbindung hat wird die Lizenz von dort entfernt.

greenmile 16. Jun 2016 07:49

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Genauso habe ich es auch gemacht. Eine ID beim ersten Start (= wenn noch keine vorhanden), die wird in den Global-Store gespeichert damit sie ggf. ein Update o.ä. überlebt. Die wird übermittelt. Wenn der User das Gerät komplett neu installiert, dann wird halt eine neue ID erzeugt, geht bis zu x mal. Und so oft installiert man sein Handy/Mac ja nun nicht neu. Kannst Du ggf. auch verschlüsseln, dann kann man die nicht ändern wenn man mit Tools nach der Datei sucht.

Funktioniert 1a.

BUG 16. Jun 2016 08:36

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Das ist die sinnvolle Lösung.
Hilft dem TE aber wenig, wenn irgendein Vertragswerk (oder Chef) eine Lizenz pro physischem Gerät vorschreiben :stupid:

QuickAndDirty 16. Jun 2016 09:34

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Zitat:

Zitat von Sir Rufo (Beitrag 1340277)
Wo ist das Problem eine (völlig losgelöste) ID beim ersten Start der Anwendung zu erzeugen?

Dann wird eine Verbindung zum Lizenzserver aufgebaut und es wird eine Lizenz mit dieser Geräte-ID und den Account-Informationen abgerufen. Sind keine Lizenzen mehr verfügbar, dann kann der Kunde einfach Lizenzen freigeben (am dem Gerät selber oder ohne das Gerät - weil zerstört oder nicht mehr da).

Zur Überprüfung schaut die Anwendung ab und an beim Lizenzserver vorbei und prüft, ob die Geräte-ID noch mit einer Lizenz verknüpft ist. Diese Info (Geräte-ID xy ist jetzt ungültig) könnte man auch per Push-Notification übertragen und sobald das Gerät eine Verbindung hat wird die Lizenz von dort entfernt.

Doch das ist absolut in Ordnung, selbige ID darf nur einfach nicht von einem gerooteten Gerät auf ein anderes Kopiert werden können. Wir haben das schon mehrfach erlebt das Kunden durch Kopieren ganzer Anwendungsordner so eine "Installations-ID" versehentlich mit kopiert haben.

Zitat:

Zitat von greenmile (Beitrag 1340285)
Genauso habe ich es auch gemacht. Eine ID beim ersten Start (= wenn noch keine vorhanden), die wird in den Global-Store gespeichert damit sie ggf. ein Update o.ä. überlebt. Die wird übermittelt. Wenn der User das Gerät komplett neu installiert, dann wird halt eine neue ID erzeugt, geht bis zu x mal. Und so oft installiert man sein Handy/Mac ja nun nicht neu. Kannst Du ggf. auch verschlüsseln, dann kann man die nicht ändern wenn man mit Tools nach der Datei sucht.

Funktioniert 1a.

Das will ich haben. Wo ist der Globale Store? Bei aktuellen Android Versionen kann ich doch nichts außerhalb der Sandbox hinterlassen oder?


Zitat:

Zitat von BUG (Beitrag 1340288)
Das ist die sinnvolle Lösung.
Hilft dem TE aber wenig, wenn irgendein Vertragswerk (oder Chef) eine Lizenz pro physischem Gerät vorschreiben :stupid:

Eine Installations-Identifizierung wäre auch ok, wenn alle Android-Useraccounts auf dem Gerät Zugriff auf diese global im Gerät gespeicherte ID haben.

greenmile 16. Jun 2016 09:45

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Code:
Function ConfigFile: String;
begin
  // GetDocumentsPath      = In Package
  // GetSharedDocumentsPath = Global
  Result := TPath.GetSharedDocumentsPath+TPath.DirectorySeparatorChar+'myconfig.cfg';
end;

ConfigIni := TMemIniFile.Create(ConfigFile);
...

Sir Rufo 16. Jun 2016 09:46

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Da sollte deine Frage beantwortet werden

http://stackoverflow.com/questions/1...ss-from-delphi

@greenmile

Da kommt der Benutzer zu einfach dran - die Informationen benötigen aber einen gewissen Schutz ;)

QuickAndDirty 16. Jun 2016 13:42

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Yay...
Das sieht auf einmal alles sehr gut aus.

mjustin 16. Jun 2016 17:07

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Anders als es der Name vermuten läßt, sind auch SharedPreferences nicht global. Sie sind immer an das aktuelle Benutzerprofil gebunden. Alle Benutzer können ihre eigenen Einstellungen speichern.

Für eine globale GeräteID sind sie daher so wie die ANDROID_ID nicht optimal.

BUG 16. Jun 2016 21:05

AW: Gerät (IOS/Android) zwecks Lizenz identifizieren
 
Der Gedanke ist halt, das sich Benutzer wie unterschiedliche Geräte verhalten. Das ist ja auch sehr sinnvoll: Wenn man es den Entwicklern zu einfach macht, an Hardware-IDs zu kommen, dann nutzen die das halt auch (fälschlicherweise) ... weil es ja so schön einfach ist und man nicht groß drüber nachdenken muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz