确定 Google 地图 API 在运行时是否使用了无效密钥

Determine if Google Maps API is using an invalid key during runtime

本文关键字:无效 密钥 是否 运行时 Google 地图 API 确定      更新时间:2023-09-26

我正在寻找一种方法来确定是否正在使用有效的谷歌地图API密钥。使用无效密钥时,我们会收到一条错误消息,指出谷歌 API 已被禁用。我想捕获该返回值,并确定是否根据该返回值执行地理编码函数。

就目前而言,当我们保存记录时,我们会查看地址是否已更改。如果有,我们将获取该地址的地理编码,并在成功/失败消息传回后,在保存记录之前继续处理。

禁用 API 后,代码将停止。什么都不返回 - 没有成功或失败。在这一点上,我们的代码停止了,因为我们依赖于返回,所以我们知道从那里开始。我们不是在寻找绕过许可的方法,只是在寻找一种确定 API 是否在运行时被禁用的方法。有什么想法吗?

我在 Web> Maps JavaScript API> Events(标题为"侦听身份验证错误")中找到了一些东西

如果要以编程方式检测身份验证失败(对于 示例自动发送信标)您可以准备回调 功能。如果定义了以下全局函数,它将是 身份验证失败时调用。

所以你只需要定义一个全局函数:

function gm_authFailure() { /* Code */ };
不幸的是,

没有实现的选项来检测禁用的 API。

去年我提出了一个功能请求,但我认为不会有什么事情发生。

两种可能的选项(可能还有更多):

  1. 当你使用地图时,通常API首先会尝试创建地图(一些元素将被添加到map容器中)。禁用 API 时,将删除这些元素。因此,当发生这种情况时,您可以执行某些操作(例如,设置一个指示禁用状态的变量):

     document.getElementById('map-canvas')//map-container
      .addEventListener ('DOMNodeRemoved', function(e){
          if(!this.children.length){
            alert('the API has been disabled');
            if(window.google && window.google.maps){
              window.google.maps.disabled=true;
            }
          }
        }, false);
    
  2. 重写 alert -方法以截获特定消息:

    (function(f){
      window.alert=function(s){
        if(s.indexOf('Google has disabled use of the Maps API for this application.')
           ===0){
          if(window.google && window.google.maps){
            window.google.maps.disabled=true;
            alert('the API has been disabled');
            return;
          }
        }
        f(s);
      }
    })(window.alert)
    

在这两种情况下,您以后都可以使用 google.maps 的(自定义)disabled -属性来检查 API 是否已禁用:

if(google.maps.disabled===true){
  //execute alternative code
}