向 Node 注册 Glass Timeline 通知

aug*_*uag 5 javascript node.js google-glass google-mirror-api google-api-nodejs-client

我正在尝试使用“mirror-api-subscription”事件侦听器注册 TAKE_A_NOTE。我没有任何运气:我可以使用“我的应用程序”启动记笔记,但是,没有控制台日志表明该事件已被识别。

我想识别 TAKE_A_NOTE 函数何时发生或完成,并随后处理响应。我不知道订阅是否应该在流上,或者我是否以错误的方式实现了 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 = 要求('https')
    , fs = 要求('fs')
    , googleapis = require('googleapis')
    , OAuth2Client = googleapis.OAuth2Client;
var 应用程序 = 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('端口', 8888);
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
应用程序.use(应用程序.路由器);

var getToken = 函数 () {
    谷歌API
        .discover('镜像', 'v1')
        .execute(函数(错误,客户端){
            如果(!!错误){
                失败();
                返回;
            }

            insertContact(客户端、失败、成功);
            insertSubscription(客户端、失败、成功);
        });
    };


var insertContact = function (client, errorCallback, successCallback) {
    客户
        .mirror.contacts.insert({
            “id”:“myapp”,
            “显示名称”:“我的应用程序”,
            “优先级”:100,
            “接受命令”:[
                {“类型”:“TAKE_A_NOTE”}
            ],
            “speakableName”:“我的应用程序”
        })
        .withAuthClient(oauth2Client)
        .execute(函数(错误,数据){
            如果(!!错误)
                错误回调(错误);
            别的
                成功回调(数据);
        });
    };

var insertSubscription = function (client, errorCallback, successCallback) {
    客户端.镜像.订阅.插入({
        "callbackUrl":"https://localhost:7777/notification",
        "collection":"时间轴",
        “用户令牌”:“001”,
        "verifyToken":"秘密",
        “操作”:[“插入”]
        });
    }

    var 订阅 = require('mirror-api-subscription')(
    功能 () {
    })

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

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

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

    app.post('/通知', subscription.dispatcher())


    app.get('/', 函数 (req, res) {
        如果(!oauth2Client.credentials){
            // 生成允许离线访问并请求权限的url
            // 用于镜像 API 范围。
            var url = oauth2Client.generateAuthUrl({
                access_type: '离线',
                范围:'https://www.googleapis.com/auth/glass.timeline'
            });
            res.redirect(url);
        } 别的 {
            得到令牌();
        }
        res.write('带有 Node 的 Glass Mirror API');
        重发();

    });

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

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

    变量选项= {
        密钥: fs.readFileSync('./ssl/key.pem'),
        证书: fs.readFileSync('./ssl/cert.pem'),
    };

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

    http.createServer(app).listen(app.get('port'), function () {
        console.log('Express 服务器正在监听端口 ' + app.get('port'));
    });

Pri*_*ner 5

您的代码至少存在两个潜在问题:

  1. CallbackUrl 必须是可访问 Internet 的 HTTPS 地址。“Localhost”还不够好,因为 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”软件包和发现服务不同。然而,从它的参考文档来看,并不清楚它实际上在任何地方设置了回调,并且只是在那里验证回调并分派到执行工作的函数。