使用fcm http v1时,大约20次后数据消息无法正常到达

问题描述 投票:0回答:1

我写了谷歌翻译器。请理解这部分。

嗨。

将 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

但是,我发送的消息中并没有放入任何与模型相关的数据。

  • 如果向现有的FCM HTTP发出相同主题的请求,则可以正常接收数据。下面是相应的代码。
{
    "to": "this_is_test_topic",
    "data": {
        "body": "1234567890"
    }
}
  • 如果使用相同主题和令牌而不是主题请求 FCM HTTP v1 API,则可以正常接收数据。下面是相应的代码。
{
    "message": {
        "token": "asdkjasldjalksdjlk*******************",
        "data": {
            "body": "1234567890"
        },
        "android": {
            "priority": "high"
        }
    }
}
  • 所有请求响应状态码都是200
firebase firebase-cloud-messaging
1个回答
0
投票

下面的代码在 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'];

 

}

© www.soinside.com 2019 - 2024. All rights reserved.