Wywołanie javaSctiptu na adroidzie.

Wywołanie javaSctiptu na adroidzie.
FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
0

Hej, mam taki problem z którym meczę się od kilku dni, i nie wiem jak go ugryźć. Próbuje użyć api które jest napisane w node.js. Api łaczy się czym tam trzeba i steruje za pomoca socetów hardwarem. Mój problem polega na tym że za chiny ludowe, nie wiem jak to zrobić.
Próbowałem przepisać zwrapować api na swoim serwerze, ale w takiej konfiguracji bardzo czesto dostaje 401 na twarz, wiec odpada.
Próbowałem zrobic to po stronie androida,
nie wiem w czym pisać natywnie na androda w node.js, wiec uzyłem w c# xamarinie,( kalka javy i xamarin.forms)
Js bez instalacji dziwnych rzeczy można wywołać tylko przez webView(przglądarke), problem jest taki że przeglądarka rzuca, cros error. Próbowałem napisać serwerek zamiast lokalnej strony. Nie wiem co robie nie takie ale cały czas dostaje cors error.
Wczytanie otworzenie strony do której wysyłał by zapytania,(żeby nie było cors) i bezczelnie wysyłanie z niej requestow kiesko idzie, bo webViwer mam mnóstwo ograniczeń, z przyczyn bezpieczeństwa.
Właśnie doczytałem ze do loadurl mozna dodać headery....

Generalnie, nie wiem jak się za to zabrać, metoda prób i błedów nic nie daje i zastanawiam sie czy ktos zna jakiś sprawdzony sposób.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Generalnie, nie wiem jak się za to zabrać

Na Twoim miejscu zacząłbym od dowiedzenia się, czym jest to całe cros error.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

brakuje mi headerów.

Dlaczego zatem ich nie skonfigurujesz?

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
0
Patryk27 napisał(a):

brakuje mi headerów.

Dlaczego zatem ich nie skonfigurujesz?

Dlaczego nie udało mi się ich wczoraj skonfigurować nie wiem :). Dobrym pytaniem było by jak ustawić CORS, w expressjs dla takiej i takiej wersji. Ale nie wiem czy dalsze brniecie w tą ścieżką ma sens.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Dobrym pytaniem było by jak ustawić CORS, w expressjs dla takiej i takiej wersji.

Daleko nie trzeba szukać - sami opisują to w swojej dokumentacji: https://expressjs.com/en/resources/middleware/cors.html.

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
0

Ustawiłem cors tak,

Kopiuj
var cors = require('cors')
var app = express()
app.use(cors())

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', function (req, res, next) {
   res.render('index', { title: 'Express' });
});

Po wywołaniu, dostaje taki error
2xOPTIONS https://eu-api.coolkit.cc:8080/api/user/login 503 (Service Temporarily Unavailable)
Access to fetch at 'https://eu-api.coolkit.cc:8080/api/user/login' from origin 'http://localhost:1337' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Czy lokalizacja https://eu-api.coolkit.cc:8080/api/user/login odnosi się do tego Twojego skryptu wyżej? Ponieważ wychodzi na to, że nie.

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
0

W dokumencji jest napisane że cors, bez parametrów pozwala na dostęp do kazdej lokalizcji, z prametrami tez nie działa.

Kopiuj
var corsOptions = {
    origin: 'https://eu-api.coolkit.cc:8080/api/user/login',
    optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(express.static(path.join(__dirname, 'public')));

app.get('/', cors(corsOptions), function (req, res, next) {
    res.render('index', { title: 'Express' });
});
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Czy przeczytałeś i zrozumiałeś jak działa CORS?

Pytam, ponieważ biorąc pod uwagę Twoje podejście odnoszę wrażenie, że próbujesz zgadywać co, o co, jak i po co, zlepiając losowe fragmenty kodu w nadziei, że magicznie wszystko zacznie działać.

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
0

Czy przeczytałeś i zrozumiałeś jak działa CORS?

Chodzi o to ze zapytania do stron nie należące przez do tej samej witryny, są blokowane przez przeglądarkę. Tak?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Uprościłeś ten dokument do jednego zdania (i do tego nieprawidłowego) - najs ;-]

Tak jak powiedziałem - przeczytaj:

  • w jakim celu powstał CORS,
  • jak jest implementowany w przeglądarkach,
  • jak powinien być implementowany w serwerach,
  • jak się go konfiguruje.

