Google Natural Language API は昨日まで私の iOS アプリで動作していました。今朝の時点で、API は「許可が拒否されました」というエラーを返し始めました。例えば:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
リクエストの例:
POST /v1/documents:analyzeEntities?key=..... HTTP/1.1
Host: language.googleapis.com
Content-Type: application/json
Connection: keep-alive
X-Ios-Bundle-Identifier: .....
Accept: */*
Accept-Language: en-us
Content-Length: 291
Accept-Encoding: gzip, deflate
User-Agent: CardScanner/1 CFNetwork/808.2.16 Darwin/15.6.0
{"encodingType":"UTF8","document":{"type":"PLAIN_TEXT","content":"....."}}
アカウントの請求が有効になっています (残高は $0)。アカウントの試用期間も残り 36 日です。
キーは、Google Cloud Platform API ダッシュボードの値と一致します。また、キーを再生成して、アプリで新しいキーを使用しようとしました。
また、iOS デバイスのキー制限を有効にして、アプリ バンドル識別子を含む「X-Ios-Bundle-Identifier」ヘッダーを含めてみました。
このアプリは、問題なく動作する Google Vision API も使用します。Vision API の呼び出しは、主要な制限の変更に対応します。
デモ ページから呼び出しを行うと、パーミッション エラー メッセージも表示されます。ただし、 API Explorerからの呼び出しは機能します。
編集:
エラーは、製品 Web ページのデモでも発生しています。Charles でエラーをトレースすると、Web ページに返される同じ「アクセス許可が拒否されました」という応答が示されます。
編集:
以下は、デモ ページからキャプチャされた HTTP 要求と応答の例です。リクエストと結果のエラーは、私のアプリが http 1 を使用しているのに対し、デモが http 2 を使用しているように見えることを除いて、私のアプリとほとんど同じです。
HTTP リクエスト:
:method: POST
:authority: language.googleapis.com
:scheme: https
:path: /v1/documents:analyzeEntities?key=.....
content-length: 250
origin: https://cloud.google.com
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
content-type: text/plain;charset=UTF-8
accept: */*
referer: https://cloud.google.com/natural-language/
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.8
{"document":{"type":"PLAIN_TEXT","content":"Google, headquartered in Mountain View, unveiled the new Android phone at the Consumer Electronic Show. Sundar Pichai said in his keynote that users love their new Android phones."},"encodingType":"UTF16"}
HTTP 応答:
:status: 403
vary: Origin
vary: X-Origin
vary: Referer
content-type: application/json; charset=UTF-8
content-encoding: gzip
date: Sun, 26 Feb 2017 14:52:24 GMT
server: ESF
cache-control: private
content-length: 128
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
access-control-allow-origin: https://cloud.google.com
access-control-expose-headers: content-encoding,date,server,content-length
alt-svc: quic=":443"; ma=2592000; v="35,34"
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
