11

Tôi đã chuẩn bị bộ thu cho FCM và có thể gửi thông báo tới tất cả các thiết bị.Làm thế nào để gửi thông báo đến người dùng cụ thể với FCM?

gcm-http.googleapis.com/gcm/send với liên kết này có thể gửi để nhắm mục tiêu người dùng đăng ký và gửi đến thiết bị mục tiêu như dưới đây json:

{ 
    "notification": { 
       "title": "sample Title", 
       "text": "sample text" }, 
     "to" : "[registration id]" 
     } 

Tuy nhiên, tôi cần phải gửi thông báo để nhắm mục tiêu người dùng mà tôi chọn, qua email hoặc tên ... v.v. Ví dụ:

{ 
    "notification": { 
       "title": "sample Title", 
       "text": "sample text" }, 
     "to" : "[email or name or sex ...]" 
     } 

Làm cách nào để làm điều đó? Tôi có cần tạo một máy chủ web hoặc một cái gì khác không?

Trả lời

14

Did tôi cần phải tạo ra một máy chủ web

Yes. Bạn cần một nơi bạn có thể ánh xạ tên/email đến ID đăng ký. Những ID đăng ký phải được bao gồm trong yêu cầu để FCM, ví dụ

{ 
    'registration_ids': ['qrgqry34562456', '245346236ef'], 
    'notification': { 
     'body': '', 
     'title': '' 
    }, 
    'data': { 

    } 
} 

sẽ gửi push to 'qrgqry34562456' và '245346236ef'.

ID đăng ký bạn sử dụng trong cuộc gọi là ID đăng ký được gọi là 'mã thông báo' trong cuộc gọi lại này trong ứng dụng.

public class MyService extends FirebaseInstanceIdService { 
    @Override 
    public void onTokenRefresh() { 
    } 
} 
+0

cảm ơn phản hồi của bạn. Nó rất hữu ích cho tôi. Tôi đọc hầu như tất cả các tài liệu từ FCM.There wirte điều tương tự như câu trả lời của bạn. Tôi muốn chắc chắn. bởi vì tôi nghĩ có một máy chủ để thông báo. –

+1

là registration_id và đăng ký token cùng một điều? –

+1

@AnggaAriWijaya yes –

0

bạn có thể gửi tin nhắn tới thiết bị khác bằng mã này. không cần máy chủ trong mã này.

public String send(String to, String body) { 
      try { 

       final String apiKey = "AIzaSyBsY_tfCQjUSWEWuNNwQdC1Vtb0szzz"; 
       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"; 
     } 
+0

Đây không phải là cách được khuyến nghị vì bất kỳ ai cũng có thể lấy khóa API của bạn bằng cách sử dụng các công cụ như Smali2Java và có thể gửi thông báo đến bất kỳ ai. – kunwar97

+0

đó là một phần của hack, và tôi cũng không khuyên bạn nên điều này nhưng tôi đã đưa ra câu trả lời rằng chúng tôi có thể làm điều đó từ đây quá, chúng tôi có thể bảo đảm một phần bằng cách mã hóa khóa nếu cần thiết. và cảm ơn vì đã cho tôi biết điều này. –

+0

Chúng ta sẽ sử dụng cái này như thế nào? –

Các vấn đề liên quan