Zalinkowany przeze mnie dokument odpowiada na te pytania, lecz prawdopodobnie lepszym źródłem na start będą:

Przeczytaj te artykuły na spokojnie, ze zrozumieniem, poświęcając na to kilka dni (zależnie ile masz czasu) - bez zrozumienia niestety będziesz cały czas stał w miejscu, a i mi ciężko coś Ci konkretnie podpowiedzieć, ponieważ nie siedzę obok Ciebie i nie widzę Twojego ekranu.

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
0

Pisze jeszcze raz bo znalałem rozwiazanie i podczas edycji pościk mi się usunął.

ponieważ biorąc pod uwagę Twoje podejście odnoszę wrażenie, że próbujesz zgadywać co, o co, jak i po co, zlepiając losowe fragmenty kodu w nadziei, że magicznie wszystko zacznie działać.

Sugerujesz mi rozwiązanie dodając ze daleko szukać nie trzeba, daje feedback że nie działa, i pokazuje co z robiłem. Moje podejście jest właściwe, za Ty się nie potrzebnie spinasz i powinieneś poluzować kij w dupie.

Przeczytaj te artykuły na spokojnie, ze zrozumieniem, poświęcając na to kilka dni (zależnie ile masz czasu) - bez zrozumienia niestety będziesz cały czas stał w miejscu, a i mi ciężko coś Ci konkretnie podpowiedzieć, ponieważ nie siedzę obok Ciebie i nie widzę Twojego ekranu.

Prawdopodobnie góry wiesz że rozwiązanie problemu jest nie możliwe w tym przypadku za pomocą przeglądarki ale i tak sugerujesz mi poświęcenie kilku dni, na studiowanie. Co uważam za kwintesencje albo szurostwa albo głupiej hipokryzji.

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: warszawa
  • Postów: 315
1

Hej, pisze bo może komuś się przyda.
Moim problemem było użycie nie-restowego, 3rd party API napisanego w node js lokalnie na androidzie. Co po paru hakach sprowadza się do odpalenia js(jak kolwiek)na androidzie).

Problem rozwiązałem pisząc apke w react-native, bo pozwala pisać w node i js. Ma on graniczenia pracy w tle co mnie boli... eh, ale powinno się udać. Z odpalaniem modułów node nie jest jednak tak łatwo. Nie mogą one być natywne (czytaj o wrapowane c++). Mozna to obejść generując bloba za pomocą Browserify, a potem zamienić w nim nazwę funkcji require - które jest specjalnie traktowane - na dowodną inna unikalną nazwę.

Napisanie proxy w nodzie, odpadło bo, serwer rzuca od czasu do czasu 401 to jest bug, ale najszybciej się tym zajmą za kilka tygodni - w najlepszym wypadku - bo wydają właśnie nowe api, pozwalające na prace w sieci lokalnej... co dodatkowo skreśla ten pomysł.

Napisanie strony która ładuje potrzebne skrypty, nie udało się z powodu cors. Serwer jest 3rd party, a proxy nie da się napisać. Dodatkowo nie pozwoli na prace lokalną.

Przepisanie api, jest głupie w sytuacji gdy wydaja nowe api.

w C#, w xamarinie da się odpalić js, ale na iOs, bo ma wbudowany silnik od którejś wersji. W przypadku androida generalnie się nie da bo:
MS ma moduł v8 prawie bez zaleznośni windowsowych, ale poza samym js pozwala on odpalać czysto windowsowe rzeczy i nie zostanie rozwinięty na xamarina. Istnieje okrojona wersja na git hubie, ale ona działa na Linuksie, iOs i windowsie ale nie na adroidzie.
3rd party interpretery nie działają, lub działają ale na za niskiej wersji js.
WebView jako interpretera(nawet bez wysyłania requestów) nie polecam używać, bo nie do tego służy jest toporny i ma milion polityk bezpieczeństwa.

W javie, podobno się da i podobno działa, ale android studio wiem tyle ze jest toporne i zmarnuje dzień lub 2 na walke z systemem, samą jave znam słabo, wiec odpada. Podobno można napisać/wygenrować w raper java/c#, ale co za dużo to nie zdrowo.

Jest jakiś śmieszny framework do pisania apek w node, ale ma za duże ograniczenia, i nie spełni moich potrzeb.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.