我正在使用 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 方法,我添加了一个用户参数并检查用户是否为空。我的理解是,如果从客户端 IDS 之一调用 API,则用户不应为空。但用户始终为空。
我错过了什么吗?
在我的 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)