如何使Android Java代码调用Node.js代码?

我有我有一些代码,我想调用一些Node.js代码,我不知道如何去做这件事。 我想按照此博客文章所述实施这些Firebase通知:

https://firebase.googleblog.com/2016/08/sending-notifications-between-android.html

但是有一些Node.js代码会监听我的Firebase数据库,并会检测是否有东西被插入到我的数据库中。 有没有什么办法可以在我的Android应用程序的某个地方“部署”这个代码,并让它可以被调用? 下面是我想从我的Android应用程序中调用的Node.js代码:

 var firebase = require('firebase'); var request = require('request'); var API_KEY = "..."; // Your Firebase Cloud Server API key firebase.initializeApp({ serviceAccount: ".json", databaseURL: "https://.firebaseio.com/" }); ref = firebase.database().ref(); function listenForNotificationRequests() { var requests = ref.child('notificationRequests'); ref.on('child_added', function(requestSnapshot) { var request = requestSnapshot.val(); sendNotificationToUser( request.username, request.message, function() { request.ref().remove(); } ); }, function(error) { console.error(error); }); }; function sendNotificationToUser(username, message, onSuccess) { request({ url: 'https://fcm.googleapis.com/fcm/send', method: 'POST', headers: { 'Content-Type' :' application/json', 'Authorization': 'key='+API_KEY }, body: JSON.stringify({ notification: { title: message }, to : '/topics/user_'+username }) }, function(error, response, body) { if (error) { console.error(error); } else if (response.statusCode >= 400) { console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage); } else { onSuccess(); } }); } // start listening listenForNotificationRequests(); 

我想我需要将代码托pipe在某个地方,但是我觉得如果我需要的只是在某个地方托pipe一个文件,除非我误会,否则不一定要部署Google App Engine或Heroku。 我想我只是混淆了如何可以在这个文件和我迄今为止写的Java Android代码之间进行通信。 如果有人能把我指向正确的方向,那会很棒。 谢谢!

你可以在Android上安装类似Termux的东西,并在其上安装node.js,并在设备上本地托pipe你的代码,但我必须说,这似乎是一个奇怪的方式来使用node.js服务器(但它确实没有声音有趣!)

看看这个指南,在您的Android上安装Termux和node.js: https ://medium.freecodecamp.com/building-a-node-js-application-on-android-part-1-termux-vim-and -node-JS-dfa90c28958f#.z9zjw5o8w

我不确定networkingstream量将从您的node.js服务器stream向数据库,并且考虑到它是从Android的某种模拟器内托pipe的,但是值得一试。

有没有什么办法可以在我的Android应用程序的某个地方“部署”这个代码,并让它可以被调用?

不。您不需要在Android应用程序中运行node.js代码。 这将打破分离代码的目的。

Node.js代码运行在所谓的应用程序服务器上。 这样的应用程序服务器是可以运行代码的可靠的地方。 既然你控制了这样的服务器(毕竟没有其他人可以访问它),你可以相信在服务器上运行的代码是你放在那里的代码。

在用户的Android设备上,您可以运行代码。 但是你永远不能相信在设备上运行的代码是你在那里发送的代码。 毕竟用户可以对应用程序进行更改。

您不应该将应用程序代码与在受信任的服务器上运行的代码混合。 我的文章中的Node.js脚本需要Firebase云消息传递服务器密钥才能将消息发送到设备。 由于有权访问此密钥,因此您可以代表项目发送消息,但只能出现在受信任的服务器上,例如应用服务器。