Firebase belirli bir varlık üzerinde yeni bir çocuk eklendiğinde, Android mobil cihazlara push bildirimleri göndermek mümkün olup olmadığını merak ediyorum. Örneğin, Firebase'de Görevler adlı bir varlık olduğunu varsayalım. Firebase koleksiyonuna yeni bir görev eklendiğinde, "child_added" olayı tetiklenir ve bir şekilde bir mobil istemciye bir push bildirimi gönderilir. Tetik, child_added olayıdır. Ancak, Firebase olaylarından doğrudan push bildirimi gönderilip gönderilmediğinden emin değilim.Firebase yeni bir girişi olduğunda istemciye bildirim nasıl itilir?
cevap
(dayanan bunu yapmasına izin Firebase Cloud Functions bir göz, almalı senin dil tercihleri) firebase server sdk kullanarak childEventListener ekleyebilirsiniz. Değer değiştiğinde, http protokolünü kullanarak push bildirimlerini göndermek için FCM'yi kullanabilirsiniz. Bunu uygulamamda kullanıyorum ve çok uygun ve güvenilir.
Not: Bir android uygulaması için bu akışı kullanıyorsanız, java sunucu sdk'sini kullanmak, android üzerinde sahip olduğunuza neredeyse benziyor.
DÜZENLEME: Bu cevaba biraz ışık tuttuktan sonra, biraz daha fazla bilgi paylaşmayı düşünmüştüm. Bu kullanım durumunda
@WebServlet("/TestServlet")
public class MainServlet extends HttpServlet {
* @see HttpServlet#HttpServlet()
*/
public MainServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Get context and then relative path to saved json config file from
// firebase
ServletContext context = getServletContext();
String fullPath = context.getRealPath(FILE_PATH_FOR_JSON_SERVER_AUTH);
// Check if we actually got a file from above path
if (fullPath != null) {
} else {
}
// Setup connection to firebase database here
FirebaseOptions options = new FirebaseOptions.Builder().setServiceAccount(new FileInputStream(fullPath))
.setDatabaseUrl(FIREBASE_DATABSE_URL).build();
// Check to make sure we don't initialize firebase app each time webpage
// is refreshed
if (!exists) {
// If firebase app doesn't exist then initialize it here and set
// exists to true
FirebaseApp.initializeApp(options);
exists = true;
}
// Call this to begin listening *notify* node in firebase database for notifications
addNotificationListener(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Build apache httpclient POST request
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(ENDPOINT_URL);
//Get the required id stored in lastMsgId tree map here
if (!(chatLogs.getLastMsgIdTreeMap().isEmpty())) {
sendToID = chatLogs.getLastMsgIdTreeMap().firstKey();
lstmsg = chatLogs.getLastMsgIdTreeMap().get(sendToID);
}
//Set up a unique id with concatenating sendToID and lstmsg
uniqueID = sendToID + lstmsg;
//Set up a previous id to check with unique id. To avoid instant duplicate notifications
previousID = fcmHelper.getPreviousid();
// Check uniqueId and PreviousID beforeSending
if (!(uniqueID.equals(previousID))) {
fcmHelper.setPreviousid(uniqueID);
//Check if device token and user Id hashmap is not null
if (!(userLogs.getUserIdAndFcmTokenHashMap().isEmpty())) {
//Get the device token of sendTo Id here
deviceToken = userLogs.getUserIdAndFcmTokenHashMap().get(sendToID);
// Create JSON object for downstream data/notification
JSONObject mainNotificationJsonObj = new JSONObject();
JSONObject outerBaseJsonObj = new JSONObject();
try {
// Notification payload has 'title' and 'body' key
mainNotificationJsonObj.put(TITLE, NEW_MESSAGE_RECEIVED);
mainNotificationJsonObj.put(BODY, lstmsg);
mainNotificationJsonObj.put(NOTIFICATION_SOUND, NOTIFICATION_SOUND_TYPE_DEFAULT);
//mainNotificationJsonObj.put(TAG, fcmHelper.getFcmTagId());
System.out.println("This is sentBy id =" + fcmHelper.getFcmTagId());
// This will be used in case of both 'notification' or 'data' payload
outerBaseJsonObj.put(TO, deviceToken);
// Set priority of notification. For instant chat setting
// high will
// wake device from idle state - HIGH BATTERY DRAIN
outerBaseJsonObj.put(PRIORITY_KEY, PRIORITY_HIGH);
// Specify required payload key here either 'data' or
// 'notification'. We can even use both payloads in single
// message
outerBaseJsonObj.put(NOTIFICATION, mainNotificationJsonObj);
} catch (JSONException e) {
e.printStackTrace();
}
// Setup http entity with json data and 'Content-Type' header
StringEntity requestEntity = new StringEntity(outerBaseJsonObj.toString(),
ContentType.APPLICATION_JSON);
// Setup required Authorization header
post.setHeader(AUTHORIZATION, FIREBASE_SERVER_KEY);
// Pass setup entity to post request here
post.setEntity(requestEntity);
// Execute apache http client post response
HttpResponse fcmResponse = client.execute(post);
// Get status code from FCM server to debug error and success
System.out.println(RESPONSE_CODE + fcmResponse.getStatusLine().getStatusCode());
// Get response entity from FCM server and read throw lines
BufferedReader rd = new BufferedReader(new InputStreamReader(fcmResponse.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
if (response != null) {
// Print out the response to webpage
PrintWriter out;
out = response.getWriter();
out.println(result);
System.out.println("This is Result - " + result);
}
} else {
//Abort this process if conditions not met
post.abort();
System.out.println(THIS_MSG_ALREADY_SENT);
}
}
}
/*
* This is the main method to be called to setup notifications listener on server startup
*/
private void addNotificationListener(HttpServletRequest request, HttpServletResponse response) {
//Initialize Value event listener
lastMsgListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot arg0) {
// Clear idLastMessagerecivedhash map if not null
if (lastMsgIdTreeMap != null) {
lastMsgIdTreeMap.clear();
}
//Get lastmsg to be sent as notification here
lstmsg = (String) arg0.child(LAST_MESSAGE).getValue();
//Get sendToID here
String sendToID = (String) arg0.child(SEND_TO).getValue();
//Get Sent by ID here
sentBy = (String) arg0.child(SENT_BY).getValue();
//Set fcmTag ID here
fcmHelper.setFcmTagId(sentBy);
//Check if lstmsg is not null
if (lstmsg != null) {
// Create lastmsgTimestampHashMap here
lastMsgIdTreeMap.put(sendToID, lstmsg);
}
//Check for null again
if (lastMsgIdTreeMap != null) {
chatLogs.setLastMsgIdTreeMap(lastMsgIdTreeMap);
}
try {
doPost(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError arg0) {
}
};
//Set up database reference to notify node here
messageRef = FirebaseDatabase.getInstance().getReference().child(NOTIFY);
//Add value listener to database reference here
messageRef.addValueEventListener(lastMsgListener);
}
"göstermek için sadece yapılan this official firebase blog
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();
// örnek testi java servlet görüldüğü gibi // örnek
sunucusu node.js Java sunucu uygulaması sadece kişisel bir testtir.Bazı bölümler sadece kurulum hakkında bir fikir vermek için düzenlenmiş veya kaldırılmıştır. lütfen sadece kopyalamayın - yapıştırın. Kendinizi anlamanızı ve oluşturmanızı öneririm. "
Düzenleme: Eğer bir node.js sunucusunu oluşturmak zorunda kalmadan
Sen çok basit node.js sunucu veya bir java servlet yapabilirsiniz- 1. Firebase: İşlemde nasıl itilir?
- 2. Yeni Firebase Facebook kullanıcı girişi
- 3. Storyboard'lar olmadan Yeni Görünüm Nasıl İtilir Swift
- 4. Firebase Chat - Diğer Kullanıcıya Bildirim
- 5. Firebase: Nasıl Android uygulamasında varsayılan bildirim kanalını ayarlamak için?
- 6. Yeni kullanıcı firebase oluşturma
- 7. İstemciye, yeni Redis ana makinesinin Sentinel
- 8. Procfile Heroku'ya nasıl itilir?
- 9. Taslaklar Gerrit'e nasıl itilir?
- 10. Bir OrientDB ana düğümü güncel olduğunda bildirim almak mümkün mü?
- 11. Firebase girişi ile Geofire konumunu ilişkilendirin
- 12. iki kafa oluşturur, nasıl itilir?
- 13. Internet iOS iOS'ta mevcut olduğunda bildirim
- 14. Vektörlerin bir vektöründe nasıl geri itilir?
- 15. Sunucudan istemciye veriler nasıl kaydedilir
- 16. Master'ınız olduğunda yeni bir dalı bir repodan nasıl ayırırsınız?
- 17. Firebase konsolunda yeni proje oluşturulamıyor
- 18. Firebase oturum uzunluğu yeni konsol
- 19. Android'de Firebase ve yeni Google Sign-In
- 20. Bir HTTP oturumu için sınırlanmış/sınırsız olduğunda bildirim alma
- 21. TcpClient, yeni veri mevcut olduğunda okunmuyor
- 22. Nasıl benim ana etkinliğim herhangi yeni bir örneği olmaksızın, bildirim
- 23. Eclipse'de yeni bir hattın otomatik girişi - nasıl devre dışı bırakılır?
- 24. Baytları istemcilere istemcilere nasıl aktarabilirim? I (ya da sunucu sunucudan istemciye veya istemciye) sunucudan istemciye istemciye bayt parçaları transfer ederken
- 25. socket.io ile bir istemciye nasıl mesaj gönderilir
- 26. Bir girişi nasıl gözlemlenebilir yapabilirim?
- 27. Jwebsocket: İsteği belirli bir istemciye
- 28. Bir görünüm nasıl itilir, geri dönüp görünüme geri dönülür?
- 29. Kişisel etkin nokta açık olduğunda UIViewController sorunu çözer
- 30. Android Firebase 2.4 Yeni ref.updateChildren() kullanarak IllegalStateException()
Aygıtlar arasında bildirimlerin gönderilmesiyle ilgili bazı öğreticiler var mı? Bu bağlantı (https://firebase.googleblog.com/2016/08/sending-notifications-between-android. html) çok kullanışlıdır ama nasıl kullanılacağını bilmiyorum. – Carlo