Firebase Konsolu'nu kullanmadan nasıl bir Firebase Bulut Mesajlaşma bildirimi gönderebilirim?


200

Bildirimler için yeni Google hizmetiyle başlıyorum Firebase Cloud Messaging.

Bu kod sayesinde https://github.com/firebase/quickstart-android/tree/master/messaging Firebase Kullanıcı Konsolumdan Android cihazıma bildirim gönderebildim .

Firebase konsolunu kullanmadan bildirim göndermenin herhangi bir API'sı veya yolu var mı? Örneğin, bir PHP API'sı veya bunun gibi bir şey, doğrudan kendi sunucumdan bildirim oluşturmak için.


1
Bildirim göndermek için sunucunuzu nerede barındırıyorsunuz?
Rodrigo Ruiz


@David Corral, Cevabımı da kontrol et. stackoverflow.com/a/38992689/2122328
Sandeep_Devhare

Nasıl çalıştığını görmek istiyorsanız FCM bildirimleri göndermek için bir bahar uygulaması yazdınız
Aniket Thakur 3:16

Ariteyi cihaza iletmek için güçlendirme kullanabilirsiniz. stackoverflow.com/questions/37435750/…
eurosecom

Yanıtlar:


218

Firebase Cloud Messaging, mesaj göndermek için arayabileceğiniz sunucu tarafı API'larına sahiptir. Https://firebase.google.com/docs/cloud-messaging/server adresine bakın .

Bir mesaj göndermek, curlbir HTTP uç noktasını aramak için kullanmak kadar basit olabilir . Bkz. 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
İOS'ta cihaz kimliğini nasıl alabilirim? Üzerinde olsun belirteci o cihazı mı NSData: didRegisterForRemoteNotificationsWithDeviceToken deviceToken ya da biz birlikte olsun uzun bir FIRInstanceID.instanceID () jetonu (). ?
FelipeOliveira

3
Frank Ben ilerici bir webapp üzerinde push bildirimleri eklemek ve bir http isteği göndermek için POstman kullanarak itfaiye belgeleri ve codelabs kılavuzu takip, ama ben 401 hata almaya devam. Baska öneri. Sunucu anahtarımı doğrudan firebase konsolumdan kopyalıyorum.
jasan

25
belirli bir kullanıcı veya konu yerine tüm kullanıcılara nasıl gönderilir?
vinbhai4u

3
Bu hata iletisini CURL snippet ile ilk denemelerimden birinde aldım: Alan "öncelik" bir JSON numarası olmalıdır: 10. Sonunda 10'dan tırnak işaretlerini kaldırdıktan sonra çalıştı.
albert c braun

2
@ vinbhai4u Cevabı alıyor musunuz? Ben de buna takıldım. Tüm uygulama kullanıcılarına nasıl gönderilir?
Rohit

52

Bu CURL kullanarak çalışır

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 cihaza gönderme mesajınız

$idolan cihazlar kayıt belirteci

YOUR_KEY_HERE API Anahtarınız (veya Eski Sunucu API Anahtarınız)


Firebase Konsolu'nun fcm.googleapis.com/fcm/send içine kaydetme push mesajı verileri yok mu?
Mahmudul Haque Khan

1
cihaz kayıt kimliği nereden tarayıcıya push bildirim göndermek için?
Amit Joshi

bu mükemmel çalışıyor, ancak uzun metin nedeniyle alıyorum {"multicast_id":3694931298664346108,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MessageTooBig"}]}. Bunu düzeltmek için ne yapılabilir?
Alisha Lamichhane

@AlishaLamichhane Mesajınız 4096 bayttan daha büyük mü? Değilse, base64 mesajınızı kodlayabilirsiniz (metin ile ilgili bir sorun olabilir). Eğer 4096 bayttan büyükse ... bu FCM sınırıdır.
Rik

47

Bir hizmet API'sı kullanın.

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

Yöntem Türü: POST

Başlıkları:

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

Gövde / Taşıma kapasitesi:

{ "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)"
} 

Ve uygulamanızda bu ile çağrılacak etkinliğinize aşağıdaki kodu ekleyebilirsiniz:

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

Ayrıca arka planda uygulama olduğunda Firebase onMessageReceived üzerindeki yanıtı kontrol edin


Ankit, belirli bir cihaz kimliğine gönderebilirim. Ancak herkese gönderemiyorum. "to" : "to_id(firebase refreshedToken)"Cihaz kimliği yerine ne yazmalıyım? "all"hiç çalışmıyor. WebRequestBildirim göndermek için C # kullanıyorum . @AshikurRahman öneriniz de hoş geldiniz. 3-4 günden beri mücadele veriyorum.
Ravimallya

3
Boşver. Çözümü buldum. için: "/ topics / all" tüm cihazlara bildirim gönderir veya yalnızca IOS'u ios ile değiştirmeyi ve android için değiştirmeyi istiyorsanız, `android 'ile değiştirin. Bunlar varsayılan konulardır. Sanırım.
Ravimallya


Daha fazla ayrıntı için bu blog yayınını okuyun -> developine.com/...
Developine

@Ankit, Merhaba, hedef cihazın kimliğini nasıl alacağınızı belirtebilir misiniz?
Anand Raj

40

Curl kullanan örnekler

Belirli cihazlara mesaj gönderme

Belirli cihazlara mesaj göndermek için belirli uygulama örneği için kayıt jetonunu ayarlayın

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

Konulara mesaj gönderme

işte konu: / topics / foo-bar

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

Cihaz gruplarına mesaj gönderme

Bir aygıt grubuna mesaj göndermek, tek bir aygıta mesaj göndermeye çok benzer. To parametresini aygıt grubu için benzersiz bildirim anahtarına ayarlayın

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

Hizmet API'sini kullanan örnekler

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

Başlıkları

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

İstek Yöntemi: POST

Talep Gövdesi

Belirli cihazlara mesajlar

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

Konulara mesajlar

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

Cihaz gruplarına mesajlar

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

Firebase doc'de bahsi geçen hiçbir yer fcm.googleapis.com/fcm/send, nerede uç nokta buldunuz?
Utsav Gupta


@JR Bir kullanıcı, alıcıya bir mesaj gönderdiğinde, alıcının bir bildirim mesajı alması gereken bir sohbet uygulaması oluşturdum. Bu durumda cevabınızı nasıl kullanabilirim? Peki "to" alanı için değer vermek zorundayım?
Anand Raj

@ Anad Raj cevabımda "Belirli cihazlara mesaj gönder" başlığına bakın
JR

25

Frank'in belirttiği gibi, Firebase Cloud Messaging (FCM) HTTP API'sını kendi arka uçtan push bildirimini tetiklemek için kullanabilirsiniz. Ama yapamayacaksın

  1. Firebase Kullanıcı Tanımlayıcısına (UID) bildirim gönderme ve
  2. kullanıcı segmentlerine bildirim gönderme (kullanıcı konsolunda yapabileceğiniz gibi özellikleri ve etkinlikleri hedefleme).

Anlamı: FCM / GCM kayıt kimliklerini (push belirteçleri) kendiniz saklamanız veya kullanıcılara abone olmak için FCM konularını kullanmanız gerekir. Ayrıca, FCM'nin Firebase Bildirimleri için bir API olmadığını, zamanlama veya açık hızlı analizler olmadan daha düşük düzeyli bir API olduğunu unutmayın. Firebase Bildirimleri, FCM'de en üst düzeyde oluşturulmuştur.


6

Öncelikle android'den bir jeton almanız gerekir ve daha sonra bu php kodunu çağırabilirsiniz ve hatta uygulamanızdaki diğer işlemler için veri gönderebilirsiniz.

 <?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;
    }


