Autore Topic: App Android - Come posso prelevare dati da internet?  (Letto 841 volte)

Offline UserPc

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
App Android - Come posso prelevare dati da internet?
« il: 24 Giugno 2017, 13:42:13 CEST »
0
App Android - Prelevare dati da internet
La domanda è un po' generica, oggi ci sono molte app, se non quasi tutte, che vengono aggiornate di continuo tramite l'uso di internet. Mi sono chiesto la procedura per far ciò e vorrei sapere il parere di alcuni che già hanno sviluppato di queste app.

Non ho trovato nulla di italiano su internet ma penso che il modo per prelevare dati da internet sia tramite pagine php con metodi GET e POST. Ma mi chiedo se questo modo è sicuro e come funziona, in quanto qualcuno potrebbe riuscire a trovare le pagine e magari integrare il nostro lavoro da qualche parte.

Ho sentito parlare anche di retrofit, anche se non ho capito bene come funziona. Magari qualcuno se la conosce può spiegarmi.

Grazie a tutti

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:App Android - Come posso prelevare dati da internet?
« Risposta #1 il: 26 Giugno 2017, 11:04:18 CEST »
+1
In linea di massima sì, puoi usare pagine PHP (o qualsiasi altro linguaggio) ed esporre i risultati tramite GET e POST.
Ma volendo puoi usare anche SOAP, o anche servizi forniti da terzi (es. FireBase). Da questo punto di vista Android fornisce primitive relativamente a basso livello, quindi tutto il lavoro va implementato (si può ovviamente ricorrere a librerie).

Per quanto riguarda la sicurezza, un must è l'uso del protocollo HTTPS, coadiuvato da meccanismi di verifica che filtrano tutte le chiamate non provenienti dalla app: puoi usare un certificato oppure un sistema di verifica con chiave pubblica/privata ad hoc.

Retrofit è una libreria che semplifica la comunicazione HTTP. Gestisce le chiamate in modo asincrono e converte i dati JSON in oggetti. Personalmente non l'ho mai utilizzata, ma se usi il formato json è un'opzione interessante da tenere in considerazione.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline UserPc

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:App Android - Come posso prelevare dati da internet?
« Risposta #2 il: 26 Giugno 2017, 13:18:34 CEST »
0
Ecco, mi vengono dei dubbi proprio sulla sicurezza. È la prima volta che sto facendo una cosa del genere e mi è subito venuto il dubbio su come fare per impedire che gli altri utilizzino le mie api e ne potrebbero apportare pure danni o malfunzionamenti. Quindi devo avere un protocollo SSL e un certificato. Su questo certificato non ho capito bene, devo acquistarlo?  e come fa a capire che quella relativa app può accedere e le altre no?
Cmq grazie per la tua risposta :)

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:App Android - Come posso prelevare dati da internet?
« Risposta #3 il: 26 Giugno 2017, 14:27:52 CEST »
+1
Il certificato non è prettamente necessario, basta una chiave asimmetrica.

L'app contatta il server chiedendo il dato X. Nella chiamata aggiunge un'intestazione Y criptata usando la chiave privata, che deve essere cablata nell'app. Il valore di Y non è strettamente importante, può essere la data/ora della richiesta.

Il server, alla ricezione della richiesta, decodifica Y usando la chiave pubblica. Se la decodifica ha esito positivo, la chiamata è stata effettuata dall'app, altrimenti è stata effettuata da una terza parte.

Di fatto questa verifica viene fatta in automatico utilizzando un certificato client, ma devo essere sincero non ho particolare dimestichezza con la gestione di questi certificati in ambito android.

In questo modo:
- HTTPS garantisce che le chiamate al server siano effettivamente gestite dal server desiderato e non, ad esempio, da un server intermediario (man-in-the-middle)
- La chiave asimmetrica garantisce che le chiamate soddisfatte siano solo quelle provenienti dalle app autorizzate.

Debolezze:
- Se questa non è memorizzata correttamente, decompilando l'app è possibile risalire alla chiave privata e quindi confezionare chiamate che si spacciano per la stessa.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline UserPc

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:App Android - Come posso prelevare dati da internet?
« Risposta #4 il: 27 Giugno 2017, 11:00:57 CEST »
0
Ok, grazie, adesso la cosa mi è più chiara :) volevo arrivare proprio al fatto che in qualche modo si potrebbe pure  capire la chiave privata e vedere pure la struttura decompilando. Ma adesso mi è più chiaro.

Offline m.caroccia83

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:App Android - Come posso prelevare dati da internet?
« Risposta #5 il: 29 Giugno 2017, 23:51:50 CEST »
0
Ci sarebbero in realtà tanti altri metodi per gestire le autorizzazioni a sfruttare una risorsa REST e quindi delle API esposte dal tuo server. Diciamo che a prescindere da tutto il protocollo HTTPS è fondamentale. Dopodicchè potresti sfruttare un metodo semplice ma funzionale: generi una chiave univoca per device magari con androidserial e lo utilizzi come token per le tue chiamate REST. Al primonaccesso memorizzi questo token lato server e rilazci le autorizzazioni richieste al client (quindi al device), gestendo questi token in un db puoi anche gestire la disattivazione, un tempo di lease, etc...quindi hai finito. Lato client ti basterà magari aggiungere nell'header questo token e laro server convalidarlo come fosse un username o password per intenderci. Spero di esseri stato d'aiuto. P.S. Se sei nuovo di queste cose ma mastichi un po di JScript ti consiglio di utilizzare lato server NodeJS + Express...

Inviato dal mio SM-G950F utilizzando Tapatalk


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:App Android - Come posso prelevare dati da internet?
« Risposta #6 il: 30 Giugno 2017, 09:13:12 CEST »
0
@m.caroccia83: Giusto, il sistema dei token è indispensabile per la gestione degli account, ma non impedisce ad un applicativo generico di accedere alle proprie API
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline m.caroccia83

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:App Android - Come posso prelevare dati da internet?
« Risposta #7 il: 01 Luglio 2017, 09:20:30 CEST »
0
@m.caroccia83: Giusto, il sistema dei token è indispensabile per la gestione degli account, ma non impedisce ad un applicativo generico di accedere alle proprie API
Certo ma si parlava di protezione...

Inviato dal mio SM-G950F utilizzando Tapatalk


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:App Android - Come posso prelevare dati da internet?
« Risposta #8 il: 03 Luglio 2017, 14:00:05 CEST »
0
Ma UserPC era interessato ad impedire l'accesso da parte di software non autorizzato:

Citazione
Ecco, mi vengono dei dubbi proprio sulla sicurezza. È la prima volta che sto facendo una cosa del genere e mi è subito venuto il dubbio su come fare per impedire che gli altri utilizzino le mie api e ne potrebbero apportare pure danni o malfunzionamenti. Quindi devo avere un protocollo SSL e un certificato. Su questo certificato non ho capito bene, devo acquistarlo?  e come fa a capire che quella relativa app può accedere e le altre no?
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.