Rest API - PHP?

hi1its1me  06.02.2023, 13:31

Bekommst du eine Fehlermeldung oder ähnliches?

linuxlara 
Fragesteller
 06.02.2023, 13:33

Nein, bekomm nur so ein Ladezeichen, das hab ich so programmiert das es das macht, das heißt das er keine Daten bekommt, aber mit einer API aus dem Internet funktioniert es

LeBonyt  06.02.2023, 13:59

Hast Du denn einen Response Code. Oder wird überhaupt nichts zurückgegeben?

linuxlara 
Fragesteller
 06.02.2023, 14:04

Ja hab ich aber ist zu lang, kann das hier nicht posten

    


4 Antworten

Der mögliche Grund wegen nur http (nicht verschlüsselt) sollte kein Problem sein. Ich habe schon über HTTP Requests gemacht und es ging durch. Ausnahme könnte sein, wenn Google in der letzten Version etwas verändert hat.

Da deine App auf einem Smartphone läuft und dein Server auf deinem PC läuft, ist das Netzwerk auch ein Thema.

Hast du in der App deine lokale IP Adresse vom PC angegeben? localhost oder 127.0.0.1 passt nicht.

Blockst du über dein Router oder über die Windows Firewall die Verbindung? Falls du keine Ahnung hast, wird es eher nicht der Fall sein.

Es könnte auch sein, dass dein Service nur auf localhost lauscht und daher nicht von außerhalb erreichbar ist. Was ist wenn du in z.B. Postman die lokale IP vom PC benutzt?

Nutzt ein Debug oder Release Build der Flutter App? Bei einem Release Build musst du noch eine Berechtigtungen zur AndroidManifest.xml hinzufügen. Im Debug Build wurde es schon hinzugefügt, da es u.A. für die DevTools erforderlich ist.

Infos dazu: https://stackoverflow.com/a/55606098

Du könntest auch testweise deine API über den Browser am Smartphone aufrufen. Dann hast den Teil mit Netzwerk dabei, aber deine App ist außen vor.

Andersherum könntest du den Android Emulator nutzen, um deine Anwendung ohne Netzwerk zu testen. Ich würde den Android Emulator nutzen, da du hier dann auch die Android Plattform nutzt.

Welche Informationen bekommst du beim Aufruf in der App? Hier bietet sich an, die App mit Debugging zu starten und ein Breakpoint zu setzen. Wirt eine Exception geworfen? Was beinhaltet das Response Objekt? Status Code? Header? Payload?

Vielleicht liegt es ja an einer Firewall, die verhindert, dass du die API von einem anderen Gerät aus aufrufen kannst.

Versuch mal die API mit einem Browser oder Postman aufzurufen und verwende dabei ein anderes Gerät als das, auf dem die API läuft.


linuxlara 
Fragesteller
 06.02.2023, 13:38

Die Api läuft ja local

0
hi1its1me  06.02.2023, 13:43
@linuxlara

Ich glaube in diesem Fall ist die App nicht wirklich lokal.

Was für eine IP-Adresse rufst du denn in der App auf? (localhost/127.0.0.1 wird vermutlich nicht funktionieren).

0
linuxlara 
Fragesteller
 06.02.2023, 14:10
@linuxlara

vll liegt das wirklich daran das es http ist aber weiß auch nicht

0

Wenn es im Browser und über einen REST Client wie Postman funktioniert, aber über die App nicht, ist wohl weniger die API das Problem, sondern die App. Daher müsstest du schon näher darauf eingehen, mit was die App entwickelt wurde und wie sie die API aufruft. Fehlermeldungen wären auch sinnvoll.

Ruft die App die API über HTTP (und nicht HTTPS) auf? Dann ist das nämlich wahrscheinlich das Fehlerbild. Dazu ein Auszug aus der (beispielhaften) React Native Dokumentation:

By default, iOS will block any request that's not encrypted using  SSL. If you need to fetch from a cleartext URL (one that begins with  http) you will first need to  add an App Transport Security exception.
[...]
On Android, as of API Level 28, clear text traffic is also blocked by default. This behaviour can be overridden by setting android:usesCleartextTraffic in the app manifest file.

