используете ли вы конфигурацию SMTP для отправки своей электронной почты? попробуйте вместо этого использовать phpmailer. вы можете загрузить библиотеку из https://github.com/PHPMailer/PHPMailer . Я создал электронную почту, отправив этот путь:
function send_mail($email, $recipient_name, $message='')
{
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet="utf-8";
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "mail.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "myusername"; // SMTP username
$mail->Password = "p@ssw0rd"; // SMTP password
$mail->From = "me@walalang.com";
$mail->FromName = "System-Ad";
$mail->AddAddress($email, $recipient_name);
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->IsHTML(true); // set email format to HTML (true) or plain text (false)
$mail->Subject = "This is a Sampleenter code here Email";
$mail->Body = $message;
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
$mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
$mail->addAttachment('files/file.xlsx');
if(!$mail->Send())
{
echo "Message could not be sent. ";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
}
Каждый раз, когда создается действие onChildAdded, вызывается для всех данных в ссылке. Возможно ли, чтобы onChildAdded и onChildRemoved вызывались только для «diff» между моим локальным кешем и данными на сервере firebase?
blockquote>Нет, это невозможно. Из документации по типам событий :
child_added запускается один раз для каждого существующего дочернего элемента, а затем снова каждый раз, когда новый ребенок добавляется к указанному пути
blockquote>Теперь вернемся к вашему первоначальному вопросу:
, какой обратный вызов мне нужно использовать, чтобы он запускался только для 5 новых элементов, которые были добавлены?
blockquote>Это будет:
ref.limitToLast(5)...
Но для этого вам нужно знать, сколько элементов было добавлено в список, поскольку вы в последний раз слушали.
более обычное решение - отслеживать последний элемент, который вы уже видели, а затем использовать
startAt()
, чтобы начать стрельбу с того места, где вы были в последний раз:ref.orderByKey().startAt("-Ksakjhds32139")...
Затем вы сохранили бы последний ключ вы видели в общих предпочтениях.
Аналогичным образом вы можете сохранить последний раз, когда активность была видна с помощью:
long lastActive = new Date().getTime();
Затем добавьте
timestamp
сFirebase.ServerValue.TIMESTAMP
к каждому элементу, а затем:ref.orderByChild("timetstamp").startAt(lastActive+1)...
Вы должны использовать on ('child_changed') . Обычно on()
используется для прослушивания изменений данных в определенном месте. Однако on('child_changed')
уведомляет вас
, когда данные, хранящиеся у ребенка ( или любого из его потомков ) изменяются.
blockquote>Он передаст моментальный снимок данных для обратного вызова, который содержит новое дочернее содержимое. Имейте в виду, что одно событие
child_changed
может потенциально представлять несколько изменений для ребенка.