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

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

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

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

175

Решение

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

Другие решения

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

40

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

38

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

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

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

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

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

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

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

23

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

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

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

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

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

3

Уведомление или сообщение с данными могут быть отправлены на базовый сервер обмена сообщениями 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");
}
1
По вопросам рекламы [email protected]