txt. Datei auf Server hochladen, per Smartphone App anzeigen, Eclipse, Android Studio

  • Antworten:10
KevAndroid
  • Forum-Beiträge: 4

30.12.2019, 16:25:28 via Website

Hallo liebe Community,

ich habe mich soeben hier bei euch angemeldet, da ich mir seit einigen Tagen die Zähne an meinem Vorhaben ausbeisse und mich riesig über Hilfe von euch freuen würde. :):$

Ich würde mich vorsichtig als "Java" - Einsteiger mit erweiterten Kenntnissen beschreiben, soll heißen, ich habe schon kleinere Programme mit Eclipse (ohne GUI) geschrieben, mir mithilfe von Onlinekursen die Bedienung von Android Studio und das Programmieren von kleinen Android Apps angeeignet, komme aber momentan einfach nicht weiter, bzw. finde keine gute Lösung für mein Problem.
Ich erwarte keinen fertigen Code und suche niemanden, der meine Arbeit übernimmt, so unverschämt bin ich nicht, bin lediglich über Ratschläge und Hilfestellungen froh.

Folgendes Vorhaben/ "Problem" soll gelöst werden:

Es besteht ein Windows Server, den ich aktuell miete und mit der Remote Desktopverbindung von Microsoft erreichen kann.
Dort liegt eine Textdatei, die ich in unregelmäßigen Abständen mit Inhalt fülle. Dieser Inhalt soll nun auf meiner Smartphone App, welche mehrere Nutzer auf ihrem Smartphone installiert haben, erscheinen. Es soll keine Anmeldung nötig sein. Wenn die App offen ist, und ich aktualisiere in diesem Moment die txt Datei, dann soll die App den alten Text ausblenden und den neuen sofort anzeigen, Echtzeitabfrage quasi...

Ich habe nun begonnen das Problem folgendermaßen anzugehen:
Mit Eclipse habe ich mir eine kleine Applikation geschrieben, welche eine Änderung der Textdatei erkennt und diese dann ausließt und in einem String speichert. Die entsprechende Smartphone App zum Anzeigen des Inhaltes bekomme ich auch programmiert.

1.Wie löse ich allerdings das Problem, mit der sicheren Datenübertragung?

Habe etwas mit Firebase herumexperimentiert, schaffe es aber nicht die Daten mit Eclipse dort in eine Database zu laden, funktioniert das überhaupt? Habe mindestens 10h getestet und getan, Maven genutzt ohne dass ich es kenne und und und...schrecklich wenn man ahnunglos ist. (nerd)

  1. Das Überwachen der Textdatei habe ich mit dem Erfassen des Änderungsdatums sowie einer dauerhaften while Schleife gelöst, geht das eleganter?

  2. FTP Server?! Wie verhindere ich unbefugten Zugriff, kann ich mit der eclipse Appl. dauerhaften auf einem Ftp Server schreiben? Macht das Sinn?

  3. Wie erfasse ich per Android App eine Datenaktualisierung auf dem Server ohne dass das Ganze zu resourcenlastig ist? Dauerhaft eine Schleife laufen zu lassen, ist eine unelegante Art der Programmierung, nehme ich an? Eventuell auch eine Lösung, mit der ich später Push Notifiactions aussenden kann, wenn ich die Datei ändere und die App bei den Nutzern geschlossen ist...

  4. Ist es auch möglich per App direkt auf die Datei, welche auf dem Remote liegt zuzugreifen? Oder ist dies zu unsicher bezüglich Fremdzugriff? Sobald die Apk ausgelesen wird, wären ja dann Zugriffsdaten bekannt?

Ich danke euch vielmals... und wünsche vorab einen guten Rutsch in 2020!

Viele Grüße Kevin

— geändert am 30.12.2019, 16:27:12

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

31.12.2019, 17:32:25 via Website

Hallo Kevin,

herzlich wilkommen bei uns im Forum :)



Wo fange ich am besten an...

Erstmal ist es wichtig, dass du genau Beschreinst, was du haben willst.
So grob habe ich das verstanden:
Eine Textdatei mit Inhalt die sich aktualisieren soll und auf einem Zentralen rechner liegt.
Sollen die Clients den Inhalt nur anzeigen oder auch aktualisieren können?
Was ist der Zweck? Vielleicht gibt es einen anderen Ansatz.

