2017-03-28 14 views
1

firebaseの実装からGoogleログインメソッドを使用しているAndroidデバイスに通知を送信する簡単なPHPコードを作成しました。それらのトークンはすでに自分のデータベースに保存されています。私は私のPHPを実行すると、通知を送信しません。だれでも、もし私が通知トラフをfirebase通知コンソールに送ると、それは動作します。これは私のPHPコードです。Firebase FCMサーバーphp-android

function sendGCM($message, $registration_ids) { 
    //FCM URL 
    $url = "https://fcm.googleapis.com/fcm/send"; 
//prepare data 
$fields = array (
    'registration_ids' => array ($registration_ids), 
    'data' => array ("message" => $message) 
); 
$fields = json_encode ($fields); 

//header data 
$headers = array ('Authorization: key=<YOUR_API_KEY>', 'Content-Type: application/json'); 

//initiate curl request 
$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); 

// execute curl request 
$result = curl_exec ($ch); 

//close curl request 
curl_close ($ch); 

//return output 
return $result; 
} 

エラー:私はこのエラーをスローし、このPHPファイルを実行し :

{ 

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

はあなたの問題をGoogleに見えることがありますか? firebaseエラーコード[here](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes)に関するページ全体があります。あなたはStackoverflowに投稿する前にいくつかのリサーチを試みるべきです。また、APIキーはここに表示しないでくださいが、コード内、ヘッダー内に設定されていることを確認してください。 – Nicolas

+0

[Firebase Cloud Messagingの参照\ _Idsを見つける場所](http://stackoverflow.com/questions/41278459/where-to-find-reference-ids-for-firebase-cloud-messaging) –

+0

可能性のある複製これは、配列IDに配列を渡しているため、配列の配列が正しくないためです。単一の文字列トークンIDを送信してみてください。うまくいくはずです。私はすでにそれが働いている。 – hablema

答えて

1

はこれを試してください: -

<?php 

// API access key from Google API's Console 
define('API_ACCESS_KEY', 'your_key'); 
$registrationIds = array($id); //$id is string not array 


// prep the bundle 
$notification = array 
(
    'title'  => 'title', 
    'body'  => 'body', 
    'icon'  => 'logo', 
    'sound'  => 'default', 
    'tag'  => 'tag', 
    'color'  => '#ffffff' 

); 

$data = array 
(
    'message' => 'message body', 
    'click_action' => "PUSH_INTENT" 
); 

$fields = array 
(
    'registration_ids' => $registrationIds, 
    'notification'  => $notification, 
    'data'    => $data, 
    'priority'   => 'normal' 

); 

$headers = array 
(
    'Authorization: key=' . API_ACCESS_KEY, 
    'Content-Type: application/json' 
); 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL, 'https://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); 
echo $result; 

?> 
+0

ありがとう、私はそれを私のPHPファイルにaplyそれが動作するかどうかを教えてください –

+0

こんにちは、私はすでに試みたが、それは同じエラーを言う。無効な登録です。define( 'API_ACCESS_KEY'、 'your_key');ここで私はちょうど私のキーの言葉を変更する必要がありますか? –

+0

@xx_name:はい、Firebaseコンソールから取得した鍵を入力する必要があります。 CloudbaseのFirebaseコンソール設定で見つけることができます。私は現在、従来のサーバーキーを使用していますが、Firebaseはサーバーキーの使用を推奨しています。両方を試すことができます。 – hablema

関連する問題