加载Google+ JS客户端时,为什么会出现“无效的gadgets.rpc令牌”错误?

时间:2013-07-11 14:09:53

标签: javascript google-plus

我希望能够使用以下JS代码拨打Google+电话:

    gapi.client.plus.people.get({"userId": "me"});

在我的HTML中,我加载了以下JS源:

    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[our maps api key]&sensor=true"></script>
    <script type="text/javascript" src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="biketracker.js"></script>
    <script type="text/javascript" src="https://apis.google.com/js/client.js?onload=onGoogleJsClientLoaded"></script>

在biketracker.js中,我也在对Google JS进行异步加载:

(function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();

加载Google JS客户端源时的回调然后加载其他三个Google API:

function onGoogleJsClientLoaded() {
    console.log("onGoogleJsClientLoaded()");

    gapi.client.load("biketracker", "v1", onBikeTrackerApiLoaded, endpointsRoot);
    gapi.client.load("oauth2", "v2", onOAuth2Loaded);
    gapi.client.load("plus", "v1", onGooglePlusClientLoaded);
}

其中第一个并非真正的Google API,而是我们在App Engine上托管开发的Google Endpoints API。忽略它。 OAuth2加载得很好。但是,Plus API给了我这些错误:

Invalid gadgets.rpc token. 2006255737 vs 542328210
Uncaught Error: m`apiproxy6892d048ac55f727a04aed9791f4e586b15e69860.4984859501703547

我找不到其他人有同样的错误。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您使用的是Google+登录,+1按钮还是各种徽章?如果您没有使用这些功能(尽管您可能应该使用社交应用程序),那么您不需要plusone.js:Google客户端库是API访问所需的,如果定义了gapi.client,您应该是能够毫无问题地加载Google+客户端库。要对此进行测试,您可以看到gapi.client.plus ...是否存在,如果存在,您可以访问Google+端点!

如果您使用的是Google+登录,则不应在自己的JS模块中执行Google API脚本的异步加载。由于超出此答案范围的原因,必须在全局范围内初始化JavaScript Google客户端库使用的某些JavaScript代码。这是导致错误的第二大可能原因。

这些错误可能不会导致您网站上的错误。 plusone.js脚本用于在屏幕上呈现各种小部件,例如Google+登录按钮,并且最有可能是您遇到的RPC错误的罪魁祸首。有时候,API可能会在第一次加载时失败,只要按钮按预期呈现就可以了。

您可能遇到客户图书馆或Google+图书馆相互竞争的竞争条件。除了plusone.js之外,尝试包括client.js你的异步加载函数,并在脚本加载时添加你的回调:

<script type="text/javascript">
(function() {
  var po = document.createElement('script');
  po.type = 'text/javascript'; po.async = true;
  po.src = 'https://plus.google.com/js/client:plusone.js?onLoad=onGoogleJsClientLoaded';
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(po, s);
})();