Ich versuche mal deine Fragen der Reihenfolge nach zu beantworten, wobei allerdings ein paar Dinge vom kompletten Konzept abhängig sind.

  1. Bei der Datenübertragung ist erstmal festzulegen, ob diese nur lokal in deinem Netzwerk oder auch unterwegs übers Internet funktionieren soll. In zweiten Fall brauchst du vermutlich irgend einen Server im Internet. Ob das jetzt eine eigene Domain/DynDns o.ä. ist oder Firebase ist erstmal egal.
    In sehr vielen Fällen nutzt man zur Übertragung der Daten WebServices mit REST Schnittstelle. d.h. du bräuchtest einen HTTP Server und Skripte/Code der die Anfragen entgegenniummt und entsprechende Aktionen tut.
    Damit kannst du über HTTPS schonmal eine Transportsicherheit erreichen, die in den meisten Fällen schon ausrecht (wenn du noch eine authentifizierung via APIKey oder so hast).
    Über Protokolle wie FTP etc. würde ich nicht gehen, da diese inzwischen zu unsicher sind.

  2. Ja das geht besser. Ich würde eine FileSystemWatcher auf die Datei ansetzen. Damit bekommst du Änderungen eventbasiert mit.

  3. Wie gesagt kein FTP.
    Ich würde einen zentralen HTTP Server aufsetzen, Änderungen via HTTP Post Hochpushen (falls der HTTP Server nicht auf dem selben Rechner läuft wie der Textfile).
    Und dann via FirebaseCloudMessaging eine Push Message an alle AndroidClients schicken zum akutalisieren.
    Dies hat aber zur Folge, dass du eine Verzögerung von einigen Sekunden hast und nicht Echtzeit. Wie sind hier deine Anforderungen?

  4. Dauerhaft pollen => nein auf keinen Fall!
    Entweder Push via FCM oder eigenen TCP Verbindung zum Server und darüber bekommst du die Daten. Das ist i.d.r aber aufwändig zu implementieren.

  5. Würde ich auch nicht machen und die Zugangsdaten dürfen in keinem Fall in der APK sein.
    Entweder die müssen beim ersten Start eingegeben werden oder sonst was. Solange die App privat bleibt und du den Leuten vertraust, geht das noch aber ich würde vermutlich einen "Keyfile" machen, diesen per Mail verschicken und beim ersten Start der App einlesen.

Ansonsten ist der Rest abhängig von deinem Anwendungsfall also belasse ich es mal hierbei.

Guten Rutsch
Pascal

PS: Für Java am PC würde ich eher IntelliJ nutzen statt Eclipse.
Ist genauso wie Android Studio.

— geändert am 31.12.2019, 20:33:39

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
KevAndroid
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

01.01.2020, 13:50:06 via Website

Hallo ich hoffe ihr seid gut ins neue Jahr gekommen.
Zu wenn du mit Firebase arbeiten möchtest. Solltest du zu Android Studio umsteigen und nicht mehr mit Eclipse arbeiten. Das ADT wird schon lange nicht mehr unterstütz glaube API 23 ging schon nicht mehr.

Firebase oder auch FCM ist in AndroidStudio richtig unterstützt. Eclipse fehlanzeige.

Eigentlich sollte so sein das jeder User einen Account macht mit Email und PW. Ob das nun Firebase oder ein anderer Server ist, sollte keine Rolle spielen. Anmelden muss er sich und auch das PW vergeben das brauchst du nicht. Ob der User nun Admin ist oder nicht , kannst du ja hinterher freischalten. Mit seiner ID User Name. Die Verwaltung ob Admin … sollte auf dem Server also Bz. mittels Firebase erfolgen.

Firabase ist eine Echtzeit DB.
Nur wirst du das mit Eclipse nicht hinbekommen gehe zu Android Studio.

Habe etwas mit Firebase herumexperimentiert, schaffe es aber nicht die Daten mit Eclipse dort in eine Database zu laden, funktioniert das überhaupt?

ja aber nicht mit Eclipse

— geändert am 01.01.2020, 13:53:22

Hilfreich?
Pascal P.KevAndroid
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.01.2020, 14:06:31 via Website

@Jockel: So wie ich das verstanden habe nutzt er schon AndroidStudio für seine Apps aber Eclipe für die Java Anwendung die auf seinem Windows läuft.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
KevAndroid
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

01.01.2020, 14:14:12 via Website

Ich habe es anders verstanden. Laut dem Satz den ich kopiert habe sieht es auch so aus.
Na dann warten wir mal.
@pascal gutes neues Jahr.

