मैं फायरबेस कंसोल के उपयोग के बिना फायरबेस क्लाउड मैसेजिंग सूचना कैसे भेज सकता हूं?


200

मैं सूचनाओं के लिए नया गूगल सेवा के साथ शुरू कर रहा हूँ, Firebase Cloud Messaging

इस कोड के लिए धन्यवाद https://github.com/firebase/quickstart-android/tree/master/messaging मैं अपने एंड्रॉइड डिवाइस पर अपने फायरबेस यूजर कंसोल से सूचनाएं भेजने में सक्षम था ।

क्या फायरबेस कंसोल का उपयोग किए बिना एक अधिसूचना भेजने का कोई एपीआई या तरीका है? मेरा मतलब है, उदाहरण के लिए, एक PHP एपीआई या ऐसा कुछ, सीधे अपने स्वयं के सर्वर से सूचनाएं बनाने के लिए।


1
सूचनाएं भेजने के लिए आप अपने सर्वर की मेजबानी कहां कर रहे हैं?
रोड्रिगो रुइज


@ डेविड कोरल, उसी के लिए मेरा जवाब जांचें। stackoverflow.com/a/38992689/2122328
संदीप_देवरा

एफसीएम सूचनाएं भेजने के लिए एक स्प्रिंग ऐप लिखा है, जिसमें आप यह देखना चाहते हैं कि यह कैसे काम करता है -> github.com/aniket91/WebDynamo/blob/master/src/com/osfg/…
अनिकेत ठाकुर

आप डिवाइस को मेवेज डाइसिस के लिए रेट्रोफिट का उपयोग कर सकते हैं। stackoverflow.com/questions/37435750/…
यूरोकेम

जवाबों:


218

फायरबेस क्लाउड मैसेजिंग में एक सर्वर-साइड एपीआई है जिसे आप संदेश भेजने के लिए कॉल कर सकते हैं। Https://firebase.google.com/docs/cloud-messaging/server देखें ।

curlHTTP एंड-पॉइंट कॉल करने के लिए किसी संदेश को भेजना उतना ही सरल हो सकता है । Https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol देखें

curl -X POST --header "Authorization: key=<API_ACCESS_KEY>" \
    --Header "Content-Type: application/json" \
    https://fcm.googleapis.com/fcm/send \
    -d "{\"to\":\"<YOUR_DEVICE_ID_TOKEN>\",\"notification\":{\"body\":\"Yellow\"},\"priority\":10}"

4
मैं iOS पर डिवाइस आईडी कैसे प्राप्त कर सकता हूं? टोकन हम पर मिलता है यह डिवाइस है NSData: didRegisterForRemoteNotificationsWithDeviceToken deviceToken लंबे एक हम साथ मिलता है या । FIRInstanceID.instanceID () टोकन () ?
फेलिप ऑलिवेरा

3
फ्रैंक I ने एक प्रगतिशील वेबएप पर पुश सूचनाएं जोड़ने और http अनुरोध को पोस्ट करने के लिए POstman का उपयोग करने के लिए फ़ायरबेस डॉक्स और कोडेलैब पर गाइड का पालन किया, फिर भी मुझे 401 त्रुटि मिलती रहती है। कोई सुझाव। मैं अपने सर्वर कुंजी को सीधे मेरे फायरबेस कंसोल से कॉपी कर रहा हूं।
जासन

25
किसी विशेष उपयोगकर्ता या विषय के बजाय सभी उपयोगकर्ताओं को कैसे भेजें?
विनाभाई 4

3
मुझे यह त्रुटि संदेश CURL स्निपेट के साथ मेरे शुरुआती प्रयासों में से एक में मिला: फ़ील्ड "प्राथमिकता" एक JSON नंबर होना चाहिए: 10. जब मैंने अंत में 10 से उद्धरण चिह्नों को हटा दिया, तो यह काम किया।
अल्बर्ट सी ब्रौन

2
@ vinbhai4u क्या आपको जवाब मिला है? मैं भी उस पर फिदा हूं। सभी एप्लिकेशन उपयोगकर्ताओं को यह कैसे भेजें?
रोहित

51

यह CURL का उपयोग करके काम करता है

