Skocz do zawartości
doctor

[GMS1.4] Przeglądarki

Rekomendowane odpowiedzi

Witam, tak się zastanawiam czy są takie funkcje:

1) Czy jest możliwość, że "na grze" odpali się przeglądarka i zrobienie operacji zapisze zmienne GET do gry? [musi być niestety cała sekwencja, więc nie mogę po tym Asynchu]
2) Jeśli (potencjalnie tak) to czy taka przeglądarka się wyłączy jak otrzymany HTML będzie miał jakiś ciąg znaków
3) Czy GMS2.0 (hipotetycznie) w wersji Web ma już opcję komunikacji z serwerami WWW?

Fervi

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Cześć, 1) jeżeli chodzi Ci o otworzenie przeglądarki w oknie gry, to jest to niemożliwe, bo GM nie ma wbudowanej przeglądarki www i mogę z pewnością rzec, że nie będzie miał jej w przyszłości. 2) ale jak sama się wyłączy? wątpię, żeby mogła, jak już otwierasz przeglądarkę np. poprzez execute_shell (nie wiem czy jeszcze działa w GMS), to nawet JS nie umożliwia Ci manipulowaniem okna przeglądarki. 3) przecież jest funkcja http_request, powinna działać też w eksporcie HTML5.

 

Nie wiem, co próbujesz osiągnąć, IMO na 99% przypadków komunikacji z serwerem to http_request wystarczy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie rozumiem jaki jest problem w wykonaniu geta za pomocą http_request ? przecież efekt po stronie serwera będzie taki sam, jak otworzenie w przeglądarce ? chyba, że chcesz jakiś JS wykonać? musisz podać wiecej szczegółów, bo ja też uważam, że http_request wystarczy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dnia 18.02.2019 o 11:21, gnysek napisał:

Nie rozumiem jaki jest problem w wykonaniu geta za pomocą http_request ? przecież efekt po stronie serwera będzie taki sam, jak otworzenie w przeglądarce ? chyba, że chcesz jakiś JS wykonać? musisz podać wiecej szczegółów, bo ja też uważam, że http_request wystarczy.

 

Bo nie łączę się ze swoją stroną, a z czyjąś stroną, ktora działa jak OAuth2. Jak już bym miał te dane to http_request i reszta bez problemu, ale bez zdobycia access_token (który jest udostępniany po przejściu procedury logowania) to nie ma opcji chyba :P

 

Fervi

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Tak naprawdę to interesuje Cię pierwsze logowanie OAuth2 w przeglądarce, ponieważ Twoja aplikacja wymaga odebrania odpowiedzi od serwera autoryzującego, dokładniej chodzi o parametr `code`. Potem z poziomu już aplikacji w GMie puszczasz POST (poprzez http_request) do tego serwera autoryzującego, żeby otrzymać `access_token` oraz `refresh_token`, które umożliwiają Ci dostęp do zasobów już bez konieczności dalszej ingerencji użytkownika. (https://alexbilbie.com/guide-to-oauth-2-grants/)

 

Znalazłem coś takiego - https://developer.okta.com/blog/2018/07/16/oauth-2-command-line. Wygląda na dość legitne rozwiązanie, o ile na stronie w której tworzysz aplikację OAuth2 umożliwia Ci ona przekierowanie po localhoście (ustawienie parametru `redirect_uri` na localhost). Generalnie wygląda to tak (poza użyciem PHP ofc.) - otwierasz lokalny serwer w GMie (tworząc serwer za pomocą funkcji network_create_server_raw) i czekasz, aż odbierzesz dane z przekierowania (zwłaszcza na parametr `code`) od użytkownika gdy przekieruje go strona autoryzacji (użyj chociażby url_open żeby otworzyć przeglądarkę z endpointem autoryzacji). Pamiętaj, że serwer HTTP działa jak każdy inny serwer, po socketach, tyle, że w GMie otrzymasz cały bufor wraz z nagłówkami. Potem po odebraniu wiadomości zamykasz lokalny serwer i wysyłasz POSTa z parametrem `code` i otrzymujesz wymagane tokeny, kiedy wygaśnie `access_token`, odnawiasz go dzięki `refresh_token` ale już tylko przy użyciu POST i http_request.

 

Sprawa inaczej wygląda, jak używasz eksportu HTML5, bo tutaj już masz serwer, wystarczy, że będziesz nasłuchiwał na kod i wymienisz go z aplikacją w GMie np. poprzez GMowe rozszerzenia javascriptowe.

 

Pewnie byłbym w stanie jakiś przykład zrobić czy coś, ale to dość sporo zachodu a aktualnie czasu nie mam na zabawę :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Uuu, z oauth lekko nie będzie.

 

Moja propozycja:

1. łączysz się w tle ze swoją stroną i tworzysz jakieś nowe, randomowe ID, dodajesz je do bazy danych [ID | result | tokeny] i ustawiasz result na 0.

2. otwierasz w przeglądarce stronę, np. mojastrona.pl?user=<wczesniejsze ID>. Tworzysz sesję php, zeby tego usera widzieć.

3. przekierowujesz na oauth

4. jak logowanie sie skończy, wracasz na swoją stronę

5. ustawiasz w bazie "UPDATE tabela SET result = 1 WHERE randomowe_id = <twoje id>". Wyświetlasz komunikat "możesz wrócić do gry".

 

Gra cały czas w tle robi, np. co 2-3 sekundy zapytanie do serwera, typu: mojastrona.pl?check=<wczesniejsze id>. Jak dostanie 1, to przy okazji dajesz tokeny i tyle.

 

 

Tak to generalnie działa chyba w apkach, gdzie się logujesz przez www (a przynajmniej ja tak to widzę). Oczywiście warto dodać jakieś zabezpieczenia, żeby randomowo nie móc podać id i się zalogować na kogoś, jak już wszystko działa.

 

Dane w tabeli result bym kasował po godzinie, max 24h.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ok, poświęciłem trochę czasu i zrobiłem "brudny" przykład jak można to zrobić z Google Drive. Przykład tworzy przykładowy plik na drive. Ale nie widzę możliwości, żeby przeglądarka sama otwierała okno gry żeby wrócić :/

 

https://gmclan.org/up1717_16_OAuth2.html

 

Przykład działa tak jak opisałem, otwiera url z oauth i tworzy bardzo mikro serwer "http". Potem czeka aż przyjdą dane z tym wymaganym parametrem `code` :P

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×