https://reactnative.dev/docs/network.html

Ansonsten benötigt man hier wie gesagt schon ein wenig mehr Kontext wie Fehlermeldungen, da das sonst Blindraten ist.

Woher ich das weiß:Hobby – Seit Jahren Apple Power-User (iOS und macOS)

linuxlara 
Fragesteller
 06.02.2023, 13:34

Ja also ich habe es mit einer API aus dem Internet probiert und da funktioniert es. Ich rufe die API mit http auf. Die App wird mit Flutter programmiert und ich bekomme keine Fehlermeldung. Es kommt nur das Ladezeichen, weil ich das so programmiert habe

0
linuxlara 
Fragesteller
 06.02.2023, 13:46

und wie kann ich android:usesCleartextTraffic im Manifest setzen bzw einstellen?

0
Functional  06.02.2023, 13:52
@linuxlara

Kenne mich mit Flutter nicht aus (nur React Native). Hier aber eine StackOverflow Antwort dazu: https://stackoverflow.com/a/60192032/8159153

Die Alternative wäre halt, dass du deine API mit HTTPS verschlüsselst. Am einfachsten geht das mit etwas wie Ngrok, welches dir eine zufällig erzeugte) HTTPS-verschlüsselte Domain gibt, welche du auf deine API auf localhost weiterleiten kannst. So musst du dich nicht selbst um den SSL-Kram kümmern. Ngrok hat eine große Dokumentation, gibt's aber auch sonstige Anleitungen im Netz.

0
linuxlara 
Fragesteller
 06.02.2023, 14:40
@linuxlara

Hab es probiert, aber wenn ich ngrok http 80 eingebe dann wird ja die standard seite in https übersetzt. Wie kann ich das machen das ich eine beliebige url in https übersetzen kann?

0
linuxlara 
Fragesteller
 06.02.2023, 14:49
@linuxlara

Habe es schon, aber ändert an der Funktionalität auch nichts

0
linuxlara 
Fragesteller
 06.02.2023, 15:45
@linuxlara

aber kann man es auch statisch machen, weil die url sonst jedesmal anders ist wenn man einen tunnel beendet

0

Wo läuft denn dein Server mit der REST-API und wo läuft die App?

Wenn der Server auf einem lokalen Rechner läuft und die App auf dem Smartphone, dann musst du im Smartphone die richtige – lokale – IP-Adresse des Rechners eintragen und selbst dann kann es sein, dass dein Router die Verbindung blockiert.

Woher ich das weiß:Berufserfahrung – Entwickle seit > 20 Jahren Anwendungen mit PHP.

linuxlara 
Fragesteller
 06.02.2023, 13:41

Ja also die API läuft lokal und die App eigentlich auch, nur ich hab ein Smartphone per USB angeschlossen und diese läuft auf dem Smartphone

0
Babelfish  06.02.2023, 15:07
@linuxlara

Na ja, dann läuft die App wie ich mir schon dachte auf dem Smartphone. Hast du in dem App auf dem Smartphone die richtige IP-Adresse eingegeben?

0
Babelfish  06.02.2023, 15:31
@linuxlara

Na dann höre auf das was ich dir gesagt habe und gibt die lokale IP-Adresse deines Rechners an. Dein Smartphone kann link nicht auflösen, sofern du das nicht einen lokalen DNS hast.

0
Babelfish  06.02.2023, 15:54
@linuxlara

Es hätte einiges Zeit gespart, wenn du das gleich geschrieben hättest. Ich habe keine Glaskugel, die mir sagt, dass du ngrok nutzt.

Wenn der Link funktioniert und deine Ali ok ist, dann liegt der Fehler in den App. Da musst du halt mal Debugger und schauen, warum die Daten nicht geladen werden.

0
linuxlara 
Fragesteller
 06.02.2023, 15:58
@Babelfish

Ja der link funktioniert im Browser, also auch vom Smartphone und mit postman kann ich die Daten ebenfalls abfragen

0
linuxlara 
Fragesteller
 06.02.2023, 16:08
@Babelfish

ich weiß woran es liegt, es liegt an den Datentypen aber weiß nicht wie ich das lösen kann

0