function sendGCM($message, $id) {


    $url = 'https://fcm.googleapis.com/fcm/send';

    $fields = array (
            'registration_ids' => array (
                    $id
            ),
            'data' => array (
                    "message" => $message
            )
    );
    $fields = json_encode ( $fields );

    $headers = array (
            'Authorization: key=' . "YOUR_KEY_HERE",
            'Content-Type: application/json'
    );

    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_POST, true );
    curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields );

    $result = curl_exec ( $ch );
    echo $result;
    curl_close ( $ch );
}

?>

$message डिवाइस पर भेजने के लिए आपका संदेश है

$idहै उपकरणों पंजीकरण टोकन

YOUR_KEY_HERE आपकी सर्वर API कुंजी (या लीगेसी सर्वर API कुंजी) है


Firebase Console में fcm.googleapis.com/fcm/send में कोई पुश मैसेजिंग डेटा नहीं है ?
महमूदुल हक़

1
ब्राउज़र में पुश सूचना भेजने के लिए मैं कहाँ से डिवाइस पंजीकरण आईडी प्राप्त कर सकता हूँ?
अमित जोशी

यह पूरी तरह से काम करता है, लेकिन लंबे पाठ के कारण मुझे मिल रहा है {"multicast_id":3694931298664346108,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MessageTooBig"}]}। इसे ठीक करने के लिए क्या किया जा सकता है?
अलीशा लामिछाने

@AlishaLamichhane क्या आपका संदेश 4096 बाइट्स से बड़ा है? यदि आप अपने संदेश को आधार नहीं बना सकते हैं (पाठ में कुछ गड़बड़ हो सकती है)। यदि यह 4096 बाइट्स से बड़ा है ... ठीक है, तो यह एफसीएम सीमा है।
रिक

47

एक सेवा एपीआई का उपयोग करें।

यूआरएल: https://fcm.googleapis.com/fcm/send

विधि प्रकार: POST

हेडर:

Content-Type: application/json
Authorization: key=your api key

शारीरिक / पेलोड:

{ "notification": {
    "title": "Your Title",
    "text": "Your Text",
     "click_action": "OPEN_ACTIVITY_1" // should match to your intent filter
  },
    "data": {
    "keyname": "any value " //you can get this data as extras in your activity and this data is optional
    },
  "to" : "to_id(firebase refreshedToken)"
} 

और इसके साथ अपने ऐप में आप नीचे दी गई कोड को अपनी गतिविधि में जोड़ सकते हैं:

<intent-filter>
    <action android:name="OPEN_ACTIVITY_1" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

इसके अलावा Firebase onMessageReceived पर जवाब की जाँच करें जब पृष्ठभूमि में app नहीं कहा जाता है


अंकित, मैं विशिष्ट डिवाइस आईडी को भेज सकता हूं। हालाँकि, मैं सभी को नहीं भेज सकता। "to" : "to_id(firebase refreshedToken)"डिवाइस आईडी के बजाय मुझे क्या रखना है ? "all"बिल्कुल काम नहीं कर रहा है। मैं WebRequestअधिसूचना भेजने के लिए C # का उपयोग कर रहा हूं । @ आशिकुर्रहमान आपके सुझाव का भी स्वागत करते हैं। मैं 3-4 दिनों से संघर्ष कर रहा हूं।
रविमाली

3
कोई बात नहीं। मुझे इसका हल मिल गया। :: "/ विषयों / सभी" सभी उपकरणों को सूचनाएं भेजेंगे या यदि आप केवल IOS को ios के साथ और एंड्रॉइड के लिए सभी को बदलना चाहते हैं, तो 'android' से बदल दें। ये तयशुदा विषय हैं। मेरा अनुमान।
रविमिला


अधिक जानकारी के लिए इस ब्लॉगपोस्ट को पढ़ें -> developine.com/…
विकासशील

@Ankit, नमस्ते, क्या आप निर्दिष्ट कर सकते हैं कि लक्ष्य डिवाइस की आईडी कैसे प्राप्त करें?
आनंद राज

40

कर्ल का उपयोग करने वाले उदाहरण

विशिष्ट उपकरणों को संदेश भेजें

विशिष्ट उपकरणों को संदेश भेजने के लिए, पंजीकरण ऐप को विशिष्ट ऐप इंस्टेंस के लिए सेट करें

curl -H "Content-type: application/json" -H "Authorization:key=<Your Api key>"  -X POST -d '{ "data": { "score": "5x1","time": "15:10"},"to" : "<registration token>"}' https://fcm.googleapis.com/fcm/send

विषयों को संदेश भेजें

यहाँ विषय है: / विषयों / फू-बार

curl -H "Content-type: application/json" -H "Authorization:key=<Your Api key>"  -X POST -d '{ "to": "/topics/foo-bar","data": { "message": "This is a Firebase Cloud Messaging Topic Message!"}}' https://fcm.googleapis.com/fcm/send

उपकरण समूहों को संदेश भेजें

एक उपकरण समूह में संदेश भेजना एक व्यक्तिगत डिवाइस पर संदेश भेजने के समान है। डिवाइस समूह के लिए अद्वितीय अधिसूचना कुंजी के पैरामीटर के लिए सेट करें

curl -H "Content-type: application/json" -H "Authorization:key=<Your Api key>"  -X POST -d '{"to": "<aUniqueKey>","data": {"hello": "This is a Firebase Cloud Messaging Device Group Message!"}}' https://fcm.googleapis.com/fcm/send

सेवा एपीआई का उपयोग करने वाले उदाहरण

API URL: https://fcm.googleapis.com/fcm/send

हेडर

Content-type: application/json
Authorization:key=<Your Api key>

अनुरोध विधि: POST

शरीर का अनुरोध करें

विशिष्ट उपकरणों के लिए संदेश

{
  "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to": "<registration token>"
}

विषयों को संदेश

{
  "to": "/topics/foo-bar",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!"
  }
}

