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


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

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

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

11 159

11 ответов:

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

это работает с помощью 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 сервера)

использовать 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 не вызывается, когда приложение в фоновом режиме

примеры использования 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

отправлять сообщения в темы

здесь тема: / 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

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

отправка сообщения в группу устройств очень похожи на отправку сообщений на отдельное устройство. Установите параметр 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

примеры использования Service API

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!"
  }
}

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

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

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

сначала вам нужно получить токен от 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;
    }


?>

вы можете использовать, например, PHP-скрипт для Google Cloud Messaging (GCM). Firebase, и его консоль, просто на МОЦ.

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

подсказка: этот PHP скрипт приводит к Android уведомления.

Поэтому: Читать этот ответ от Кут если вы хотите получить и показать уведомление в Android.

Если вы хотите отправить уведомления толчка от android проверить мой пост в блоге

отправить уведомления толчка с 1 телефона android на другой без сервера.

отправка push-уведомления-это не что иное, как запрос post на 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);

Я предлагаю Вам почитать мой блог для получения полной информации.

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

вам необходимо создать и загрузить закрытый ключ учетной записи службы с помощью консоли Firebase и создать ключ доступа с помощью клиентской библиотеки google api. Используйте любую библиотеку http для отправки сообщения в верхнюю конечную точку, ниже кода показано сообщение с использованием OkHTTP. Вы можете найти полный на стороне сервера и на стороне клиента код облако опорного пункта обмена сообщениями и отправки сообщений для нескольких клиентов, используя пример ТСМ теме

Если необходимо отправить конкретное сообщение клиента, вам необходимо получить регистрационный ключ 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");
}

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

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

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

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