0

我正在使用我的网络应用程序中的 userEvents.write 方法。我发送了一个如下所示的 JSON 请求,其中包含从gcloud auth application-default print-access-token命令获取的 Authorization 标头。

{
  "eventType": "detail-page-view",
  "visitorId": "xxxxxxxxxx.xxxxxxxxxxxx",
  "eventTime": "2021-03-06T09:13:58+09:00",
  "experimentIds": [
    "Gie-xxxxxxxxxxxxxxxxxxxxxxxx"
  ],
  "userInfo": {
    "userId": "",
    "ipAddress": "xxx.xxx.xxx.xxx",
    "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.181 Mobile Safari/537.36",
    "directUserRequest": false
  },
  "uri": "https://xxxxx.net/aaaaaa/item/196160",
  "referrerUri": "https://xxxxxxxx.net/item/196160",
  "productDetails": [
    {
      "product": {
        "id": "196160"
      }
    }
  ]
}

请求网址是这样的。 https://retail.googleapis.com/v2/projects/{PROJECT_NUMBER}/locations/global/catalogs/default_catalog/userEvents:write

在大多数情况下,它进展顺利。但是,有时会在下面返回错误。

 {
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.googl
e.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

此错误在应用程序重启后不再出现,几天后再次出现。为什么会出现这个错误?我该如何解决?

4

1 回答 1

0

我相信用于身份验证方法的应用程序默认凭据在您运行应用程序时没有获得正确的凭据。

可能无法正常工作的原因是访问令牌的生命周期有限。正如您所说,错误会在一段时间后出现,最可能的解释是您的令牌已过期,您需要刷新它。

如果您的应用程序需要在单个访问令牌的生命周期之外访问 Google API,它可以获得刷新令牌。刷新令牌允许您的应用程序获取新的访问令牌。

查看官方文档以获取 OAuth 2.0 访问令牌以及如何为不同的语言配置它。

于 2021-03-31T08:08:40.177 回答