डिवाइस समूहों को संदेश

{
  "to": "<aUniqueKey>",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!"
  }
}

आपको एंडपॉइंट url fcm.googleapis.com/fcm/send कहां मिला , इसका कोई व्हाट्सएप फायरबेस डॉक में उल्लेख नहीं किया गया है?
उत्सव गुप्ता

1
आप पा सकते हैं कि इस लिंक में firebase.google.com/docs/cloud-messaging/server
JR

@JR मैंने एक चैट एप्लिकेशन बनाया है जिसमें जब कोई उपयोगकर्ता रिसीवर को संदेश भेजता है तो रिसीवर को एक अधिसूचना संदेश मिलना चाहिए। इस मामले में मैं आपके उत्तर का उपयोग कैसे कर सकता हूं? तो मुझे क्षेत्र "के लिए" का मूल्य क्या देना चाहिए?
आनंद राज

@ अनद राज ने मेरे जवाब में "विशिष्ट उपकरणों पर संदेश भेजें" का उल्लेख किया है
जेआर

25

जैसा कि फ्रैंक ने उल्लेख किया है, आप अपने स्वयं के बैक-एंड से पुश सूचना को ट्रिगर करने के लिए फायरबेस क्लाउड मैसेजिंग (एफसीएम) एचटीटीपी एपीआई का उपयोग कर सकते हैं। लेकिन आप नहीं कर पाएंगे

  1. फायरबेस उपयोगकर्ता पहचानकर्ता (यूआईडी) को सूचनाएं भेजें और
  2. उपयोगकर्ता सेगमेंट को सूचनाएं भेजें (उपयोगकर्ता कंसोल पर आपके जैसे गुणों और घटनाओं को लक्षित कर सकते हैं)।

अर्थ: आपको अपने आप को FCM / GCM पंजीकरण आईडी (पुश टोकन) स्टोर करना होगा या उपयोगकर्ताओं की सदस्यता के लिए FCM विषयों का उपयोग करना होगा। यह भी ध्यान रखें कि एफसीएम फायरबेस नोटिफिकेशन के लिए एपीआई नहीं है , यह शेड्यूलिंग या ओपन-रेट एनालिटिक्स के बिना निचले स्तर का एपीआई है। फायरबेस नोटिफिकेशन का निर्माण एफसीएम में शीर्ष पर किया जाता है।


6

सबसे पहले आपको एंड्रॉइड से एक टोकन प्राप्त करने की आवश्यकता है और फिर आप इस php कोड को कॉल कर सकते हैं और आप अपने ऐप में आगे की कार्रवाई के लिए डेटा भी भेज सकते हैं।

 <?php

// Call .php?Action=M&t=title&m=message&r=token
$action=$_GET["Action"];


switch ($action) {
    Case "M":
         $r=$_GET["r"];
        $t=$_GET["t"];
        $m=$_GET["m"];

        $j=json_decode(notify($r, $t, $m));

        $succ=0;
        $fail=0;

        $succ=$j->{'success'};
        $fail=$j->{'failure'};

        print "Success: " . $succ . "<br>";
        print "Fail   : " . $fail . "<br>";

        break;


default:
        print json_encode ("Error: Function not defined ->" . $action);
}

