【发布时间】:2016-06-09 04:43:51
【问题描述】:
我正在学习以下教程:https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio
我一切正常,并且电子邮件按应有的方式每 2 分钟发送一次。但是,我现在希望将此扩展为仅在 Firebase 节点上的数据更改时触发发送电子邮件,不是每 2 分钟发送一次消息。
为了测试我替换了cron.xml 文件
来自:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cron>
<url>/hello</url>
<description>Send me an email of outstanding items in the morning</description>
<schedule>every 2 minutes</schedule>
</cron>
</cronentries>
到:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>
清除计划任务。
但是现在在 Firebase 数据库中进行更改后,电子邮件永远不会发送....
如何让我的应用引擎服务器“监听”firebase 节点并随后实时生成给定onDataChanged 的操作?
MyServlet 类:
public class MyServlet extends HttpServlet {
static Logger Log = Logger.getLogger("com.example.username.myapplication.backend.MyServlet");
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
Log.info("Got cron message, constructing email.");
//Create a new Firebase instance and subscribe on child events.
Firebase firebase = new Firebase("[firebase ref]");
firebase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Build the email message contents using every field from Firebase.
final StringBuilder newItemMessage = new StringBuilder();
newItemMessage.append("This should arrive very closely after changing the data");
//Now Send the email
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
Message msg = new MimeMessage(session);
//Make sure you substitute your project-id in the email From field
msg.setFrom(new InternetAddress("anything@[app-engine].appspotmail.com",
"Todo Nagger"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress("myEmail@gmail.com", "Recipient"));
msg.setSubject("Feast Email Test");
msg.setText(newItemMessage.toString());
Transport.send(msg);
} catch (MessagingException | UnsupportedEncodingException e) {
Log.warning(e.getMessage());
}
}
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
【问题讨论】:
-
或者我应该只使用 node.js...?
-
你已经提到了教程,但是这个错误几乎总是在启用自动缩放时发生(在 tut 中有介绍)。见this thread。
-
另外,您可能需要记录 onCancelled() 处理程序以查看您的侦听器是否被拒绝。
-
@Kato,我完全按照教程操作,复制并粘贴了整个
appengine.web.xml文件....我将只使用node.js,对于这样一个简单的测试来说,这需要很多开销... -
@Kato,更新,我迁移到 node.js,实时功能在监听 Firebase 的更新,然后触发一个动作方面没有问题。谢谢
标签: android google-app-engine servlets firebase