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

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

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

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

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

Используйте сервис api.

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

Тип метода: POST

Заголовки:

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

Тело / Payload:

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

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

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

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

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

 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

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

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

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

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

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

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

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

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

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

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

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

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

отправка push-уведомления – это всего лишь сообщение для 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); 

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

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