2

我想註冊TAKE_A_NOTE與'鏡像api訂閱'事件偵聽器。我沒有任何運氣:我可以用「我的應用程序」啓動記錄,但是,沒有控制檯記錄事件已被識別。註冊玻璃時間軸通知節點

我想知道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')); 
    });
+0

請問你的通知文件(位於https://本地主機:7777 /通知)是什麼樣子?我正在嘗試做同樣的事情,但是我一直在理解在回調URL和重定向URL(process.env.MIRROR_DEMO_REDIRECT_URL)中給出的內容。 –

+0

@Prisoner給出的答案是否幫助您解決問題並從Node JS獲取時間軸訪問權限? –

+0

@ aug2uag - 你能指出你所做的改變嗎? – kimo

回答

3

至少有兩個潛在的問題與您的代碼:

  1. 的callbackUrl必須是互聯網可訪問的HTTPS地址。 「Localhost」不夠好,因爲Google的服務器需要能夠解決它。您可以提供IP地址,如果您擁有公共IP地址,或使用隧道。

  2. 您對client.mirror.subscriptions.insert()的調用結果不做任何處理。通常情況下,您應該像調用client.mirror.contacts.insert()一樣調用該方法,即將其與withAuthClient()和​​鏈接起來。如果您希望向鏡像服務註冊,則需要撥打​​。見https://github.com/google/google-api-nodejs-client/的文檔有關「googleapis」包和發現服務

  3. 可能與#2,但我不熟悉你包括require('mirror-api-subscription')的包,這似乎以不同的方式處理事情比「googleapis 「它提供的包和發現服務。然而,從它的參考文檔中,並不清楚它實際上是否在任何地方設置了回調函數,並且只是在那裏驗證回調並派遣到執行該工作的函數。

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