Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pjv:laboratoare:2024:a03 [2024/11/04 10:51]
alexandru.gradinaru [Request-uri HTTP in Unity]
pjv:laboratoare:2024:a03 [2024/11/04 12:42] (current)
andrei.lapusteanu Updated note for back4app and parse
Line 87: Line 87:
 Aceste sistem foloseste corutine intrucat cererile HTTP sunt in general asincrone - trebuie sa asteptam un raspuns, care poate dura si cateva secunde, fara a afecta/opri rularea aplicatiei Unity/a jocului. Aceste sistem foloseste corutine intrucat cererile HTTP sunt in general asincrone - trebuie sa asteptam un raspuns, care poate dura si cateva secunde, fara a afecta/opri rularea aplicatiei Unity/a jocului.
  
-Mai jos gasiti un exemplu, preluat din pagina de documentatie oficiala [[https://​docs.unity3d.com/​2022.3/​Documentation/​ScriptReference/​Networking.UnityWebRequest.Get.html]],​ care prezinta cum se trateaza un request simplu de preluare de informatii (GET).+Mai jos gasiti un exemplu, preluat din pagina de documentatie oficiala [[https://​docs.unity3d.com/​2022.3/​Documentation/​ScriptReference/​Networking.UnityWebRequest.Get.html]],​ care prezinta cum se trateaza un request simplu de preluare de informatii (GET). ​
  
 <code c#> <code c#>
Line 377: Line 377:
  
 In Unity totusi, puteti folosi mai simplu acest fel de sistem prin pachetul [[https://​assetstore.unity.com/​packages/​tools/​network/​rest-client-for-unity-102501|REST Client for Unity]] care are deja integrata partea de promises si o parte de serializare JSON. In Unity totusi, puteti folosi mai simplu acest fel de sistem prin pachetul [[https://​assetstore.unity.com/​packages/​tools/​network/​rest-client-for-unity-102501|REST Client for Unity]] care are deja integrata partea de promises si o parte de serializare JSON.
 +
 +Un exemplu de utilizare:
 +
 +<code c#>
 +
 +//exemplu de structura de date pentru parsare JSON
 +
 +[Serializable]
 +public class UserData
 +{
 +    public int id;
 +    public string name;
 +    public string email;
 +    public UserAvatar avatar;
 +    public UserProfile profile;
 +    public UserQuest[] quests;
 +    public UserTour[] tours;
 +    public LibraryEvent[] libraryEvents;​
 +}
 +
 +
 +//exemplu de functie care returneaza un Promise
 +public RSG.IPromise<​UserData>​ GetUserProfile() {
 +
 +        return RestClient.Get<​UserData>​(Config.apiURL + "​user"​)
 +        .Then(result => {
 +
 +     //​Debug.Log(JsonUtility.ToJson(result,​true));​
 +
 +            data = result;
 +            email = data.email;
 +            name = data.name;
 +            quests = data.quests;​
 +            id = Convert.ToUInt32(data.id);​
 +
 +           ​return data;
 +        });
 +    }
 +
 +
 +//utilizare in cascada de evenimente ​  
 +void Start () 
 +{
 +
 +        User.instance.GetUserProfile()
 +        .Then(result => {
 +            Debug.Log("​get library"​);​
 +            return Library.instance.GetLibraryProfile();​
 +        })
 +        .Then(result => {
 +            Debug.Log("​load scene"​);​
 +            SceneManager.LoadScene(Config.libraryTitle);​
 +            // SceneManager.LoadScene(1);​
 +            // username.text = result.name;​
 +        });
 +        ​
 +}
 +</​code>​
 +
 +Gasiti mai multa documentatie aici [[https://​github.com/​proyecto26/​RestClient]].
  
 === Gestionare autentificare === === Gestionare autentificare ===
 +
 +Pentru a prelua din web informatii speficice pentru un anumit utilizator, cererile HTTP trebuie complementate cu informatia de autentificare prin folosirea unui header de Autorizare (Authorization). ​
 +
 +In acest header transmitem in general un token. In functie de nevoi/​capabilitati/​dispozitive,​ exista mai multe tipuri de token-uri care pot fi folosite:
 +  * Access tokens
 +  * ID tokens
 +  * Self-signed JWTs
 +  * Refresh tokens
 +  * Federated tokens
 +  * Bearer tokens
 +
 +Cel mai dese folosite sunt Bearer tokens, care, dupa cum descrie si numele, sunt o clasă generală de jeton care acordă acces părții în posesia tokenului. Token-urile de acces, ID tokens și JWT-urile sunt toate tokenuri Bearer.
 +
 +Mai multe detalii despre tokenuri puteti citi aici: [[https://​cloud.google.com/​docs/​authentication/​token-types]].
 +
 +Pentru a folosi un token de tip Bearer, fiecare cerere HTTP trebuie sa conta un header de Autorizare de tip Bearer. De exemplu:
 +
 +<code c#>
 +//Pentru RestClient package
 +
 +//​autorizare
 +RestClient.DefaultRequestHeaders["​Authorization"​] = "​Bearer "​+token.access_token;​
 +//alte headere in functie de nevoie
 +RestClient.DefaultRequestHeaders["​Accept"​] = "​application/​json";​
 +
 +//pentru UnityWebRequests
 +
 +var uwr = new UnityWebRequest(url,​ "​POST"​);​
 +//​autorizare
 +uwr.SetRequestHeader("​Authorization",​ "​Bearer "​+token.access_token);​
 +//alte headere in functie de nevoie
 +uwr.SetRequestHeader("​Content-Type",​ "​application/​json"​);​
 +</​code>​
  
 ==== Game Launcher in C# ==== ==== Game Launcher in C# ====
Line 431: Line 524:
 === HTTP === === HTTP ===
  
-Pentru partea de backend ne vom folosi de **Back4App**,​ ce este o platoforma de tip backend-as-a-service (BaaS), construita pe **Parse**, ce ofera stocare cloud, servicii de autentificare,​ baze de date, etc.+Pentru partea de backend ​in general este nevoie de un serviciu Web, cu o baza de date in spate. 
 +Pentru exemplificare ​ne vom folosi de **Back4App**,​ ce este o platoforma de tip backend-as-a-service (BaaS), construita pe **Parse**, ce ofera stocare cloud, servicii de autentificare,​ baze de date, etc.
  
 In mod special pentru acest laborator ne vom folosi de apeluri catre endpoint-uri via un REST API (request-uri HTTP). In mod special pentru acest laborator ne vom folosi de apeluri catre endpoint-uri via un REST API (request-uri HTTP).
Line 494: Line 588:
 Nu uitati sa schimbati ''​YOUR_APP_ID''​ si ''​YOUR_REST_API_KEY''​. Le gasiti in **dashboard-ul proiectului Back4App -> App Settings -> Security & Keys**. Nu uitati sa schimbati ''​YOUR_APP_ID''​ si ''​YOUR_REST_API_KEY''​. Le gasiti in **dashboard-ul proiectului Back4App -> App Settings -> Security & Keys**.
 </​note>​ </​note>​
 +
 +=== Unity ===
 +
 +Dupa acesti pasi va trebui sa va folositi de celalalt buton din form (Start Game), prin care veti lansa in executie build-ul de Unity, caruia ii trimiteti argumentele necesare. Va trebui sa trimiteti si acel **session token** capturat anterior.
 +
 +<​note>​
 +  * In cazul in care ati folosit Back4App, aveti [[https://​dashboard.back4app.com/​apidocs#​user-api|aici documentatia API-urilor]].
 +  * Back4App se bazeaza pe Parse, aveti [[https://​docs.parseplatform.org/​rest/​guide/#​users|aici documentatia API-urilor]] pentru acesta
 +</​note>​
 +
 +
 +Va trebui sa va alegeti un call care necesita acest session token, anume un call care are nevoie de campul din header ''​X-Parse-Session-Token''​.
 +
 +Folositi ''​UnityWebRequest''​ pentru a face request-ul. In cerinte vi se specifica sa faceti un call pentru a returna numele utilizatorului (poate fi in exemplul nostru acest ''​displayName''​).
 +
 +Un exemplu de API call ce se foloseste de acest session token este ilustrat mai jos.
 +
 +{{ :​pjv:​laboratoare:​2024:​pajv_l3_back4app_api.png?​700 |}}
  
pjv/laboratoare/2024/a03.1730710268.txt.gz · Last modified: 2024/11/04 10:51 by alexandru.gradinaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0