2016-09-23 49 views
2

I set up服务帐户并下载凭据json文件。PERMISSION_DENIED使用Google自然语言API

GoogleNLSample-479e92642552.json 

代码:

InputStream is = getAssets().open("GoogleNLSample-479e92642552.json"); 
GoogleCredential credential = GoogleCredential.fromStream(is).createScoped(CloudNaturalLanguageAPIScopes.all()); 
languageApi = new CloudNaturalLanguageAPI.Builder(new NetHttpTransport(), 
       jacksonFactory, new HttpRequestInitializer() { 
       @Override 
       public void initialize(HttpRequest request) throws IOException { 
       }) 
       .setApplicationName(APPLICATION_NAME).build(); 

AnalyzeEntitiesRequest request = 
        new AnalyzeEntitiesRequest() 
          .setDocument(new Document().setContent(text).setType("PLAIN_TEXT").setLanguage("en")) 
          .setEncodingType("UTF8"); 
final CloudNaturalLanguageAPI.Documents.AnalyzeEntities analyze = languageApi.documents().analyzeEntities(request); 

//Exception here 
AnalyzeEntitiesResponse response = analyze.execute(); 

堆栈跟踪:

09-23 21:43:27.897 32562-677/com.sample.android W/System.err: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: { 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: "code" : 403, 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: "errors" : [ { 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err:  "domain" : "global", 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err:  "message" : "The request cannot be identified with a client project. Please pass a valid API key with the request.", 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err:  "reason" : "forbidden" 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: } ], 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: "message" : "The request cannot be identified with a client project. Please pass a valid API key with the request.", 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: "status" : "PERMISSION_DENIED" 
09-23 21:43:27.897 32562-677/com.sample.android W/System.err: } 

enter image description here

{ 
    "type": "service_account", 
    "project_id": "***********", 
    "private_key_id": "***********", 
    "private_key": "-----BEGIN PRIVATE KEY-----\n***********\n-----END PRIVATE KEY-----\n", 
    "client_email": "***********", 
    "client_id": "***********", 
    "auth_uri": "***********", 
    "token_uri": "***********", 
    "auth_provider_x509_cert_url": "***********", 
    "client_x509_cert_url": "***********" 
} 
+0

只是为了确认,你已经注册你的APP在谷歌开发者控制台?这个错误与您的API密钥相关,所以或者您没有发送您的密钥或您的密钥用于另一个API –

+0

@LucasQueirozRibeiro我注册了API密钥,但在哪里使用它?检查有问题的屏幕截图。谢谢。 –

+0

我从来没有专门使用这个API,但我想你是从Json('GoogleCredential.fromStream(is)')获取你的api。在其他API中,我声明清单中的键为'元数据',客户自动选择如下:'mGoogleApiClient = new GoogleApiClient.Builder(getContext()) .addApi(Places.GEO_DATA_API) .build() ;' –

回答

2

我会建议测试自然语言API here的快速入门步骤。更具体地讲,你应该首先确保:

  • 计费启用
  • 自然语言的API是enabled

你已经做了一些测试,卷曲后,就可以开始尝试Java

但是请注意,API密钥和服务帐户凭证之间存在差异。有关差异的深入说明,请参阅here。基本上,API密钥不在JSON文件中,它只是提供另一种/更简单的方式与API进行交互。

编辑: 正如@指出阿奇 - BPGC也有一条线在initialize丢失:回调credential.initialize(request);

+0

你可以在哪里进行测试? – Fematich

+1

其实我错过了initialize回调'credential.initialize(request);'这就解决了这个问题。请将这添加为你的答案。谢谢。 –

+0

感谢您的更新! – Fematich