function notify ($r, $t, $m)
    {
    // API access key from Google API's Console
        if (!defined('API_ACCESS_KEY')) define( 'API_ACCESS_KEY', 'Insert here' );
        $tokenarray = array($r);
        // prep the bundle
        $msg = array
        (
            'title'     => $t,
            'message'     => $m,
           'MyKey1'       => 'MyData1',
            'MyKey2'       => 'MyData2', 

        );
        $fields = array
        (
            'registration_ids'     => $tokenarray,
            'data'            => $msg
        );

        $headers = array
        (
            'Authorization: key=' . API_ACCESS_KEY,
            'Content-Type: application/json'
        );

        $ch = curl_init();
        curl_setopt( $ch,CURLOPT_URL, 'fcm.googleapis.com/fcm/send' );
        curl_setopt( $ch,CURLOPT_POST, true );
        curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
        curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
        $result = curl_exec($ch );
        curl_close( $ch );
        return $result;
    }


?>

3

आप Google क्लाउड मैसेजिंग (GCM) के लिए उदाहरण के लिए PHP स्क्रिप्ट का उपयोग कर सकते हैं। Firebase, और इसका कंसोल, GCM के ठीक ऊपर है।

मुझे यह गितुब पर मिला: https://gist.github.com/prime31/5675017

संकेत: यह PHP स्क्रिप्ट एक Android अधिसूचना में परिणाम है ।

इसलिए: यदि आप Android में सूचना प्राप्त करना चाहते हैं और दिखाना चाहते हैं, तो कुट से इस उत्तर को पढ़ें ।


2

FCM HTTP v1 API समापन बिंदु का उपयोग करके आधार क्लाउड मैसेजिंग सर्वर को सूचना या डेटा संदेश भेजा जा सकता है। https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send

आपको फायरबेस कंसोल का उपयोग करके सेवा खाते की निजी कुंजी को उत्पन्न करने और डाउनलोड करने की आवश्यकता है और Google एपीआई क्लाइंट लाइब्रेरी का उपयोग करके एक्सेस कुंजी उत्पन्न करना है। संदेश को पोस्ट करने के लिए किसी भी http लाइब्रेरी का उपयोग करें ऊपर के बिंदु पर, नीचे कोड OkHTTP का उपयोग करके संदेश पोस्ट करता है। आप फायरबस क्लाउड मैसेजिंग पर पूरा सर्वर साइड और क्लाइंट साइड कोड पा सकते हैं और कई क्लाइंट्स को संदेश भेज सकते हैं जो fcm विषय उदाहरण का उपयोग कर रहे हैं

यदि किसी विशिष्ट क्लाइंट संदेश को भेजने की आवश्यकता है, तो आपको क्लाइंट की फ़ायरबेस पंजीकरण कुंजी प्राप्त करने की आवश्यकता है, FCI सर्वर उदाहरण के लिए क्लाइंट या डिवाइस विशिष्ट संदेश भेजना देखें

String SCOPE = "https://www.googleapis.com/auth/firebase.messaging";
String FCM_ENDPOINT
     = "https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send";

GoogleCredential googleCredential = GoogleCredential
    .fromStream(new FileInputStream("firebase-private-key.json"))
    .createScoped(Arrays.asList(SCOPE));
googleCredential.refreshToken();
String token = googleCredential.getAccessToken();



final MediaType mediaType = MediaType.parse("application/json");

OkHttpClient httpClient = new OkHttpClient();

Request request = new Request.Builder()
    .url(FCM_ENDPOINT)
    .addHeader("Content-Type", "application/json; UTF-8")
    .addHeader("Authorization", "Bearer " + token)
    .post(RequestBody.create(mediaType, jsonMessage))
    .build();


Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
    log.info("Message sent to FCM server");
}

मेरे मित्र, fcm.googleapis.com/v1/projects/zoftino-stores/messages:send इस लिंक की समय सीमा समाप्त होती दिख रही है!
नासर निकज़ाद

1
आपको अपने Google प्रोजेक्ट url का उपयोग करने की आवश्यकता है, न कि एक, अपने प्रोजेक्ट नाम के साथ "zotino-store" को बदलें
अर्णव राव

2

इस लिंक से इस समाधान ने मुझे बहुत मदद की। आप इसे देख सकते हैं।

