将对Google云端点的访问权限限制为Android应用

时间:2013-07-26 05:59:49

标签: android android-studio google-cloud-endpoints

我正在使用Android Studio为Android应用生成Google Cloud Endpoints。我已经部署了端点,它们工作正常。

我想要实现的是仅对我的应用程序启用对端点的访问。所有文档都讨论了如何为用户启用身份验证,但我只需要限制从我的应用程序访问端点。我不想使用用户凭据,因为api不使用它。

我尝试在Google控制台中为我的应用创建客户端ID并添加到APi注释

@Api(name = "messageEndpoint", clientIds = {Ids.WEB_CLIENT_ID, Ids.ANDROID_CLIENT_ID, Ids.API_EXPLORER}, audiences = {Ids.ANDROID_AUDIENCE}}

对于每个API方法,我添加了一个User参数并检查用户是否为null。我的理解是,如果从其中一个客户端IDS调用API,则用户不应为null。但是用户总是为空。

我错过了什么吗?

在我的Android应用中,我有

GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(DelegateActivity.this, "server:client_id:" + Ids.ANDROID_AUDIENCE);
MessageEndpoint.Builder endpointBuilder = new MessageEndpoint.Builder(
                        AndroidHttp.newCompatibleTransport(), new JacksonFactory(),
                        credential);

我得到的例外是:

java.lang.NullPointerException: [qi] accountName cannot be null.
                        E   at android.os.Parcel.readException(Parcel.java:1431)
                        E   at android.os.Parcel.readException(Parcel.java:1379)
                        E   at com.google.android.gms.internal.a$a$a.a(Unknown Source)
                        E   at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
                        E   at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
                        E   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:277)
                        E   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:301)
                        E   at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:854)
                        E   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
                        E   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
                        E   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)

1 个答案:

答案 0 :(得分:0)

我的理解是,在您描述的情况下,用户将为null:验证应用程序而不是用户。

如果应用验证失败,则甚至不会调用您的终端。

我假设字符串“[qi] accountName不能为空”。来自你的应用程序?