39

最近、GCM を使用したプッシュ通知の送信について質問しました: Send push notifications to Android . FCMができた今、サーバーサイドの開発とどう違うのか気になります。賢明なコーディング、それらは同じですか?サーバーから Android デバイスへのプッシュ通知の送信を示す FCM コードの例はどこにありますか?

Java コードを使用して FCM に通知を送信するには、JAR ライブラリをダウンロードする必要がありますか? 「 Android にプッシュ通知を送信する」のコード例は、GCM を使用してプッシュ通知を送信することを示しており、サーバー側の GCM JAR ファイルが必要です。

ただし、https://www.quora.com/How-do-I-make-a-post-request-to-a-GCM-server-in-Java-to-push-a-notification-toの別の例-the-client-appは、GCM を使用してプッシュ通知を送信することを示しています。HTTP 接続を介して送信するだけなので、サーバー側の GCM JAR ファイルは必要ありません。同じコードを FCM に使用できますか? 使用する URL は「https://android.googleapis.com/gcm/send」です。FCM の同等の URL は?

前もって感謝します。

4

6 に答える 6

35

サーバー側のコーディングはどのように異なりますか?

大きな違いはないので、GCM のサーバー側コードの例のほとんどを確認することもできます。GCM と FCM に関する主な違いは、FCM を使用すると、新しい機能を使用できることです (この回答で述べたように)。FCM には、独自のアプリ サーバーがなくてもメッセージ/通知を送信できるコンソールもあります。

注:独自のアプリ サーバーの作成は、ユーザー次第です。コンソール経由でメッセージ/通知を送信できると述べているだけです。

使用する URL は「https://android.googleapis.com/gcm/send」です。FCM の同等の URL は?

FCM の同等の URL はhttps://fcm.googleapis.com/fcm/sendです。詳細については、このドキュメントをご覧ください。

乾杯!:D

于 2016-05-30T03:49:05.707 に答える
1

トピック、単一デバイス、複数デバイス向けの完全なソリューション クラス FireMessage を作成します。これはデータ メッセージの例です。データを通知に変更できます。

public class FireMessage {
private final String SERVER_KEY = "YOUR SERVER KEY";
private final String API_URL_FCM = "https://fcm.googleapis.com/fcm/send";
private JSONObject root;

public FireMessage(String title, String message) throws JSONException {
    root = new JSONObject();
    JSONObject data = new JSONObject();
    data.put("title", title);
    data.put("message", message);
    root.put("data", data);
}


public String sendToTopic(String topic) throws Exception { //SEND TO TOPIC
    System.out.println("Send to Topic");
    root.put("condition", "'"+topic+"' in topics");
    return sendPushNotification(true);
}

public String sendToGroup(JSONArray mobileTokens) throws Exception { // SEND TO GROUP OF PHONES - ARRAY OF TOKENS
    root.put("registration_ids", mobileTokens);
    return sendPushNotification(false);
}

public String sendToToken(String token) throws Exception {//SEND MESSAGE TO SINGLE MOBILE - TO TOKEN
    root.put("to", token);
    return sendPushNotification(false);
}



    private String sendPushNotification(boolean toTopic)  throws Exception {
        URL url = new URL(API_URL_FCM);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setUseCaches(false);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");

        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Authorization", "key=" + SERVER_KEY);

        System.out.println(root.toString());

        try {
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(root.toString());
            wr.flush();

            BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream())));

            String output;
            StringBuilder builder = new StringBuilder();
            while ((output = br.readLine()) != null) {
                builder.append(output);
            }
            System.out.println(builder);
            String result = builder.toString();

            JSONObject obj = new JSONObject(result);

            if(toTopic){
                if(obj.has("message_id")){
                    return  "SUCCESS";
                }
           } else {
            int success = Integer.parseInt(obj.getString("success"));
            if (success > 0) {
                return "SUCCESS";
            }
        }

            return builder.toString();
        } catch (Exception e) {
            e.printStackTrace();
           return e.getMessage();
        }

    }

}

そして、このようにどこにでも電話してください。サーバーとアンドロイドの両方でこれを使用できます。

FireMessage f = new FireMessage("MY TITLE", "TEST MESSAGE");

      //TO SINGLE DEVICE
    /*  String fireBaseToken="c2N_8u1leLY:APA91bFBNFYDARLWC74QmCwziX-YQ68dKLNRyVjE6_sg3zs-dPQRdl1QU9X6p8SkYNN4Zl7y-yxBX5uU0KEKJlam7t7MiKkPErH39iyiHcgBvazffnm6BsKjRCsKf70DE5tS9rIp_HCk";
       f.sendToToken(fireBaseToken); */

    // TO MULTIPLE DEVICE
    /*  JSONArray tokens = new JSONArray();
      tokens.put("c2N_8u1leLY:APA91bFBNFYDARLWC74QmCwziX-YQ68dKLNRyVjE6_sg3zs-dPQRdl1QU9X6p8SkYNN4Zl7y-yxBX5uU0KEKJlam7t7MiKkPErH39iyiHcgBvazffnm6BsKjRCsKf70DE5tS9rIp_HCk");
      tokens.put("c2R_8u1leLY:APA91bFBNFYDARLWC74QmCwziX-YQ68dKLNRyVjE6_sg3zs-dPQRdl1QU9X6p8SkYNN4Zl7y-yxBX5uU0KEKJlam7t7MiKkPErH39iyiHcgBvazffnm6BsKjRCsKf70DE5tS9rIp_HCk");
       f.sendToGroup(tokens);  */

    //TO TOPIC
      String topic="yourTopicName";
       f.sendToTopic(topic); 
于 2018-03-10T07:06:21.133 に答える