我制作的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的东西吗?
答案 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!