Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
GoogleEndpointsJavaOAuth/Oauth2完整示例_Java_Android_Google App Engine_Google Cloud Endpoints - Fatal编程技术网

GoogleEndpointsJavaOAuth/Oauth2完整示例

GoogleEndpointsJavaOAuth/Oauth2完整示例,java,android,google-app-engine,google-cloud-endpoints,Java,Android,Google App Engine,Google Cloud Endpoints,阅读大量链接后: 我无法解决服务器端getuser=null的问题。 我需要一个完整的示例服务器端(应用程序引擎java)和客户端(android应用程序)。 在一些链接中,人们会说:将用户保存到数据存储并将其带回。但是我不能保存用户…因为它总是空的 package com.example.ismab_000.myapplication.backend; import com.google.api.server.spi.config.Api; import com.google.api.ser

阅读大量链接后: 我无法解决服务器端getuser=null的问题。 我需要一个完整的示例服务器端(应用程序引擎java)和客户端(android应用程序)。 在一些链接中,人们会说:将用户保存到数据存储并将其带回。但是我不能保存用户…因为它总是空的

package com.example.ismab_000.myapplication.backend;

import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiNamespace;
import com.google.appengine.api.oauth.OAuthRequestException;
import com.google.appengine.api.oauth.OAuthService;
import com.google.appengine.api.oauth.OAuthServiceFactory;
import com.google.appengine.api.users.User;

import javax.inject.Named;

/**
* An endpoint class we are exposing
*/
@Api(           name = "myApi",
version = "v1",
scopes = {Constants.EMAIL_SCOPE},
clientIds = {Constants.WEB_CLIENT_ID,         Constants.ANDROID_CLIENT_ID,Constants.IOS_CLIENT_ID},
            audiences = {Constants.ANDROID_AUDIENCE},
            namespace = @ApiNamespace(ownerDomain =   "backend.myapplication.ismab_000.example.com", ownerName = "backend.myapplication.ismab_000.example.com", packagePath = ""))

public class MyEndpoint {

    User user = null;
    MyBean response = new MyBean();
    String email;

/**
 * A simple endpoint method that takes a name and says Hi back
 */

@ApiMethod(name = "sayHi")
public MyBean sayHi(@Named("name") String name) {
/*
    try {
        OAuthService oauth = OAuthServiceFactory.getOAuthService();
        user = oauth.getCurrentUser();

    } catch (OAuthRequestException e) {
        // The consumer made an invalid OAuth request, used an access token    that was
        // revoked, or did not provide OAuth information.
        // ...
        response.setData("Hola desde Metodo1, " + name);
    }

 */
    email= user.getEmail();

    //response.setData("Hi, " + name + user.getEmail().toString());
    response.setData("Hi, desde APYSAYHI...");
    return response;
}
@ApiMethod(name = "Metodo1")
public MyBean metodo1(@Named("name") String name) {

    response.setData("Hola desde Metodo1, " + name);
    return response;
}
@ApiMethod(name = "Metodo2")
public MyBean metodo2(@Named("name") String name) {

    response.setData("Hola desde Metodo2, " + name);
    return response;
}


}

注意。

为了访问用户对象,首先需要将端点配置为使用OAuth。此处有说明:

OAuth意味着您需要将项目配置为在定义API时引用的Constants对象下配置正确的客户端ID

然后需要将用户对象添加到端点方法,例如:

@ApiMethod(name = "sayHi")
public MyBean sayHi(@Named("name") String name, User user) throws OAuthRequestException, IOException {
如果传入的客户端请求没有授权令牌或无效 第一,用户为空。在代码中,您需要检查用户是否 null并根据条件执行以下操作之一:

  • 如果用户非空,则执行授权操作
  • 如果用户为null,则抛出OAuthRequestException
  • 或者,如果用户为空,则如果某种未经授权的访问被禁用,则对未经授权的客户端访问执行一些操作
    想要的

假设已生成ClientID(),请确保还更新了Constants.java中的*\u CLIENT\u ID字符串:

如果从maven原型创建项目,则值将显示如下:

public static final String WEB_CLIENT_ID = "replace this with your web client application ID";
public static final String ANDROID_CLIENT_ID = "replace this with your Android client ID";
public static final String IOS_CLIENT_ID = "replace this with your iOS client ID";
我明白了。 只需为客户端ID和WEB ID获取一个新值。 现在的问题是如何在后端获取电子邮件用户。 在端点…用户=null,但始终为example.google.com


谷歌正在努力解决这个问题。

目前,无法确定服务器端GAE的用户。谷歌在客户端获得有效的凭证,并向api发出有效的请求……但在端点端,用户总是example.gmail.com。谷歌正在努力解决获取用户的问题。