निर्देश की उन रेखाओं के साथ कर्ल.एफ़पी फ़ाइल काम कर सकती है।

<?php 
// Server key from Firebase Console define( 'API_ACCESS_KEY', 'AAAA----FE6F' );
$data = array("to" => "cNf2---6Vs9", "notification" => array( "title" => "Shareurcodes.com", "body" => "A Code Sharing Blog!","icon" => "icon.png", "click_action" => "http://shareurcodes.com"));
$data_string = json_encode($data);
echo "The Json Data : ".$data_string;
$headers = array ( 'Authorization: key=' . API_ACCESS_KEY, 'Content-Type: application/json' );
$ch = curl_init(); curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, $data_string);
$result = curl_exec($ch);
curl_close ($ch);
echo "<p>&nbsp;</p>";
echo "The Result : ".$result;

याद है you need to execute curl.php file using another browser ie not from the browser that is used to get the user token. You can see notification only if you are browsing another website.


0

अगर आप android से पुश नोटिफिकेशन भेजना चाहते हैं तो मेरे ब्लॉग पोस्ट को देखें

बाहर सर्वर के साथ एक Android फोन से दूसरे के लिए पुश सूचनाएं भेजें।

धक्का अधिसूचना भेजने के अलावा कुछ भी नहीं है, https://fcm.googleapis.com/fcm/send करने के लिए एक पोस्ट अनुरोध है

वॉली का उपयोग करके कोड स्निपेट:

    JSONObject json = new JSONObject();
 try {
 JSONObject userData=new JSONObject();
 userData.put("title","your title");
 userData.put("body","your body");

json.put("data",userData);
json.put("to", receiverFirebaseToken);
 }
 catch (JSONException e) {
 e.printStackTrace();
 }

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://fcm.googleapis.com/fcm/send", json, new Response.Listener<JSONObject>() {
 @Override
 public void onResponse(JSONObject response) {

Log.i("onResponse", "" + response.toString());
 }
 }, new Response.ErrorListener() {
 @Override
 public void onErrorResponse(VolleyError error) {

}
 }) {
 @Override
 public Map<String, String> getHeaders() throws AuthFailureError {

Map<String, String> params = new HashMap<String, String>();
 params.put("Authorizationey=" + SERVER_API_KEY);
 params.put("Content-Typepplication/json");
 return params;
 }
 };
 MySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);

मैं आप सभी को सुझाव देता हूं कि पूरी जानकारी के लिए मेरे ब्लॉग पोस्ट को देखें।



0

Firebase कंसोल का उपयोग करके आप एप्लिकेशन पैकेज के आधार पर सभी उपयोगकर्ताओं को संदेश भेज सकते हैं। लेकिन CURL या PHP API के साथ संभव नहीं है।

एपीआई के माध्यम से आप विशिष्ट डिवाइस आईडी या सब्स्क्राइब्ड यूजर्स को चुनिंदा विषय या सब्स्क्राइब्ड टॉपिक यूजर्स को नोटिफिकेशन भेज सकते हैं।

Get a view on following link. It will help you.
https://firebase.google.com/docs/cloud-messaging/send-message


0

यदि आप PHP का उपयोग कर रहे हैं, तो मैं Firebase के लिए PHP SDK का उपयोग करने की सलाह देता हूं: Firebase Admin SDK । एक आसान कॉन्फ़िगरेशन के लिए आप इन चरणों का पालन कर सकते हैं:

Firebase से प्रोजेक्ट क्रेडेंशियल json फ़ाइल प्राप्त करें ( एसडीके प्रारंभ करें ) और इसे अपनी परियोजना में शामिल करें।

अपने प्रोजेक्ट में SDK इंस्टॉल करें। मैं संगीतकार का उपयोग करता हूं:

composer require kreait/firebase-php ^4.35

एसडीके प्रलेखन में क्लाउड मैसेजिंग सत्र से किसी भी उदाहरण की कोशिश करें :

use Kreait\Firebase;
use Kreait\Firebase\Messaging\CloudMessage;

$messaging = (new Firebase\Factory())
->withServiceAccount('/path/to/firebase_credentials.json')
->createMessaging();

$message = CloudMessage::withTarget(/* see sections below */)
    ->withNotification(Notification::create('Title', 'Body'))
    ->withData(['key' => 'value']);

$messaging->send($message);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.