firebase クラウド メッセージング - なぜいつも不正なリクエスト fcm が発生するのですか?

okwaves2024-01-25  9

REST API を使用して FCM から Android クライアントに通知を送信しようとしています。私のコードは次のとおりです: ```

post_offline_message(From, To, Body) ->
    K = "FCM key",
    U = "https://fcm.googleapis.com/fcm/send",
    P = #{
      payload => #{
        to => <<"rid">>,
        priority => <<"high">>,
        data => #{
          <<"title">> => <<"Some Title">>,
          <<"message">> => <<"Hi">>
        }
      }
    },
    EP = jiffy:encode(P),
    ?INFO_MSG("EP data: ~p", [EP]),
    httpc:set_options([{keep_alive_timeout, 0}]),
    {_, Resp} = httpc:request(post, {U, [{"Authorization", "key=" ++ K}], "application/json", EP}, [], []),
    ?INFO_MSG("FCM response: ~p", [Resp]).
My EP data (payload) is this:
**<<"{\"payload\":{\"to\":\"dOqZOggYQZG6xKVY9P4_Xi:APA91bG0kuM-o_lSf3fUaWcyiW0fVj8-L49QgzU6rWfxi3o5lMaKapkOjvvLUxm-e78XS49TVl5jjgQt6DrRKTaDK2xzg-ffm1Qe4Xx-61_Hrmr6I0cPOcGAZ9Wv7QgFFjGXtWwWEvSi\",\"priority\":\"high\",\"data\":{\"title\":\"Some Title\",\"message\":\"Hi\"}}}">>** 
and response from FCM is: 
**{{"HTTP/1.1",400,"Bad Request"},[{"cache-control","private, max-age=0"},{"date","Thu, 03 Sep 2020 08:57:56 GMT"},{"accept-ranges","none"},{"server","GSE"},{"vary","Accept-Encoding"},{"content-length","3"},{"content-type","text/plain; charset=UTF-8"},{"expires","Thu, 03 Sep 2020 08:57:56 GMT"},{"x-content-type-options","nosniff"},{"x-frame-options","SAMEORIGIN"},{"content-security-policy","frame-ancestors 'self'"},{"x-xss-protection","1; mode=block"},{"alt-svc","h3-29=\":443\"; ma=2592000,h3-27=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""}],"to\n"}**
Please suggest what I am doing wrong or missing something. I am calling this method from ejabberd hook which is **offline_message_hook**.


------------------------

4 時間を費やした後、間違いに気づきました。リクエストからペイロードタグを削除するだけでうまくいきました。私の更新されたリクエストは次のとおりです:

post_offline_message(From, To, Body) ->
    K = "FCM key",
    U = "https://fcm.googleapis.com/fcm/send",
    P = #{
        to => <<"rid">>,
        priority => <<"high">>,
        data => #{
          <<"title">> => <<"Some Title">>,
          <<"message">> => <<"Hi">>
        }
    },
    EP = jiffy:encode(P),
    ?INFO_MSG("EP data: ~p", [EP]),
    httpc:set_options([{keep_alive_timeout, 0}]),
    {_, Resp} = httpc:request(post, {U, [{"Authorization", "key=" ++ K}], "application/json", EP}, [], []),
    ?INFO_MSG("FCM response: ~p", [Resp]).

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。