2016-08-26 3 views
1

Я пытаюсь отправить уведомления FCM с помощью скрипта PHP, на событие вставки базы данных, я попытался отправить с консоли FCM, он отлично работал, используя параметр темы, зная, что я зарегистрировал экземпляр приложения в какой-то теме "exptopic", используя следующий код в классе MainActivity.java OnCreate:Уведомление FCM для android

FirebaseMessaging.getInstance().subscribeToTopic("exptopic"); 

Теперь PHP скрипт выглядит следующим образом:

function sendMessage($data,$target){ 
    //FCM api URL 
    $url = 'https://fcm.googleapis.com/fcm/send'; 

    //api_key available in Firebase console -> project settings -> cloud messaging -> server key 

    $server_key = "API_KEY";//my api key 

    $fields = array(); 
    $fields['data'] = array('message'=>$data); 
    $fields['to'] = $target; 

    $headers = array('content-type:application/json', 
      'Authorization:key='.$server_key); 

    $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_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
    $result = curl_exec($ch); 

    if($result === FALSE){ 
     die('FCM Send error: '.curl_error($ch)); 
     echo 'notification not sent'; 
    } 
    curl_close($ch); 
    echo $result; 
    return $result; 
} 

Очевидно $target = "exptopic", когда я запускаю функцию snedMessage, она возвращает следующий результат:

{"multicast_id":6779996340041741184,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]} 

Помогите пожалуйста?

+0

MySQL, кажется, не имеют отношение к этому вопросу, тег удаляется. – tadman

ответ

0

Вам не хватает поля priority в данных. Попробуйте это:

$fields["priority"] = "high" //This is required 

EDIT:

Я с успехом с этим телом. Может быть, дать этому попытку:

<?php 

// Get cURL resource 
$ch = curl_init(); 

// Set url 
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 

// Set method 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 

// Set options 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// Set headers 
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
    "Authorization: key=API_KEY", 
    "Content-Type: application/json", 
] 
); 
// Create body 
$json_array = [ 
     "notification" => [ 
      "title" => "TEST", 
      "sound" => "default", 
      "body" => $data 
     ], 
     "to" => $target, 
     "priority" => "high" 
    ]; 
$body = json_encode($json_array); 

// Set body 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $body); 

// Send the request & save response to $resp 
$resp = curl_exec($ch); 

if(!$resp) { 
    die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch)); 
} else { 
    echo "Response HTTP Status Code : " . curl_getinfo($ch,  CURLINFO_HTTP_CODE); 
    echo "\nResponse HTTP Body : " . $resp; 
} 

// Close request to clear up some resources 
curl_close($ch); 
+0

Спасибо за ответ, но он вернул ту же ошибку, я не думаю, что это проблема –

+0

Проверьте обновление. Удачи. –

+0

спасибо большое –

1

на основе this documentation, то to поле должно быть /topics/exptopic

+0

спасибо, что это было –

+1

Если этот ответ был полезен, нажмите кнопку вверху слева от него. Если он ответил на ваш вопрос, нажмите галочку, чтобы принять его. Таким образом, другие знают, что вам (в достаточной мере) помогли. –

Смежные вопросы