2014-11-07 39 views
8

nolu bir kullanıcı (istekte bulunulduysa), bir Android istemcisinden istek gönderildiyse, userId öğesini getirmek için bu (course) ((az değiştirilmiş) bir geçici çözüm kullanıyorum.Google App Engine Cloud Bitiş Noktaları userId,

/** 
* 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 String getUserId(User user) { 
    String 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; 
} 

Kullanıcı kimliğini alamamasına rağmen.

INFO: Obtained the userId: null 

Bu geçici çözüm, diğer projelerde çok iyi çalışmış olduğundan sorun başka bir yerde olmalıdır. Benim bitiş noktaları api aşağıdaki kapsamları, clientId'ler ve izleyiciler ile açıklamalı edilir:

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 ve Constants.WEB_CLIENT_ID aynıdır. Bir web istemcisi kullanmıyorum, ancak bir web istemcisi kimliği eklemek için Google told me kullanıyorum. Bu istemci kimliğinin yönlendirme URL'leri ve javascript kökleri belirtilmiş mi?

Android istemcimde, kitleyi belirtmek için aşağıdakileri kullanıyorum.

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

Lütfen bunu düzeltmeme yardım edin.

+0

Google uç noktası, uç noktada oluşturulmuş olanı gönderir, yani, userid ilk etapta google son noktaya ayarlamamaktadır. –

+0

özür dilerim, anlamıyorum. – raptor

cevap

0

Bu geçici çözümün neden işe yaradığını anladım. Önbellek kullanılmadığından ve userId'nin doldurulabilmesi için yeni bir nesneleme oturumu başlatmam gerekiyor.

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