我写了谷歌翻译器。请理解这部分。
嗨。
将 API 版本从 FCM HTTP 升级到 FCM HTTP v1 时出现问题。
FCM HTTP v1 API 请求是通过 POSTMAN 发出的。
以下是发送消息正文。
{
"message": {
"topic": "this_is_test_topic",
"data": {
"body": "1234567890"
},
"android": {
"priority": "high"
}
}
}
当我发出上述请求时,即使每秒发送一两次,IOS客户端也能正常接收。
但是,ANDROID客户端在收到前20次后,在一定时间内没有收到FCM发来的消息。 消息可以在一定时间后再次发送。
这与 FCM 文档中紧凑消息的限制相同。 链接:https://firebase.google.com/docs/cloud-messaging/concept-options?hl=en#collapsible_throtdling
但是,我发送的消息中并没有放入任何与模型相关的数据。
{
"to": "this_is_test_topic",
"data": {
"body": "1234567890"
}
}
{
"message": {
"token": "asdkjasldjalksdjlk*******************",
"data": {
"body": "1234567890"
},
"android": {
"priority": "high"
}
}
}
下面的代码在 http V1 上运行良好。
{
$token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$msg = array
(
'body' => $body ,
'title' => $title,
'message' => $message,
'sound' => 'default' );
$OathAccessToken=getGoogleAccessToken();
$headers = array
(
'Authorization: Bearer ' . $OathAccessToken,
'Content-Type: application/json'
);
$message_arr = [
'消息' => [
'令牌'=>$令牌,
'数据' => $msg,
],
];
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/v1/projects/quran-abdul-basit-tartil/messages: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( $message_arr ) );
$result = curl_exec($ch );
curl_close( $ch );
} 函数 getGoogleAccessToken(){
$credentialsFilePath = 'googleAccessTokenFile.json';
$client = new \Google_Client();
$client->setAuthConfig($credentialsFilePath);
$client->addScope('https://www.googleapis.com/auth/firebase.messaging');
$client->refreshTokenWithAssertion();
$token = $client->getAccessToken();
return $token['access_token'];
}