Как я могу отправить уведомление об обмене сообщениями в облаке Firebase без использования консоли Firebase? [закрыто]


Я начинаю с нового сервиса Google для уведомлений, Firebase Cloud Messaging.

Благодаря этому коду https://github.com/firebase/quickstart-android/tree/master/messaging Я смог отправлять уведомления с моей пользовательской консоли Firebase на свое устройство Android.

Существует ли какой-либо API или способ отправки уведомления без использования консоли Firebase? Я имею в виду, например, PHP API или что-то в этом роде, чтобы напрямую создавать уведомления с моего собственного сервера.

Author: Alexander Farber, 2016-05-22

11 answers

В Firebase Cloud Messaging есть серверные API, которые вы можете вызывать для отправки сообщений. См. https://firebase.google.com/docs/cloud-messaging/server .

Отправка сообщения может быть такой же простой, как использование curl для вызова конечной точки HTTP. Видишь 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}"
 168
Author: Frank van Puffelen, 2017-02-05 22:42:03

Это работает с использованием 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 сервера)

 37
Author: Hamzah Malik, 2017-07-20 19:04:18

Используйте API службы.

URL-АДРЕС: 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 не вызывается, когда приложение в фоновом режиме

 34
Author: Ankit Adlakha, 2017-07-20 16:01:41

Примеры использования curl

Отправлять сообщения на определенные устройства

Чтобы отправлять сообщения на определенные устройства, установите токен регистрации для конкретного экземпляра приложения

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

Отправка сообщений группам устройств

Отправка сообщений группе устройств очень похожа на отправку сообщений индивидуальное устройство. Установите для параметра to значение уникального ключа уведомления для группы устройств

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-АДРЕС API : 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!"
  }
}
 28
Author: J.R, 2017-11-15 09:34:40

Как упоминал Фрэнк, вы можете использовать HTTP API Firebase Cloud Messaging (FCM) для запуска push-уведомлений с вашего собственного серверного сервера. Но вы не сможете

  1. отправлять уведомления идентификатору пользователя Firebase (UID) и
  2. отправляйте уведомления сегментам пользователей (ориентируясь на свойства и события, как это можно сделать в консоли пользователя).

Значение: вам придется самостоятельно хранить регистрационные идентификаторы FCM/GCM (push-токены) или использовать разделы FCM для подписки пользователей. Держите также имейте в виду, что FCM не является API для уведомлений Firebase, это API более низкого уровня без планирования или аналитики с открытой ставкой. Уведомления Firebase построены поверх FCM.

 22
Author: Antoine Guénard, 2016-05-26 20:42:13

Сначала вам нужно получить токен от Android, а затем вы можете вызвать этот 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;
    }


?>
 4
Author: Sandi Horvat, 2016-08-08 10:40:41

Вы можете использовать, например, PHP-скрипт для обмена сообщениями Google Cloud (GCM). Firebase и ее консоль находятся как раз на вершине GCM.

Я нашел это на github: https://gist.github.com/prime31/5675017

Подсказка: Этот PHP-скрипт приводит к уведомлению Android.

Поэтому: Прочитайте этот ответ от Koot, если вы хотите получать и показывать уведомления в Android.

 3
Author: P-Zenker, 2017-05-23 12:03:08

Если вы хотите отправлять push-уведомления с Android, ознакомьтесь с моим сообщением в блоге

Отправляйте Push-уведомления с 1 телефона Android на другой без сервера.

Отправка push-уведомления - это не что иное, как почтовый запрос https://fcm.googleapis.com/fcm/send

Фрагмент кода с использованием volley:

    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
Author: Redman, 2017-08-27 10:47:21

Уведомление или сообщение данных можно отправить на сервер обмена сообщениями firebase base cloud с помощью конечной точки API FCM HTTP v1. https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send.

Вам необходимо сгенерировать и загрузить закрытый ключ учетной записи службы с помощью консоли Firebase и сгенерировать ключ доступа с помощью клиентской библиотеки Google api. Используйте любую библиотеку http для отправки сообщения в указанную выше конечную точку, ниже код показывает отправку сообщения с использованием OkHttp. Вы можете найти полную серверную часть и код на стороне клиента в обмен сообщениями в облаке firebase и отправка сообщений нескольким клиентам с использованием примера темы fcm

Если необходимо отправить конкретное клиентское сообщение, вам необходимо получить регистрационный ключ firebase клиента, см. пример отправки сообщений клиента или устройства на сервер FCM

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");
}
 0
Author: Arnav Rao, 2017-12-16 05:15:46

С помощью консоли Firebase вы можете отправлять сообщения всем пользователям на основе пакета приложений.Но с CURL или PHP API это невозможно.

Через API Вы можете отправлять уведомления определенному идентификатору устройства или подписанным пользователям выбранной темы или подписанным пользователям темы.

Get a view on following link. It will help you.
https://firebase.google.com/docs/cloud-messaging/send-message
 0
Author: Prateek Bhardwaj, 2017-12-26 16:05:06

Или вы можете использовать облачные функции Firebase, что для меня является более простым способом реализации ваших push-уведомлений. база данных/функции-образцы

 0
Author: Laurent Maquet, 2018-01-19 13:36:17