2017-06-01 66 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它是我缺少的部分。我遵循這兩個鏈接,它的工作。 –

相關問題