io.grpc.StatusRuntimeException:未经授权:凭据要求通道使用PRIVACY_AND_INTEGRIY

时间:2018-07-24 11:16:31

标签: android dialogflow

我正在我的android应用中使用Dialogflow Java客户端库,以运行以下链接中给出的检测意图API。

https://github.com/dialogflow/dialogflow-java-client-v2/blob/master/samples/src/main/java/com/example/dialogflow/DetectIntentTexts.java

我稍微修改了上面链接中给出的代码,以在发送检测意图请求之前首先对客户端进行身份验证。我的示例代码如下:

SessionsSettings sessionsSettings = SessionsSettings.newBuilder().setCredentialsProvider(credentialsProvider).build();
SessionsClient sessionsClient = SessionsClient.create(sessionsSettings);
SessionName session = SessionName.of(PROJECT_ID, sessionId);
                    System.out.println("Session Path: " + session.toString());
TextInput.Builder textInput = TextInput.newBuilder().setText(text).setLanguageCode(langCode);
QueryInput queryInput=QueryInput.newBuilder().setText(textInput).build();
DetectIntentResponse response = sessionsClient.detectIntent(session, queryInput);

其中

CredentialsProvider credentialsProvider = new CredentialsProvider() {
            @Override
            public Credentials getCredentials() throws IOException {
                InputStream fileStream = appContext.getApplicationContext().getAssets().open("MyDialogflowProject-4cxxxxx.json");
                return ServiceAccountCredentials.fromStream(fileStream);
            }
        };

但是我收到以下错误

  

com.google.api.gax.rpc.UnauthenticatedException:   io.grpc.StatusRuntimeException:未经授权:要求凭据   具有PRIVACY_AND_INTEGRITY安全级别的通道。观察到的安全性   级别:无           com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:73)

在这种情况下,谁能告诉我如何设置SessionSettings的安全级别?

2 个答案:

答案 0 :(得分:0)

尝试更新您正在使用的库版本。在传输层上,应设置安全级别。

例如,我的hello world项目中的gradle依赖关系正在与dialogflow v2一起使用:

dependencies { 
    compile ("com.google.api.grpc:proto-google-common-protos:1.12.0")
    compile ("io.grpc:grpc-netty:1.14.0")
    compile ("io.grpc:grpc-protobuf:1.14.0")
    compile ("io.grpc:grpc-stub:1.14.0")
    compile ("com.google.auth:google-auth-library-oauth2-http:0.10.0")
    compile ("com.google.cloud:google-cloud-storage:1.38.0")
    compile ("io.netty:netty-tcnative-boringssl-static:2.0.12.Final")
    compile ("com.google.cloud:google-cloud-dialogflow:0.55.1-alpha")

}

答案 1 :(得分:0)

就我而言,我发现我过去已经将IntelliJ环境变量设置为FIRESTORE_EMULATOR_HOST=localhost:8080以使用Firebase模拟器。 后来,我尝试不删除该变量就将数据推送到Cloud Firestore,但是尝试失败,并显示错误PRIVACY_AND_INTEGRITY。 一段时间后,我找到了本地主机设置并将其删除。删除后,我就可以将数据推送到云中了。