2016-10-02 109 views
1

我有我有一些代码,我想调用一些Node.js代码,我不知道如何去做这件事。我想要实现这些Firebase通知在这个博客帖子描述:如何让Android Java代码调用Node.js代码?

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

但是有一些Node.js的代码,会听我的火力地堡Database,如果有东西存在将检测插入我的数据库。有没有什么办法可以在我的Android应用程序的某个地方“部署”这个代码,并让它可以调用这段代码?下面是Node.js的代码我woudl想从我的Android应用程序所调用:

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(); 

我会想象我会需要在一些地方举办的代码,但我觉得如果我需要的是举办一个文件除非我错了,否则不一定要部署Google App Engine或Heroku。我想我只是困惑于如何在这个文件和我迄今为止写的Java Android代码之间进行通信。如果任何人都能指引我走向正确的方向,那会很棒。谢谢!

回答

2

你可以在android上安装类似Termux的东西,并在其上安装node.js,并在设备上本地托管你的代码,但我必须说,它似乎是一个奇怪的方式来使用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

我不知道如何以及将网络流量从您的node.js流服务器连接到数据库,然后考虑它是从Android的某种模拟器内托管的,但它值得一试。

+0

有趣。我会看看这个!问题是我想在云平台上托管这一点,所以我不必担心网络流量太大,不得不托管服务器并确保可伸缩性。你会有其他解决方案吗?这很酷,但我会看看它 – user1871869

+0

对不起,你说你想要在云平台上托管它,否则你不会? – Ryan

+0

我想,因为我觉得自己可以省去一切麻烦​​。有没有免费的解决方案来做到这一点? – user1871869

2

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

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

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

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

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

+0

我明白了。谢谢你。我可以用作免费应用程序服务器的任何示例我可以测试这个出Node.js代码? – user1871869

+0

推荐此类服务对于堆栈溢出而言是无关紧要的。但我期望搜索“可运行节点的免费应用程序服务器”将会带来一些好的结果。 –

+0

@ user1871869这是比我更好的答案。只需使用node.js来实现它的目的,并将其与Android保持一致。 – Ryan