I'm attempting to push a notification to a specific Android device using a heroku PHP server. I'm not having any luck in doing so, however.
I can push a notification through the firebase console just fine (i.e. the problem is not with my Android app).
Here is my code (which I got from How do I send a POST request with PHP?):
$url = 'https://fcm.googleapis.com/fcm/send';
$data = array('score' => '5x1', 'time' => '15:10');
// use key 'http' even if you send the request to https://...
$options = array(
  'http' => array(
    'header'  =>  "Content-type: application/json\r\n" .
                  "Authorization: key=MY_SERVER_KEY\r\n",
    'method'  => 'POST',
    'data' => http_build_query($data),
    'to' => 'MY_FCM'
  )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }
var_dump($result);
I feel like I'm doing something terribly basic wrong (like my JSON is not formatted correctly or something).
The firebase apis can be found here: https://firebase.google.com/docs/cloud-messaging/send-message
I've been working on this for a couple days now, and any assistance will be much appreciated. Thanks guys!
Update
A quick note that Heroku doesn't support the HttpRequest() class from what I've experienced, however, cURL works great. Also, I didn't mention it, but I was actually wanting a notification message to be sent, not just a data message. So, my final code looked like the following:
    $curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://fcm.googleapis.com/fcm/send",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\n
    \"notification\" : {\n
    \"body\" : \"Goku\",\n
    \"title\" : \"Over 9000\",\n
    },\n
    \"to\" : \"MY_FCM_TOKEN\"\n
    \"priority\" :
    \"high\"\n
    }",
  CURLOPT_HTTPHEADER => array(
    "authorization: key=MY_SERVER_KEY",
    "cache-control: no-cache",
    "content-type: application/json"
  ),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
 
     
    