Les identifiants utilisateur de Google App Engine Cloud sont null

J’utilise une solution (légèrement modifiée) de ce cours pour extraire l’ID utilisateur, qui est null si la demande a été envoyée à partir d’un client Android.

/** * This is an ugly workaround for null userId for Android clients. * * @param user A User object injected by the cloud endpoints. * @return the App Engine userId for the user. */ private static Ssortingng getUserId(User user) { Ssortingng userId = user.getUserId(); if (userId == null) { LOG.info("userId is null, so trying to obtain it from the datastore."); AppEngineUser appEngineUser = new AppEngineUser(user); ofy().save().entity(appEngineUser).now(); AppEngineUser savedUser = ofy().load().key(appEngineUser.getKey()).now(); userId = savedUser.getUser().getUserId(); LOG.info("Obtained the userId: " + userId); } return userId; } 

Bien que je ne puisse pas obtenir le userId.

 INFO: Obtained the userId: null 

Cette solution de contournement a déjà parfaitement fonctionné dans d’autres projets, le problème doit donc être ailleurs. L’API de mes points de terminaison est annotée avec les scopes, clientIds et audiences suivants:

 scopes = { Constants.EMAIL_SCOPE }, clientIds = { Constants.API_EXPLORER_CLIENT_ID, Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID }, audiences = { Constants.ANDROID_AUDIENCE } 

Constants.ANDROID_AUDIENCE et Constants.WEB_CLIENT_ID sont identiques. Je n’utilise pas de client Web, mais Google m’a dit d’append un identifiant de client Web. Cet identifiant client doit-il spécifier les origines de redirection d’URIS et javascript?

Dans mon client Android, j’utilise ce qui suit pour spécifier l’audience.

 mCredential = GoogleAccountCredential.usingAudience( EndpointService.this, "server:client_id:IDIDIDID.apps.googleusercontent.com" ); 

S’il vous plaît aidez-moi à comprendre celui-ci.

Je viens de comprendre pourquoi cette solution de contournement fonctionne. J’ai besoin de commencer une nouvelle session objectivey pour que le cache ne soit pas utilisé et que l’ID utilisateur puisse être rempli.

 Objectify objectivey = ofy().factory().begin(); AppEngineUser savedUser = objectivey.load();