Mit Eclipse habe ich mir eine kleine Applikation geschrieben, welche eine Änderung der Textdatei erkennt und diese dann ausließt und in einem String speichert.

— geändert am 01.01.2020, 14:19:46

Hilfreich?
Pascal P.KevAndroid
Kommentieren
KevAndroid
  • Forum-Beiträge: 4

01.01.2020, 16:09:14 via Website

Hi ihr beiden!

Zurerst einmal ein frohes Neues Jahr und vielen vielen Dank für die schnellen Antworten!

Ich versuche mal mit Zitaten die Übersichtlichkeit beizubehalten.

Sollen die Clients den Inhalt nur anzeigen oder auch aktualisieren können?
Was ist der Zweck? Vielleicht gibt es einen anderen Ansatz.

Die Appnutzer sollen die Daten der Textdatei nur lesen können, bzw. ich möchte die Daten mit einer entsprechenden Android App etwas anschaulicher darstellen, aber das bekomme ich dann alles hin :)
Die App dient quasi nur als Anzeigeinstrument.
Der Zweck dahinter ist, dass ich auf diese Art und Weise eine Art Newsletter bzw. Nachrichtenfunktion bauen möchte, welche ich eventuell später auch automatisiert in regelmäßigen Abständen erstellen lassen kann. Remote Server um von überall updaten zu können, und Textdatei, da ich mit meinem Wissenstand per Java automatisch Textdateien schreiben lassen kann... möchte die Datei quasi als "Speicherort" für die Übertragung ins Netz an die Clienten nutzen...

  1. Bei der Datenübertragung ist ...

Auf den Inhalt der Textdatei soll von überall auf der Welt aus zugegriffen werden können auch "unbegrenzt" was die Clientenanzahl betrifft. Leider habe ich von http /https und dessen Möglichkeiten so gut wie keine Ahnung...werde ich mir aber aneignen sofern das die "saubere Lösung" ist. Mit Firebase bin ich allerdings noch nicht so zurecht gekommen bisher.

2+3 Ja das geht besser...

Die Lösung mit dem FileWatcher hatte ich tatsächlich vorher programmiert, hat ebenfalls funktioniert, wurde nur dann etwas komplizierter im Code als ich noch eine zweite Datei hinzugefügt habe (ich bastle gerne etwas herum und teste die Möglichkeiten, die mir zur Verfügung stehen).
Als zweites Gegenargument wollte ich eine ständige Abfrage der Datei verhindern, da nicht so häufig aktualisiert wird, in der while Schleife habe ich einen Threadsleep Befehl von einigen Sekunden programmiert. Sprich alle paar Sekunden wird das Änderungsdatum gecheckt und bei Unterschied die Datei eingelesen. Bin ganz stolz auf die Lösung (smug):D
Soll heißen: Es muss nicht in absoluter Echtzeit übertragen werden. ein paar Sekunden Verzögerung ist gar kein Problem.

FirebaseCloudMessaging klingt interessant!

Dauerhaft pollen => nein auf keinen Fall!
Entweder Push via FCM oder eigenen TCP Verbindung zum Server und darüber bekommst du die Daten. Das ist i.d.r aber aufwändig zu implementieren.

Und genau da hängt es bei mir, TCP keine Ahnung, kein Wissen und bekomme die Übertragungsmöglichkeiten nicht in meine Birne.. (whew)

@Jockel

Genau wie Pascal es beschreibt, nutze ich bereits Android Studio für das Bauen der App, vermutlich würde ich auch dort ein Auslesen der Firebase Daten hinbekommen, es hapert allerdings im Upload, da du schreibst, dass das mit Eclipse eigentlich gar nicht funktioniert, bin ich froh euch hier gefunden zu haben, sonst hätte ich vermutlich jetzt schon ein paar graue Haare mehr.

Eclipse nutze ich nur um die TExtdatei zu überwachen und den Inhalt in einem String o.Ä. zu speichern, den Inhalt quasi bereit zu machen um ihn auf den Server ins Netz zu schicken. Eclipse deswegen, da ich damals damit begonnen und gelernt habe Java Programme zu schreiben...

Fazit:
1.Firebase ist ein guter Ansatz, wie bekomme ich allerdings den Textinhalt auf die Realtime Database geladen?
2. Das Ganze soll von der App ohne Benutzeranmeldung von der Datenbank geladen werden können...also keine Useraccounts...geht das auch?
3. Wie funktioniert denn die Abfrage seitens der App von der Database? Das ist ja resourcenaufwendig ohne Ende, wenn dort ständig abgefragt werden muss? Das sind so Dinge, die mir Kopfzerbrechen bereiten.

