我使用Firebase创建了推送通知服务,可以向所有或单个拥有FCM ID的用户发送通知,但我不知道如何向特定用户发送通知。
此外,还没有为处理推送通知创建服务器面板。如果有任何建议,将更有帮助。
此外,还没有为处理推送通知创建服务器面板。如果有任何建议,将更有帮助。
FirebaseMessaging.getInstance().subscribeToTopic("news");
取消订阅:unsubscribeFromTopic("news")
从服务器端您需要为特定主题(即一组用户)设置如下:
https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
"to": "/topics/news",
"data": {
"message": "This is a Firebase Cloud Messaging Topic Message!",
}
}
"/topics/news"
这将向订阅新闻主题的一组人发送通知。
我没有足够的声望来编辑Burhanuddin Rashid的答案,但我认为OP需要的是:
您可以将"to: /topics/news"
替换为registration_ids
{
"registration_ids" : [
"UserInstanceToken1",
"UserInstanceToken2"
]
"data": {
"message": "This is a Firebase Cloud Messaging Topic Message!",
}
}
FirebaseInstanceId.getInstance().getToken()
获取。 public static void sendNotificationToUser(String user, final String message) {
Firebase ref = new Firebase(FIREBASE_URL);
final Firebase notifications = ref.child("notificationRequests");
Map notification = new HashMap<>();
notification.put("us
ername", user);
notification.put("message", message);
notifications.push().setValue(notification);
}
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();
以下链接提供更多信息,它适用于许多设备:
享受吧!
public class NotificationSenderThread implements Runnable {
private String title;
private String message;
private String senderToken;
private String recieverToken;
public NotificationSenderThread(String title, String message, String senderToken, String recieverToken) {
this.title = title;
this.message = message;
this.senderToken = senderToken;
this.recieverToken = recieverToken;
}
@Override
public void run() {
try{
JSONObject jsonObject = new JSONObject();
jsonObject.put("title", title);
jsonObject.put("message", message);
jsonObject.put("fcm_token", senderToken);
JSONObject mainObject = new JSONObject();
mainObject.put("to", recieverToken);
mainObject.put("data", jsonObject);
URL url = new URL("https://fcm.googleapis.com/fcm/send");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "key=<SERVER KEY>");
connection.setDoOutput(true);
Log.e("sent",mainObject.toString());
DataOutputStream dStream = new DataOutputStream(connection.getOutputStream());
dStream.writeBytes(mainObject.toString());
dStream.flush();
dStream.close();
String line;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder responseOutput = new StringBuilder();
while((line = bufferedReader.readLine()) != null ){
responseOutput.append(line);
}
bufferedReader.close();
Log.e("output", responseOutput.toString());
}
catch (Exception e){
Log.e("output", e.toString());
e.printStackTrace();
}
}
}