Motore di Google App basato su Java, Android e authentication oauth2

Autenticazione e motore di app, c'è molto da leggere su di esso, ma pare parecchio obsoleto!

Anche le pagine google https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls

  • Android Studio: Android Manifest non esiste o ha un tag di root non corretto
  • Android consumabili: "già possiede quel elemento" ma inventory.hasPurchase () è falso
  • Come implementare un android: background che non si estende?
  • Come utilizzare i marcatori di inizio e fine linea in regex per Java String?
  • Shader per Android OpenGL ES
  • Come rimuovere tutte le chiamate da un gestore?
  • Qui si parla di "GoogleAccountCredential.usingAudience", ma al giorno d'oggi, dovresti usare GoogleAuthUtil (per quanto ne so, corregga se mi sbaglio).

    Sto cercando di installare un motore di app come backend della mia applicazione Android (e in futuro, la mia applicazione iOS).

    Sto usando Android Studio, ho usato il nuovo module e ho scelto il motore di app con la messaggistica in cloud.

    Ho creato un semplice endpoint e ho una function, ecco un codice:

    public class ReviewEndpoint { // Make sure to add this endpoint to your web.xml file if this is a web application. private static final Logger LOG = Logger.getLogger(ReviewEndpoint.class.getName()); /** * This method gets the <code>Review</code> object associated with the specified <code>id</code>. * @param id The id of the object to be returned. * @return The <code>Review</code> associated with <code>id</code>. */ @ApiMethod(name = "getReview") public Review getReview(@Named("id") Long id) { // Implement this function Review r = new Review(); r.setData("test!"); 

    Come potete vedere, questo è ben generato da Android Studio. Ho implementato alcuni stuf come creare l'object 'review' e restituirlo alla fine.

    Sul lato Android, posso farlo:

     ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null); ReviewEndpoint ep = b.build(); Review review = ep.getReview(1L).execute(); data = review.getData(); 

    e sì, ottengo 'prova!' 🙂

    Ora, voglio avere questo autenticato. Voglio sapere quale utente ha scritto ciò, quindi ho pensato di utilizzare l'account GMail e Facebook più tardi.

    Qui sono bloccato. Sono in grado di get un token dall'utente su Android:

     token = GoogleAuthUtil.getToken(MainScreenActivity.this, mAccount.name, "oauth2:https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.profile"); 

    allora puoi aggiungere questo token come credenziale alla richiesta:

     Credential cr = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(token); ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), cr); 

    Poi nel motore dell'applicazione ho cercato di get le informazioni sugli utenti, ma come? Sarà fornito come "porttore"? Come posso get questo token porttore? Devo quindi fare richiesta API per get i dati sul server?

    questo non funziona:

     OAuthService service = OAuthServiceFactory.getOAuthService(); try { User user = service.getCurrentUser(); 

    qualcuno può dirmi una testa?

  • Grafici per Android
  • Come modificare il colore di text della voce di menu in Android?
  • Imansible aggiornare Android Studio - Accesso negato e java.io.FileNotFoundException
  • Eccezione: android.view.InflateException: file binario di file XML # 2: errore di gonfiaggio della class android.support.v7.widget.CardView
  • GcmListenerService.onMessageReceived () non viene chiamato
  • Invio di Amazon SNS dal mio server PHP
  • One Solution collect form web for “Motore di Google App basato su Java, Android e authentication oauth2”

    Così finalmente, oggi, ho scoperto come farlo! Ho avuto domande su Stackoverflow su questo prima e non ho mai avuto una risposta, ma questi ai siti mi hanno dato la risposta:

    https://developers.google.com/appengine/docs/java/endpoints/auth

    https://developers.google.com/appengine/docs/java/endpoints/consume_android

    La prima mostra ciò che deve essere fatto sul lato dell'applicazione. La seconda pagina vi dirà come get le credenziali. Ero molto vicino. Non sono sicuro se la regolazione del file build.gradle citata nel secondo collegamento è necessaria. Quello che ho aggiunto al motore App:

     @Api(name = "reviewEndpoint", version = "v1", ...<<some more stuff here >> scopes = {Constants.EMAIL_SCOPE}, clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID}, audiences = {Constants.ANDROID_AUDIENCE}) 

    e poi get le credenziali:

     // Initialize the scope using the client ID you got from the Console. final String scope = "server:client_id:" + Constants.WEB_CLIENT_ID; credential = GoogleAccountCredential.usingAudience(activity,scope); 

    Devi aggiungere l'indirizzo e-mail dell'utente:

     credential.setSelectedAccountName("some-mail-address@gmail.com"); 

    è ansible get l'indirizzo di posta elettronica utilizzando il selezionatore di account (anche esempio mostrato quando si segue il collegamento)

    e poi. si effettua una chiamata all'endpoint, utilizzando la credenziale, penso che Play Services validation l'utente, perché se utilizzo un messaggio di posta elettronica non registrato sul dispositivo, non funziona. Il seguente codice lancerà un GoogleAuthIOException:

     ReviewEndpoint.Builder b = new ReviewEndpoint.Builder( AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), id_token); ReviewEndpoint ep = b.build(); Review review; review = ep.getReview(1L).execute(); 

    per il test, ho messo l'indirizzo di posta elettronica che ho ricevuto sul lato server come una string nell'object di riesame e mi ha dato l'indirizzo di posta elettronica invece che l'object utente fosse nullo. Ahi! Ho dimenticato di dirti, hai bisogno di un argomento utente sul lato dell'applicazione. Anche se non si vede l'argomento "utente" nella chiamata "getReview" sopra, verrà aggiunto da App Engine.

    Così è così che il mio getReview guarda adesso:

     @ApiMethod(name = "getReview") public Review getReview(@Named("id") Long id, User user) { // Implement this function Review r = new Review(); r.setData("user == " + (user == null ? "NULL " : user.toString())); 

    Spero che questo aiuterà qualcuno

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.