向节点注册Glass时间线通知

我正在尝试注册TAKE_A_NOTE与“镜像API订阅”事件侦听器。 我没有任何运气:我可以启动与“我的应用程序”注意,但是,没有控制台日志,事件已被识别。

我想知道TAKE_A_NOTE函数何时发生或完成,然后处理响应。 我不知道订阅是否应该在stream中,或者如果我以错误的方式实现EventListener。 你的帮助将不胜感激。

我正在使用的代码是:

 //引用
 // http://www.recursiverobot.com/post/57348836217/getting-started-with-the-mirror-api-using-node-js
 // https://www.npmjs.org/package/mirror-api-subscription

 var express = require('express')
     ,http = require('http')
     ,https = require('https')
     ,fs = require('fs')
     ,googleapis = require('googleapis')
     ,OAuth2Client = googleapis.OAuth2Client;
 var app = express();
 var oauth2Client = new OAuth2Client(process.env.MIRROR_DEMO_CLIENT_ID,
    process.env.MIRROR_DEMO_CLIENT_SECRET,process.env.MIRROR_DEMO_REDIRECT_URL);


 //所有环境
 app.set('port',8888);
 app.use(express.logger( 'dev的'));
 app.use(express.bodyParser());
 app.use(express.methodOverride());
 app.use(app.router);

 var gotToken = function(){
     googleapis
         .discover('mirror','v1')
         .execute(function(err,client){
             if(!! err){
                失败();
                返回;
             }

             insertContact(客户端,失败,成功);
             insertSubscription(client,failure,success);
         });
     };


 var insertContact = function(client,errorCallback,successCallback){
    客户
         .mirror.contacts.insert({
             “id”:“myapp”,
             “displayName”:“myApp”,
             “优先”:100,
             “acceptCommands”:[
                 {“type”:“TAKE_A_NOTE”}
             ]
             “speakableName”:“我的应用程序”
         })
         .withAuthClient(oauth2Client)
         .execute(function(err,data){
            如果(!! err)
                 errorCallback(ERR);
            其他
                 successCallback(数据);
         });
     };

 var insertSubscription = function(client,errorCallback,successCallback){
     client.mirror.subscriptions.insert({
         “callbackUrl”: “https://开头本地主机:7777 /通知”,
         “collections”:“时间表”,
         “userToken”: “001”
         “verifyToken”: “秘密”,
         “操作”:[ “插入”]
         });
     }

     var subscription = require('mirror-api-subscription')(
     function(){
     })

     subscription.on( '#个位置更新',
    函数(通知,用户,有效载荷){
       console.log('用户%s的位置已更新',user.id)
     })

     subscription.on( '#时间表INSERT:推出',
    函数(通知,用户,有效载荷){
       console.log('订阅时间线#INSERT:LAUNCH')
     })

     subscription.on( '#时间表UPDATE:自定义',
    函数(通知,用户,有效载荷){
         console.log('订阅时间线#更新:自定义')
     })

     app.post('/ notification',subscription.dispatcher())


     app.get('/',function(req,res){
        如果(!oauth2Client.credentials){
             //生成允许离线访问并请求权限的url
             //用于镜像API范围。
             var url = oauth2Client.generateAuthUrl({
                 access_type:'离线',
                范围:“https://www.googleapis.com/auth/glass.timeline”
             });
             res.redirect(URL);
         } else {
             gotToken();
         }
         res.write('Glass Mirror API with Node');
        重发();

     });

     app.get('/ oauth2callback',function(req,res){
         //如果我们能够获取令牌,则将用户redirect回主页面
         grabToken(req.query.code,失败,function(){
             res.redirect( '/');
         });
     });

     app.post('/ reply',function(req,res){
        的console.log( '回答',REQ);
        重发();
     });

     var options = {
         key:fs.readFileSync('./ ssl / key.pem'),
         cert:fs.readFileSync('./ ssl / cert.pem'),
     };

     https.createServer(options,app).listen(7777,function(){
         console.log('7777上的'https');
     });

     http.createServer(app).listen(app.get('port'),function(){
         console.log('Express server listen on port'+ app.get('port'));
     }); 

你的代码至less有两个潜在的问题:

  1. callbackUrl必须是可上网访问的HTTPS地址。 “本地主机”不够好,因为Google的服务器需要能够解决它。 您可以提供IP地址,如果您有公共IP地址,或使用隧道。

  2. 对于调用client.mirror.subscriptions.insert()的结果,你什么都不做。 通常情况下,应该调用它与调用client.mirror.contacts.insert()方法相同,该方法使用withAuthClient()execute()链接它。 如果您希望向“镜像”服务注册,则需要调用execute() 。 有关“googleapis”包和发现服务的文档,请参阅https://github.com/google/google-api-nodejs-client/

  3. 可能与#2有关,但我不熟悉require('mirror-api-subscription')包含的包,它似乎处理的事情与它提供的“googleapis”包和发现服务不同。 但是,从参考文档来看,它并不清楚它是否真的在任何地方设置了callback,并且只是在那里validationcallback并派遣到执行工作的函数。

 var insertSubscription = function (client, errorCallback, successCallback) { client.mirror.subscriptions.insert({ "callbackUrl":"https://mirrornotifications.appspot.com/forward?url=callbackURL", "collection":"timeline", "userToken":"001", "verifyToken":"secret", "operation":["INSERT"] }).withAuthClient(oauth2Client).execute(function (err, data) { if (!!err) errorCallback(err); else successCallback(data); }); };