android-NestDK坚持使用pincode

时间:2014-12-09 22:26:45

标签: nest-api

我正在试图弄清楚如何将我的NestDK应用程序连接到嵌套API。 用我的用户名和密码登录后,我得到一个“使用此Pincode连接Nest.XXXXXX”。我应该怎么做呢? 我期望access_token请求在后台发生,但我被困在这个页面上。

我将REDIRECT_URL设置为https://api.home.nest.com/oauth2/access_token?client_id=[myClientId]&code=AUTHORIZATION_CODE&client_secret=[myClientSecret]&grant_type=authorization_code

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:5)

我最终发现了我的错误。

REDIRECT_URL将在nest开发者网站的客户注册页面中设置,而不仅仅在Constants.java中设置。

我将http://localhost/放在两个位置,它立即起作用。

答案 1 :(得分:0)

我自己也在讨论这个话题。在花了很多时间查看文档后,我意识到需要PIN才能获得授权码。这是一个单独的请求。您只需为每个引脚发出一次。 (实际上,似乎你只能拨打一次电话,所以保存来自呼叫的输出。)

您可以使用CURL(在文档中)或通过对身份验证服务器的REST调用在终端中执行此操作。我已经提供了一个我在Google Script中成功使用的javascript版本:



/**
 * This only works once for each PIN generation. Subsequent calls will fail.
 * @param {String} user_pin the pin generated from the website
 */
function getNESTAuthorization(user_pin) {
  var client_id = 'put your client id here';
  var client_secret = 'put your client secret here';
  // var user_pin = 'this is the pin you got from setting up the connection'

  var theURL =
    'https://api.home.nest.com/oauth2/access_token?code=' + user_pin +
    '&client_id=' + client_id +
    '&client_secret=' + client_secret +
    '&grant_type=authorization_code';

  var options = {
    "method": "post",
    "payload": ""
  };

  var resp = UrlFetchApp.fetch(theURL, options); // return is a JSON string
  eval('var answer = ' + resp.getContentText());

  Logger.log(answer.access_token); // This is the unbelievably long authentication token
         // you need this for subsequent calls. 

  return answer.access_token;

}




使用OAuthConfig结构可能有一些很酷的方法可以做到这一点,但我还没有完成那个。