Daten von einer App an einen Server senden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • @Phil Coulson: Ich glaube, Du hast nun so viele Optionen und unterschiedliche Meinungen bekommen, dass sie vermutlich mehr zur Verwirrung als Klärung beitragen. Es könnte eine gute Idee sein, genauer zu erklären, was Du eigentlich erreichen möchtest:
    • Grober Überblick der Funktion
    • Wer ist die Benutzergruppe?
    • Welche Art von Daten (Vertraulichkeit, Kritikalität, ...) wird übertragen?
    • Ist der Zielserver öffentlich zugänglich oder in einem privaten Netz?
    • Wie sollen die Daten auf dem Server gehalten / weiterverarbeitet werden?
    • Welche Kenntnisse / Mittel stehen Dir zur Verfügung?
    Wahrscheinlich ergeben sich noch Folgefragen, aber ohne diese Randbedingungen zu kennen, können Hinweise nur sehr allgemein sein und Dich evt. in die falsche Richtung schicken.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Also die App wird eine iPad Bewertungsapp für einen Wettbewerb von einer AG an meiner Schule.
    In der App füllt man dann eine Art Formular aus mit den Bewertungskriterien etc.
    Die App wird von Schülern die 16 und aufwärts sind benutz werden.
    Da die App nur innerhalb dieser AG benutzt wird und niemand sonst auch das Passwort für die App weiß ist es auch nicht das Problem, das jemand fremdes den Server nutzen wird. (Sprich Vertraulichkeit ist nicht besonders wichtig).
    Der Server wird wahrscheinlich nun ein Raspbarry Pi werden, der Zuhause bei einem Schüler steht und somit ohne die passende Ip nicht erreichbar sein wird.
    Der erste Schritt sollte nun erstmal sein das die App die eingetragenen Werte (in was für einem Format auch immer) an den Server überträgt und ein anderer Computer die Daten automatisch runterlädt und weiterverarbeitet (also der Server soll erstmal nur als "Weiterleiter" fungieren.

    Wenn das Einwandfrei funktioniert, war eine Überlegung das man auf dem Server z.B Teamnamen speichern kann und man auf der IPad App dann eines der Teams auswählen kann. (ist aber erstmal zweitrangig)

    Mir stehen persönlich nur Einsteiger Kenntnisse von Xcode und Swift zur Verfügung. Ein Schüler (bei dem der Raspberry Pi stehen wird) hat, soweit ich weiß, noch einige Kenntnisse in Python und ich glaub auch in Java Script.
  • Zwei Gedanken dazu:
    • Die Raspi-Idee klingt für mich suboptimal: Das Teil muss permanent an und erreichbar sein, also braucht der Internet-Anschluss der Eltern des Schülers eine permanente IP (oder DynDNS), es müssen Port-Freigaben definiert werden ... da erscheinen mir EUR 5 / Monat für einen Web-Server inkl. Datenbanken der sinnvollere Weg.
    • Wäre es denkbar, statt der App ein Web-Formular zur Dateneingabe zu nutzen? Mit entsprechende PHP-Skripten könnte eine Datenbank entsprechend befüllt und ausgewertet werden. So vermeidest Du unnötige Schnittstellen und Abhängigkeiten und kannst die Funktion ganz nebenbei plattformübergreifend (z. B. für Android) anbieten. Nicht alles muss eine App sein.
    Nur als Gedankenanstoss ... wenn man einen Hammer hat, sieht oft jedes Problem wie ein Nagel aus :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ja. Für Umfragen/Bewertungen eignen sich Webseiten gut.

    Wenn der Server nur im Schul-WLAN erreichbar sein muss, dann muss man nicht ein Gerät ins Internet hängen. Also falls die Schüler zur Schule gehen dürfen. Man kann auch einen W-LAN Stick an den Raspi hängen und den zum AccessPoint machen. Dann muss man sich halt in der Nähe des Raspis aufhalten. Kann aber unpraktisch sein.

    So V-Server Lösungen gibt es auch für 1€. Das sollte auch von der Performance reichen.
  • Also ich denke das Ganze ist so nicht besonders sinnvoll. Wenn es keine Anmeldung gibt, dann kann ja jeder so oft abstimmen wie er lustig ist. Da wird es bestimmt einige Witzbolde geben die sich den Spaß machen 20x abzustimmen. Deine Ergebnisse sind auf jeden Fall nicht wirklich brauchbar.

    Im Deinem Fall wäre es vielleicht sinnvoller das Ganze nur auf einem iPad zu installieren, dass dann im Unterricht einmal herumgereicht wird. Damit wärst du alle Probleme auf einmal los, weil du gar keinen Server mehr brauchst und die Richtigkeit der Daten wäre auch gewährleistet.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • @Thallius das Problem mit dem merfach abstimmen ist mit drei Sachen abgesichtert. Erstens muss man um die app überhaupt nutzen zu können ein Passwort eingeben. Zweitens muss vor dem Abschicken immer der Prüfer und einer (Stellvertretend für das Team) Unterschreiben und drittens haben nur Prüfer ein Ipad mit der App (ist auch nicht für den Unterricht sondern für einen Wettbewerb mit ca 80 Schülern in verschieden Teams)

    @MyMattes und @manoh Mit einer Website wäre es zwar auch möglich aber ich weiß nicht so genau ob man das auch so wie es momentan mit den Unterschriften geht und Letzen endes Ist die App eigentlich schon fertig und funktioniert schon einwandfrei (jetzt geht es nur noch um Verbesserungen) weshalb ich ungerne ein komplett nues Projekt anfangen möchte...
  • Phil Coulson schrieb:

    ist auch nicht für den Unterricht sondern für einen Wettbewerb mit ca 80 Schülern in verschieden Teams
    Auch auf die Gefahr, nun gesteinigt zu werden, würde ich zwei verschiedene Situationen unterscheiden:
    1. Du hast einfach Bock, mit der App Neuland zu erkunden: Schreib' die Daten in ein JSON, schick' die Daten entweder an den Raspi (Intranet) oder einen gemieteten Server (Internet) und der o.g. Schüler scriptet etwas zum Auswerten.
    2. Du möchtest eine pragmatische Lösung: Bei 80 Schülern reden wir von ... 20 Teams? Formatiere die Daten in eine CSV-Datei, lass' sie Dir weiterhin per Mail als Anhang schicken und kopiere die Dateien händisch in ein Spreadsheet o. ä.
    Ja, die zweite Lösung ist nicht sexy, erfordert manuelle Tätigkeiten und beantwortet nicht Deine ursprüngliche Frage. Aber sie ist blitzschnell implementiert, vermeidet viele Stolpersteine wie Datenschutz, Server-Betrieb etc. und der Aufwand hält sich meines Erachtens echt in Grenzen ... 20 x Copy & Paste. Man kann auch in Schönheit sterben.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Mal ein anderer Ansatz, weshalb verwendest du nicht iCloud? Ist bei deinen angedachten Datenvolumen auch in 30 Jahren noch kostenlos, die Leut werden automatisch über ihre AppleId identifiziert und gut ists. Um die Datenübertragung und Synchronisation, kümmert sich ebenfalls Apple… da hast fast nichts mehr zu tun ;)

    Schöne Grüsse
    Wolf
  • Und?

    Dann bist du soweit, dass derjenige dann halt seinen namen einzugeben hat. Ist doch dasselbe wie bei den anderen Ansätzen.

    Daneben braucht du dann nicht den public, sondern nur die private icloud, und das kümmert dich als Entwickler gar nicht mehr, weil es nicht auf deine Kontigente angerechnet wird.

    braucht doch noch ein zweites iPad, resp. icloud account, dann braucht dennoch den public space, wenn du nicht sharen möchtest.

    Wenn es aber nur auf einen gerät läuft, wieso willst dann eigentlich in die Cloud? läuft doch lokal viel Problemloser…
  • Alles mit Apple ID kann man vergessen. Es darf sich niemand mit einer Apple ID oder E-Mail (oder sonstige Accounts) anmelden. Und da die App ja eben nicht nur auf einem IPad laufen wird, muss man entweder irgenwie die Anmelde Daten für eine E-Mail adresse in der App hinterlegen (das man sich halt nicht auf dem Gerät anmelden muss sondern das, dass sozusagen dann so ist, als würde ich mich im Browser anmelden) oder man macht es die Datenübertragung halt über Wlan bzw. Internet (Schulfremde Geräte dürfen auch nicht in das Wlan || )
  • Ich weiß ja nicht genau was Googles Firebase ist. Aber ich stelle mir das vor, das ist halt eine Datenbank mit REST-API, die man einfach über die Webseite erstellen kann. Soweit ich gesehen habe, davon gibt es auch eine kostenlose Version, die vermutlich für die Anzahl der Nutzer und Datenmenge völlig ausreicht. Aber keine Ahnung, Vielleicht kennt sich jemand damit besser aus und kann dazu etwas beitragen?!
  • moment, ich kapiere jetzt gar nix mehr. keine apple id? wie kommst denn da auf das gerät? das nächste ist, falls doch, wie kannst du da deine app installieren? ohne installation, bleibt nur web…
    … mit web, bleibt nur eine Anmeldung…

    ansonsten hilft nur noch erschiessen, da sich die anforderungen gegenseitig ausschließen.

    firebase, ist die google variante der icloud, die limits sind niedriger, dafür kann man sich bspw telefonieren verifizieren
  • manoh schrieb:

    Wolf schrieb:

    firebase, ist die google variante der icloud, die limits sind niedriger, dafür kann man sich bspw telefonieren verifizieren
    Für Firebase findet man halt so "survey" Beispiele. Aber wenn das sowas wie iCloud sein soll, dann passt das nicht zusammen.
    Ist halt einfach eine Datenbank in der Cloud, wie bei iCloud auch. Die iCloud hat halt den Vorteil, dass es tiefer in das Apple Universum eingebunden ist, Firebase dass es Plattformunabhängig ist. Die Firma die Firebase entwickelt hatte, wurde ja von Google aufgekauft, damit hat Firebase auch von Natur auf die Möglichkeiten der Datenanalyse, was auf der Datenbank vor sich geht (Google Adds lässt Grüssen). Auch gibt es die Möglichkeit, bis zu einer bestimmten Anzahl von Anfragen, den User per SMS zu Authentifizieren…
    … dazu noch ein paar Goodies…

    Wenn man bei Google, etwas nach Firebase sucht, die stösst man halt auch schnell an Berichte, wo die Entwickler sich abgezockt fühlen, weil sie recht schnell und ohne grosse Vorwarnung die Freigrenzen überschritten.

    Firebase ist sicher eine Alternative zur iCloud, wenn man Plattformunabhängig entwickeln möchte. Wenn man den Anwender per Handy Nummer identifizieren möchte, …
    … kann man natürlich auch dual einsetzen.

    Wenn man das nicht braucht, finde ich iCloud aktuell besser (ob dies auch technisch stimmt, sei mal dahingestellt). Wenn man nur den private Space braucht, juckt einen das als Entwickler gar nicht und man hat Out-of-the-Box eine deviceübergreifende Datensyncronisation.
  • Ich habe jetzt mal einen FTP server gemietet und wollte das damit ausprobieren daten von der APP zu empfangen. Nun Funktioniert das aber leider nicht... Den Code habe ich mal angehängt (prinzipiell habe ich aber nur den Code von der Apple Website genutzt).



    Quellcode

    1. @IBAction func Absenden(_ sender: Any) {
    2. struct Order: Codable {
    3. let customerId: String
    4. let items: [String]
    5. }
    6. let order = Order(customerId: "12345",
    7. items: ["Test 1", "Textfeld"])
    8. guard let uploadData = try? JSONEncoder().encode(order) else {
    9. return
    10. }
    11. let url = URL(string: "lionfight.lima-ftp.de:21")!
    12. var request = URLRequest(url: url)
    13. request.httpMethod = "POST"
    14. request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    15. let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in
    16. if let error = error {
    17. print ("error: \(error)")
    18. return
    19. }
    20. guard let response = response as? HTTPURLResponse,
    21. (200...299).contains(response.statusCode) else {
    22. print ("server error")
    23. return
    24. }
    25. if let mimeType = response.mimeType,
    26. mimeType == "application/json",
    27. let data = data,
    28. let dataString = String(data: data, encoding: .utf8) {
    29. print ("got data: \(dataString)")
    30. }
    31. }
    32. task.resume()
    33. print ("Daten wurden an den Server gesendet.")
    34. }
    Alles anzeigen
    Der Fehler kommt dann immer:

    2021-08-17 15:05:12.455077+0200 Server Test[2749:163608] Task <A5263D74-22C0-402F-91FA-3AE53612E458>.<1> finished with error [-1002] Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL, NSErrorFailingURLStringKey=lionfight.lima-ftp.de:21, NSErrorFailingURLKey=lionfight.lima-ftp.de:21, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalUploadTask <A5263D74-22C0-402F-91FA-3AE53612E458>.<1>"
    ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <A5263D74-22C0-402F-91FA-3AE53612E458>.<1>, NSUnderlyingError=0x600002f21080 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}}
    error: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL, NSErrorFailingURLStringKey=lionfight.lima-ftp.de:21, NSErrorFailingURLKey=lionfight.lima-ftp.de:21, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalUploadTask <A5263D74-22C0-402F-91FA-3AE53612E458>.<1>"
    ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <A5263D74-22C0-402F-91FA-3AE53612E458>.<1>, NSUnderlyingError=0x600002f21080 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}}



    Ein Bild von der Website zur einrichtung des FTP Servers habe ich auch mal angehängt.
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Phil Coulson ()