[英]How to send notification to specific users with FCM?
我為FCM准備了接收器,可以向所有設備發送通知。
帶有此鏈接的gcm-http.googleapis.com/gcm/send可以發送給已注冊的目標用戶並將其發布到目標設備,如下面的json:
{
"notification": {
"title": "sample Title",
"text": "sample text" },
"to" : "[registration id]"
}
但是,我需要通過電子郵件或姓名等向我選擇的目標用戶發送通知。 例如:
{
"notification": {
"title": "sample Title",
"text": "sample text" },
"to" : "[email or name or sex ...]"
}
我怎樣才能做到這一點? 我是否需要創建Web服務器或其他東西?
我需要創建一個Web服務器嗎?
是。 您需要一個可以將姓名/電子郵件映射到注冊ID的地方。 例如,這些注冊ID必須包含在FCM的請求中
{
'registration_ids': ['qrgqry34562456', '245346236ef'],
'notification': {
'body': '',
'title': ''
},
'data': {
}
}
將推送發送到'qrgqry34562456'和'245346236ef'。
您在呼叫中使用的注冊ID是應用程序中此回調中稱為“令牌”的ID。
public class MyService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
}
}
您可以使用此代碼將消息發送到其他設備。 此代碼中不需要服務器。
public String send(String to, String body) {
try {
final String apiKey = "AIzaSyBsY_tfxxxxxxxxxxxxxxx";
URL url = new URL("https://fcm.googleapis.com/fcm/send");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "key=" + apiKey);
conn.setDoOutput(true);
JSONObject message = new JSONObject();
message.put("to", to);
message.put("priority", "high");
JSONObject notification = new JSONObject();
// notification.put("title", title);
notification.put("body", body);
message.put("data", notification);
OutputStream os = conn.getOutputStream();
os.write(message.toString().getBytes());
os.flush();
os.close();
int responseCode = conn.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + message.toString());
System.out.println("Response Code : " + responseCode);
System.out.println("Response Code : " + conn.getResponseMessage());
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// print result
System.out.println(response.toString());
return response.toString();
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.