Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓&x2B;应用引擎:user.getUserID()在端点中为null_Android_Google App Engine_Authentication_Google Cloud Endpoints - Fatal编程技术网

Android 安卓&x2B;应用引擎:user.getUserID()在端点中为null

Android 安卓&x2B;应用引擎:user.getUserID()在端点中为null,android,google-app-engine,authentication,google-cloud-endpoints,Android,Google App Engine,Authentication,Google Cloud Endpoints,我有一个带有GAE服务器的Android应用程序。我尝试按照developers.google.com上的描述对用户进行身份验证,我将用户参数添加到endpoint方法中,等等。我得到一个不为null的用户,但是这个方法getUserId()返回null。这与这个相当古老的问题相似: 但我仍然不知道如何解决这个问题。你如何处理这个错误?你见过它吗 在android客户端中,我做了以下工作(简化): 我还有另一个非常重要的问题:如果getMail()提供了正确的帐户,但getUserId()提供了

我有一个带有GAE服务器的Android应用程序。我尝试按照developers.google.com上的描述对用户进行身份验证,我将用户参数添加到endpoint方法中,等等。我得到一个不为null的用户,但是这个方法getUserId()返回null。这与这个相当古老的问题相似: 但我仍然不知道如何解决这个问题。你如何处理这个错误?你见过它吗

在android客户端中,我做了以下工作(简化):

我还有另一个非常重要的问题:如果getMail()提供了正确的帐户,但getUserId()提供了null,那么该用户是否经过身份验证?我读到,如果用户对象没有经过身份验证,它应该是空的,但我不确定任何更多。。。
我正在使用AppEngineSDK1.8.7。我正在部署到GAE的真实设备和后端上进行测试。

我刚才问了同样的问题,并得到了答案。见链接:


原因是appengine上有一个bug。

我想现在没有好的解决方案。我将电子邮件存储为普通属性并将其从默认获取组中删除,我将long用作主键(由AppEngine生成),并通过电子邮件属性查询实体。我不喜欢我的解决方案,如果有人能提供的话,我会接受(并实施:))一个更好的解决方案。

这是一个已知的问题,已经提交给谷歌,我已经附上了下面的问题链接

有两种解决方法(1)保存用户并从存储中读取,如果它引用的是有效的帐户,则将填充用户id(这很糟糕,因为您为每个经过身份验证的API访问支付了保存/加载/删除成本,即使它很小,而且显然是一些性能成本)和(2)您可以使用google+ID,但这与用户ID不同

这是非常令人沮丧的,目前还没有ETA,因为据我所知,他们正在处理一些关于auth设计的基本问题

请用星号为那个问题投票。你可以在这里找到所有的信息

这是目前正式批准的解决方法[(1)以上],您也可以在上面的链接中找到,但为了方便起见,可以在这里找到:


对于上面提到的解决方法(2),您可以查看第一个链接,然后转到第39页。

请给我们看一些真实的代码,好吗?当然可以,但我会在下午4点左右回家时提交我的代码。我想我现在会问我什么时候在工作,也许当我回到家,我会有答案,并能够与我自己的项目进展。。。虽然我相信我遵循了这个:和那个:漂亮的字面意思…用代码更新后。请帮忙。。。我将非常感谢任何帮助。。。
credentials = GoogleAccountCredential.usingAudience(getApplicationContext(),         "server:client_id:" + WEB_CLIENT_ID);
credentials.setSelectedAccountName(accountName);
WarriorEntityEndpoint.Builder endpointBuilder = new WarriorEntityEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credentials);
warriorEntityEndpoint = endpointBuilder.build();

new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        try {
            warriorEntityEndpoint.getWarrior().execute();
        } catch (Exception e) {
        }
        return null;
    }
}.execute();
@Api(name = "warriorEntityEndpoint", namespace = @ApiNamespace(ownerDomain = "szpyt.com", ownerName = "szpyt.com", packagePath = "mmorpg.monsters"),
version = "version1",
scopes = {"https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"},
clientIds = {Constants.ANDROID_CLIENT_ID, Constants.WEB_CLIENT_ID},
audiences = {Constants.ANDROID_AUDIENCE})
public class WarriorEntityEndpoint {
private static final Logger log = Logger.getLogger(WarriorEntityEndpoint.class.getName());
@ApiMethod(name = "getWarrior")
public WarriorEntity getWarrior(User user) throws OAuthRequestException, IOException  {
    log.log(Level.SEVERE, "this gives correct email: " + user.getEmail());
    log.log(Level.SEVERE, "this is null: " + user.getUserId());