首页 文章

使用节点注册Glass Timeline通知

提问于
浏览
2

我正在尝试使用'mirror-api-subscription'事件监听器注册TAKE_A_NOTE . 我没有运气:我可以用“我的应用程序”启动记录,但是,没有控制台记录事件已被识别 .

我想知道TAKE_A_NOTE函数何时发生或完成,然后处理响应 . 我不知道订阅是在流上还是以错误的方式实现EventListener . 非常感谢您的帮助 .

我正在使用的代码是:

// references
// 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);


// all environments
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) {
                failure();
                return;
            }

            insertContact(client, failure, success);
            insertSubscription(client, failure, success);
        });
    };


var insertContact = function (client, errorCallback, successCallback) {
    client
        .mirror.contacts.insert({
            "id": "myapp",
            "displayName": "myApp",
            "priority": 100,
            "acceptCommands": [
                {"type": "TAKE_A_NOTE"}
            ],
            "speakableName":"my app"
        })
        .withAuthClient(oauth2Client)
        .execute(function (err, data) {
            if (!!err)
                errorCallback(err);
            else
                successCallback(data);
        });
    };

var insertSubscription = function (client, errorCallback, successCallback) {
    client.mirror.subscriptions.insert({
        "callbackUrl":"https://localhost:7777/notification",
        "collection":"timeline",
        "userToken":"001",
        "verifyToken":"secret",
        "operation":["INSERT"]
        });
    }

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

    subscription.on('locations#UPDATE',
    function (notification, user, payload) {
      console.log('location of user %s updated', user.id)
    })

    subscription.on('timeline#INSERT:LAUNCH',
    function (notification, user, payload) {
      console.log('subscription timeline#INSERT:LAUNCH')
    })

    subscription.on('timeline#UPDATE:CUSTOM',
    function (notification, user, payload) {
        console.log('subscription timeline#UPDATE:CUSTOM')
    })

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


    app.get('/', function (req, res) {
        if (!oauth2Client.credentials) {
            // generates a url that allows offline access and asks permissions
            // for Mirror API scope.
            var url = oauth2Client.generateAuthUrl({
                access_type: 'offline',
                scope: 'https://www.googleapis.com/auth/glass.timeline'
            });
            res.redirect(url);
        } else {
            gotToken();
        }
        res.write('Glass Mirror API with Node');
        res.end();

    });

    app.get('/oauth2callback', function (req, res) {
        // if we're able to grab the token, redirect the user back to the main page
        grabToken(req.query.code, failure, function () {
            res.redirect('/');
        });
    });

    app.post('/reply', function(req, res){
        console.log('replied',req);
        res.end();
    });

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

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

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

2 回答

  • 3
    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);
        });
    };
    
  • 0

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

    • callbackUrl必须是可通过Internet访问的HTTPS地址 . “Localhost”不够好,因为Google的服务器需要能够解决它 . 如果您有公共IP地址,则可以提供IP地址,或使用隧道 .

    • 您对 client.mirror.subscriptions.insert() 的调用结果没有任何操作 . 通常,您应该像调用 client.mirror.contacts.insert() 一样调用它,这是用 withAuthClient()execute() 链接它 . 如果您希望它注册镜像服务,则需要调用 execute() . 有关"googleapis"包和发现服务的文档,请参阅https://github.com/google/google-api-nodejs-client/

    • 可能与#2相关,但我'm not familiar with the package you'包括 require('mirror-api-subscription') ,这似乎与它提供的"googleapis"包和发现服务的处理方式不同 . 但是,从它的参考文档来看,它并不清楚它实际上是在任何地方设置回调,只是在那里验证回调和调度到执行工作的函数 .

相关问题