2017-06-01 73 views
1

我不熟悉Google App Engine,我试图制作第一个引擎并将其连接到我的Android应用程序。我曾经使用过此教程为了走学习一下吧:仅限我的端点访问我的Android应用程序

https://cloud.google.com/endpoints/docs/frameworks/legacy/v1/java/helloendpoints-android-studio

我得到它的工作的罚款。我可以从我的android应用程序访问我的应用程序引擎,并获得想要的响应。问题是,我想限制我的API的端点到我的应用程序的用户只。

这是我的API方法(从教程中),至于现在,只要他们登录到任何Google帐户,每个人都可以访问我的api的资源管理器并执行其中的方法。

我希望用户能够只从我的应用程序执行此方法。

这是我的应用程序引擎的Java文件:

package com.example.Barda.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.api.server.spi.response.UnauthorizedException; 
import com.google.appengine.api.users.User; 

import javax.inject.Named; 

/** 
* An endpoint class we are exposing 
*/ 
@Api(

     name = "myApi", 
     version = "v1", 
     clientIds = {Constants.ANDROID_CLIENT_ID}, 
     audiences="firebase-wiki-race.appspot.com", 
     namespace = @ApiNamespace(
       ownerDomain = "backend.myapplication.Barda.example.com", 
       ownerName = "backend.myapplication.Barda.example.com", 
       packagePath = "" 
     ) 

) 
public class MyEndpoint { 
    /** 
    * A simple endpoint method that takes a name and says Hi back 
    */ 
    @ApiMethod(name = "sayHi") 

    public MyBean sayHi(@Named("name") String name) throws UnauthorizedException { 

     // if (user == null) throw new UnauthorizedException("User is Not Valid"); 

     MyBean response = new MyBean(); 
     response.setData("Hi, " + name); 
     return response; 
    } 

} 

这是常量类:

package com.example.Barda.myapplication.backend; 

/** 
* Contains the client IDs and scopes for allowed clients consuming your API. 
*/ 
public class Constants { 
    public static final String ANDROID_CLIENT_ID = "*********************.apps.googleusercontent.com"; 

} 

我已经用我的应用程序的SH-1和包名的ANDROID_CLIENT_ID产生。


我已经在网上搜索了很多,并且阅读了博客和主题,但是我无法让它工作。这是一个可能的事情吗?我究竟做错了什么?

回答

0

您需要按照文档指南adding authorization to the API backend。在此过程中,您可以定义授权使用您的端点的客户端列表。

一旦完成,您可以按照来自Android的making authenticated calls指南。

+0

我是否必须使用已认证的呼叫才能允许来自我的应用的呼叫?我已阅读您发送的第一个链接,并且它在我的代码中。你确定第二个链接对于我想要做的事情是必要的吗? 此外,在第一个链接中写道:“对于Android应用程序,您必须在clientIds中提供其Android客户端ID和Web客户端ID”,但我没有Web客户端,只有Android应用程序。 –

+0

是的,限制访问API的唯一方法是使用一种认证形式。这就是说你可以[创建服务帐户](https://cloud.google.com/iam/docs/creating-managing-service-accounts)并使用私钥对其进行身份验证(https:// cloud。 google.com/iam/docs/creating-managing-service-account-keys)。第二个链接中的代码只是举例说明了如何进行认证呼叫。最后,您需要在Android Audience的Android版本之上创建一组Web Client凭据,这是必需的。 –

+0

我不知道我的Web客户端ID是什么,但我在这里找到了答案:https://stackoverflow.com/a/34158187/7483311它是我缺少的部分。我遵循这两个链接,它的工作。 –

相关问题