我剛剛在我的應用程序中使用Firebase集成了推送通知。我已閱讀FCM docs中的全部說明。獲取Firebase推送通知的問題Android
它只是自動生成服務器密鑰,並提供給我我放在應用程序的根文件夾內的google-services.json
文件。以下是按鍵的屏幕截圖。
然後,我只在我的軟件包名稱和SHA1-Fingerprints中選擇了Android應用程序下的關鍵限制。我也在控制檯中啓用了GCM。
令我瘋狂的事情是,當我從控制檯發送通知時,我收到它,但是當我試圖從我的服務器發送它時,它顯示我錯誤401 Unauthorized
。
那麼我需要在後端更改我的代碼嗎?我在後端使用服務器密鑰發送推送通知,是否需要將發件人ID發送到後端? Google是否改變了它的機制?對於FCM
我的後端代碼:
$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);
對於GCM:
static function send_notifications($registatoin_ids, $messages) {
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_ids,
'data' => $messages,
);
$apiKey='AIzaSyDzto66Dq0neU3AKjujr0eCEn2glWuk0-E';
$headers = array(
//'Authorization: key = AIzaSyBpZ3t68mtXRa4oRft9fmbaHaXFb-H_k-8',
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
// Execute post
$result = curl_exec($ch);
//echo "<pre>";
//print_r($result);die;
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
// Close connection
curl_close($ch);
return $result;
}
感謝。
請分享您的後端代碼,因爲問題來自於您的問題 –
在android上與服務器共享生成的令牌?這是需要發送通知只有註冊手機 – Raghunandan
@ Raghunandan,是的,我已經發送我的服務器密鑰到後端,請看我的更新後,我也添加了服務器端代碼 – sid