从GAE开发服务器使用Firestore时出现UNAUTHENTICATED异常

时间:2017-10-25 13:55:12

标签: android google-app-engine google-cloud-endpoints google-cloud-firestore

我制作的Android应用程序使用Cloud Endpoints Framework作为后端API。我正在使用App Engine开发服务器测试后端。在其中一个后端函数中,我尝试调用从Firestore数据库获取文档,但是我收到此错误:

  

com.google.api.server.spi.SystemService invokeServiceMethod   严重:调用后端方法时发生异常   java.util.concurrent.ExecutionException:io.grpc.StatusRuntimeException:UNAUTHENTICATED   在com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:500)   在com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:479)   在com.google.api.core.AbstractApiFuture.get(AbstractApiFuture.java:57)   ...

我相信我已正确设置服务帐户。我将环境变量GOOGL_APPLICATION_CREDENTIALS设置为服务帐户密钥的路径。我还按照实例化和调用Firestore的指南进行操作:

import com.google.cloud.firestore.Firestore;
import com.google.cloud.firestore.FirestoreOptions;
FirestoreOptions firestoreOptions =
FirestoreOptions.getDefaultInstance().toBuilder()
   .setProjectId(projectId)
   .build();
Firestore db = firestoreOptions.getService();
db.collection(collectionId).get().get();

我在这里找不到能够从GAE呼叫Firestore的东西吗?

1 个答案:

答案 0 :(得分:2)

在与这个问题斗争了一段时间之后,我顺便找到了一个临时的解决方法。似乎db确实尚未经过身份验证,并且在获取服务以获取请求元数据后添加调用似乎会触发身份验证...

Firestore db = firestoreOptions.getService();

try {
  // somehow without this it does not work on the local server
  db.getOptions().getCredentials().getRequestMetadata();
} catch (IOException e) {
  e.printStackTrace();
}

... // db access works on local server!