?>


2

Bildirim veya veri mesajı, FCM HTTP v1 API uç noktası kullanılarak firebase temel bulut mesajlaşma sunucusuna gönderilebilir. https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send .

Firebase konsolunu kullanarak özel hizmet hesabı anahtarı oluşturmanız ve indirmeniz ve google api istemci kitaplığını kullanarak erişim anahtarı oluşturmanız gerekir. Yukarıdaki uç noktaya mesaj göndermek için herhangi bir http kütüphanesini kullanın, aşağıdaki kod OkHTTP kullanarak mesaj gönderme gösterir. Firebase bulut mesajında tam sunucu tarafı ve istemci tarafı kodu bulabilir ve fcm konu örneği kullanarak birden fazla istemciye mesaj gönderebilirsiniz

Belirli bir istemci mesajının gönderilmesi gerekiyorsa, istemcinin firebase kayıt anahtarını almanız gerekir, bkz . FCM sunucusu örneğine istemci veya cihaza özel mesaj gönderme

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");
}

Arkadaşım, fcm.googleapis.com/v1/projects/zoftino-stores/messages:send bu bağlantının süresi doldu!
Naser Nikzad

1
Google proje URL'nizi kullanmalısınız, bu değil, "zotino-store" yerine proje adınızı yazın
Arnav Rao

2

bu bağlantıdan bu çözüm bana çok yardımcı oldu. kontrol edebilirsiniz.

Bu talimat satırı ile curl.php dosyası çalışabilir.

<?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;

Hatırlamak 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.


1
Go to cloud Messaging select:  Server key



function sendGCM($message, $deviceToken) {

    $url = 'https://fcm.googleapis.com/fcm/send';
    $fields = array (
            'registration_ids' => array (
                $id
            ),
            'data' => array (
                "title" =>  "Notification title",
                "body" =>  $message,
            )
    );
    $fields = json_encode ( $fields );
    $headers = array (
        'Authorization: key=' . "YOUR_SERVER_KEY",
        '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);
}

0

Android'den push bildirimleri göndermek istiyorsanız blog gönderime göz atın

Dışarı sunucu ile 1 android telefondan Push Bildirimleri gönderin.

push bildirimi göndermek, https://fcm.googleapis.com/fcm/send adresine bir gönderi talebinden başka bir şey değildir

voleybol kullanarak kod pasajı:

    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);

Tüm ayrıntılar için hepinize blog yayınımı kontrol etmenizi öneririm.



0

Firebase Konsolu'nu kullanarak uygulama paketine dayalı olarak tüm kullanıcılara mesaj gönderebilirsiniz. Ancak CURL veya PHP API ile mümkün değildir.

API ile Belirli bir cihaz kimliğine veya abone olan kullanıcılara seçilen konuya veya abone olunan konu kullanıcılarına bildirim gönderebilirsiniz.

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


0

PHP kullanıyorsanız Firebase için PHP SDK kullanmanızı öneririz: Firebase Admin SDK . Kolay bir yapılandırma için aşağıdaki adımları uygulayabilirsiniz:

Firebase'den proje kimlik bilgileri json dosyasını alın (sdk'yi başlatın ) ekleyin.

SDK'yı projenize yükleyin. Besteci kullanıyorum:

composer require kreait/firebase-php ^4.35

SDK belgelerindeki Cloud Messaging oturumundan herhangi bir örnek deneyin :

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.