159 lines
4.6 KiB
JavaScript
Executable File
159 lines
4.6 KiB
JavaScript
Executable File
|
|
|
|
|
|
// Client ID and Client Secret received from ADM
|
|
// For more info, see: https://developer.amazon.com/public/apis/engage/device-messaging/tech-docs/02-obtaining-adm-credentials
|
|
var CLIENT_ID = "amzn1.application-oa2-client.8e838f6629554e26ae3f43a6c663cd60";
|
|
var CLIENT_SECRET = "0af96083320f5d70dc4f358cc783ac65a22e78b297ba257df34d5f723f24543f";
|
|
|
|
// Registration ID, received on device after it registers with ADM server
|
|
var REGISTRATION_IDS = ["amzn1.adm-registration.v2.Y29tLmFtYXpvbi5EZXZpY2VNZXNzYWdpbmcuUmVnaXN0cmF0aW9uSWRFbmNyeXB0aW9uS2V5ITEhOE9rZ2h5TXlhVEFFczg2ejNWL3JMcmhTa255Uk5BclhBbE1XMFZzcnU1aFF6cTlvdU5FbVEwclZmdk5oTFBVRXVDN1luQlRSNnRVRUViREdQSlBvSzRNaXVRRUlyUy9NYWZCYS9VWTJUaGZwb3ZVTHhlRTM0MGhvampBK01hVktsMEhxakdmQStOSXRjUXBTQUhNU1NlVVVUVkFreVRhRTBCYktaQ2ZkUFdqSmIwcHgzRDhMQnllVXdxQ2EwdHNXRmFVNklYL0U4UXovcHg0K3Jjb25VbVFLRUVVOFVabnh4RDhjYmtIcHd1ZThiekorbGtzR2taMG95cC92Y3NtZytrcTRPNjhXUUpiZEk3QzFvQThBRTFWWXM2NHkyMjdYVGV5RlhhMWNHS0k9IW5GNEJMSXNleC9xbWpHSU52NnczY0E9PQ"];
|
|
|
|
// Message payload to be sent to client
|
|
var payload = {
|
|
data: {
|
|
message: "PushPlugin works!!",
|
|
sound: "beep.wav",
|
|
url: "http://www.amazon.com",
|
|
timeStamp: new Date().toISOString(),
|
|
foo: "baz"
|
|
},
|
|
consolidationKey: "my app",
|
|
expiresAfter: 3600
|
|
};
|
|
|
|
|
|
//*********************************
|
|
|
|
|
|
var https = require("https");
|
|
var querystring = require("querystring");
|
|
|
|
|
|
if(CLIENT_ID == "" || CLIENT_SECRET == "" || REGISTRATION_IDS.length == 0){
|
|
console.log("******************\nSetup Error: \nYou need to edit the pushADM.js file and enter your ADM credentials and device registration ID(s).\n******************");
|
|
process.exit(1);
|
|
}
|
|
|
|
|
|
// Get access token from server, and use it to post message to device
|
|
getAccessToken(function(accessToken){
|
|
|
|
for(var i = 0; i < REGISTRATION_IDS.length; i++){
|
|
|
|
var registrationID = REGISTRATION_IDS[i];
|
|
|
|
postMessage(accessToken, registrationID, payload);
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Query OAuth server for access token
|
|
// For more info, see: https://developer.amazon.com/public/apis/engage/device-messaging/tech-docs/05-requesting-an-access-token
|
|
|
|
function getAccessToken(callback){
|
|
|
|
console.log("Requesting access token from server...");
|
|
|
|
var credentials = {
|
|
scope: "messaging:push",
|
|
grant_type: "client_credentials",
|
|
client_id: CLIENT_ID,
|
|
client_secret: CLIENT_SECRET
|
|
}
|
|
|
|
var post_data = querystring.stringify(credentials);
|
|
|
|
var post_options = {
|
|
host: "api.amazon.com",
|
|
port: "443",
|
|
path: "/auth/O2/token",
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
|
|
}
|
|
};
|
|
|
|
var req = https.request(post_options, function(res) {
|
|
|
|
var data = "";
|
|
|
|
res.on("data", function (chunk) {
|
|
data += chunk;
|
|
});
|
|
|
|
res.on("end", function() {
|
|
console.log("\nAccess token response:", data);
|
|
var accessToken = JSON.parse(data).access_token;
|
|
callback(accessToken);
|
|
});
|
|
|
|
});
|
|
|
|
req.on("error", function(e) {
|
|
console.log("\nProblem with access token request: ", e.message);
|
|
});
|
|
|
|
req.write(post_data);
|
|
req.end();
|
|
|
|
}
|
|
|
|
|
|
// Post message payload to ADM server
|
|
// For more info, see: https://developer.amazon.com/public/apis/engage/device-messaging/tech-docs/06-sending-a-message
|
|
|
|
function postMessage(accessToken, registrationID, payload){
|
|
|
|
if(accessToken == undefined || registrationID == undefined || payload == undefined){
|
|
return;
|
|
}
|
|
|
|
console.log("\nSending message...");
|
|
|
|
var post_data = JSON.stringify(payload);
|
|
|
|
var api_path = "/messaging/registrations/" + registrationID + "/messages";
|
|
|
|
var post_options = {
|
|
host: "api.amazon.com",
|
|
port: "443",
|
|
path: api_path,
|
|
method: "POST",
|
|
headers: {
|
|
"Authorization": "Bearer " + accessToken,
|
|
"X-Amzn-Type-Version": "com.amazon.device.messaging.ADMMessage@1.0",
|
|
"X-Amzn-Accept-Type" : "com.amazon.device.messaging.ADMSendResult@1.0",
|
|
"Content-Type": "application/json",
|
|
"Accept": "application/json",
|
|
}
|
|
};
|
|
|
|
var req = https.request(post_options, function(res) {
|
|
|
|
var data = "";
|
|
|
|
res.on("data", function (chunk) {
|
|
data += chunk;
|
|
});
|
|
|
|
res.on("end", function() {
|
|
console.log("\nSend message response: ", data);
|
|
});
|
|
|
|
});
|
|
|
|
req.on("error", function(e) {
|
|
console.log("\nProblem with send message request: ", e.message);
|
|
});
|
|
|
|
req.write(post_data);
|
|
req.end();
|
|
|
|
}
|
|
|
|
|