11

我準備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服務器或其他東西?

回答

14

難道我需要創建一個Web服務器

是。您需要一個可以將名稱/電子郵件映射到註冊ID的位置。這些註冊ID必須包含在該請求到FCM,例如

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

    } 
} 

將所述推送發送至「qrgqry34562456」和「245346236ef」。

您在調用中使用的註冊ID是被稱爲「令牌」在這個回調在應用程序中的一個。

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

感謝您的答覆。這對我有幫助。我幾乎閱讀了FCM的所有文檔。其中有同樣的東西,就像你的答案一樣。我想確定。因爲我認爲有通知服務器。 –

+1

是registration_id和註冊標記相同的東西? –

+1

@AnggaAriWijaya是 –

0

您可以使用此代碼將消息發送到其他設備。此代碼中不需要服務器。

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

這是不推薦的方式,因爲任何人都可以通過使用像Smali2Java工具讓你的API密鑰,並可以發送通知任何人。 – kunwar97

+0

這是黑客攻擊的一部分,是的,我也並不推薦這樣做,但我給,我們可以從這裏也做了回答,我們可以通過,如果需要加密密鑰的安全部分。是的,謝謝讓我知道這一點。 –

+0

我們將如何使用它? –

相關問題