Delphi-PRAXiS
Seite 3 von 4     123 4      

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 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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.
Seite 3 von 4     123 4      

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