Ich danke euch für die Mühe und entschuldige mich für den langen Text.

Gruß Kevin

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.01.2020, 18:39:08 via Website

Hallo Kevin,

vielleicht macht es alles etwas einfacher, wenn du das mit dem Textfile lässt und die Daten direkt in Firebase einträgst.
Ansonsten müsstest du mit der Java Firebase SDK eine Firebase DB auch in einen Desktopclient einbinden können.

Ich würde jedoch erstmal mit der DB an sich anfangen und für den Anfang Daten direkt über die Weboberfläche eintragen.
Mit den Firebase Android SDKs solltest du eine Anbindung an Firebase hinbekommen und auch ohne FCM änderungen per Events der REaltime Database erhalten.

Einen Login würde ich dann nur über Google Accounts machen und du verwaltest eine Liste, welche Accounts auf der DB lesen dürfen. Das bedarf keiner zustzlichen Nutzerverwaltung etc.

Alles andere würde vorraussetzen, dass du WebApis bzw. WebEntwicklung kennst und du dir deine eigene API + DB (also Backend) dafür baust. Das wäre für das Projekt vermutlich aber zu Aufwändig.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

01.01.2020, 19:08:57 via Website

Hallo
Ja das was Pascal sagt ist sinnvoller.

Wenn du die Rules für die DB richtig setzt brauchst du auch keinen Login kann dann halt jeder lesen.
Zum schreiben würde ich schon einen Login machen.
Das machst du alles in der Firebase Konsole.

Hilfreich?
Pascal P.
Kommentieren
KevAndroid
  • Forum-Beiträge: 4

04.01.2020, 01:04:34 via Website

Hallo nochmal,

noch einmal vielen vielen Dank an euch beide!

Bin aktuell zu Intellij umgestiegen, nutze das nun auch zur App Programmierung, hier gibt es auch ein paar weitere Möglichkeiten und Anleitungen die Firebase Datenbank zu integrieren. Entweder ich bekomme das hin, oder ich schreibe ersteinmal direkt in die Datenbank oder ich melde mich einfach noch einmal bei euch :)

Danke Leute!! Die kleinen Tipps waren schon Gold wert für mich!

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

04.01.2020, 08:44:53 via Website

Hallo

oder ich schreibe ersteinmal direkt in die Datenbank

Was genau meist du damit.
Firebase ist doch schon eine Realtime DB. Du kannst auch den storage von Firebase für deine Text Datei benutzen.

Erstmal solltest du ein Projekt in der Firebase Console erstellen dort fügst du deine App hinzu. Dafür brauchst du den Package name und den SH1 Schlüssel deiner App. Denn du in der Konsole eingibst du bekommst nun eine Datei die du in dein Projekt kopierst. Wie wird auf der Seite gezeigt. Jetst startest du den Assistent in AS und kannst dich mit firebase verbinden. Es weden daduch auch die depensensies im gradle hinzugefügt.

In der Konsole must du nun noch angeben was du alles von Firebase benutzen willst. Also erstmal die die Realtime DB auswählen und aktivieren.

Damit du dich auch mit der DB, auch ohne login verbinden kannst. Musst du auch deine rules anpassen. Standart ist nur verbinden mit Aut. Du willst ja das jeder ohne aut lesen kann.

Sonst wirst du ohne gültigen login keinen Zugriff zur DB bekommen.

Hoffe das hatt erstmal etwas geholfen.

Hilfreich?
Pascal P.
Kommentieren
KevAndroid
  • Forum-Beiträge: 4

04.01.2020, 14:20:18 via Website

Hi Jokel,

damit meinte ich, dass ich das Hochladen der Textdatei weglasse, und meine Inhalte direkt in der Firebase Oberfläche anlege, wie Pascal oben schrieb. Somit könnte ich mir meinen Remote Server sparen und das dort laufende Java Programm, dass die Textdatei überwacht....das war zwar eigentlich mein Highlight, aber damit beschäftige ich mich dann wenn auch alles so benutzt wird, wie ich mir das ausmale.
Ich denke dazu werde ich mich auch noch einmal melden, schon allein der Tipp Eclipse nicht zu verwenden hat mir schon geholfen.

Das Abfragen per App aus der FIrebase DB sollte ich gelöst bekommen, vielen Dank für deine Erklärung! :)

Grüße

Hilfreich?
Kommentieren