釣りとキャンプとコーヒーが好きなサラリーマンの趣味サイト。釣り場やキャンプ場とかの見てきたことや、Webの仕事で困ったことを記録していきます。

WindowsのCurlコマンドでFCMプッシュを送るときに発生したエラー解消方法


FCM経由で送信されたWebプッシュ通知を受信・表示する方法を先日書きました。
⇒PWAのホームアイコンにFCMを使ってWebプッシュ通知を送信する方法。

サイト側の実装が終わった後、以下のようにcurlコマンドでFCMにプッシュ通知をリクエストします。

curl 
 -X POST 
 -H "Authorization:key=サーバーキー" 
 -H "Content-Type:application/json" 
 -d "{\"notification\":
        {\"title\":\"Webtanpush-test\",
         \"body\":\"Webtan-pushtestu-body!\",
         \"icon\":\"アイコンへのパス\",
         \"click_action\":\"https://sumida-seabass.sakura.ne.jp\"
        },
      \"to\":\"デバイストークン"
     }" 
https://fcm.googleapis.com/fcm/send

これをうまく通すのに結構苦戦したので、その時出力されたエラーと解消法をまとめておきます。

今回使うcurlコマンド

今回指定しているcurlコマンドは下記です。
POSTメソッドでHttpリクエストをしていて、認証キーとJSON形式のデータを渡してリクエストするというものです。

コマンド 意味
-H (または–header) HTTPヘッダーの指定(情報の付与)
-X HTTPメソッドの指定
-d(または–data) データの指定

curl: (3) Port number ended with ”

打ち込んでいるcurlコマンドに空白が適切に含まれていないことで発生しています。コマンドをエディタに書き出して、空白位置をなどを修正しましょう。

curl: (3) [globbing] nested brace in column

これも1つ目のと同じです。打ち込んでいるcurlコマンドに空白が適切に含まれていないことで発生しています。コマンドをエディタに書き出して、空白位置をなどを修正しましょう。

The request was missing an Authentication Key (FCM Token).

curlコマンドを正しく書けた後、コマンドプロンプトには下記のようなエラーが表示されます。

<HTML>
<HEAD>
<TITLE>The request was missing an Authentication Key (FCM Token). 
Please, refer to section "Authentication" of the FCM documentation, at https://firebase.google.com/docs/cloud-messaging/server.</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>The request was missing an Authentication Key (FCM Token). Please, refer to section "Authentication" of the FCM documentation, at https://firebase.google.com/docs/cloud-messaging/server.
<H2>Error 401
</BODY>
</HTML>

認証が通ってないといわれています。curlコマンドの「サーバーキー」の部分を確認してください。

curl 
 -X POST 
 -H "Authorization:key=サーバーキー" 
 -H "Content-Type:application/json" 
 -d "{\"notification\":
        {\"title\":\"Webtanpush-test\",
         \"body\":\"Webtan-pushtestu-body!\",
         \"icon\":\"アイコンへのパス\",
         \"click_action\":\"https://sumida-seabass.sakura.ne.jp\"
        },
      \"to\":\"デバイストークン"
     }" 
https://fcm.googleapis.com/fcm/send

上記のサーバーキーの部分には、サイトによってはWebAPIキーと書かれたりするのですが、記載する内容はFirebaseコンソール画面の「Setteings」⇒「クラウドメッセージング」に表示される「サーバーキー」です。
FCM-サーバーキー
この認証を通すのには本当に苦労しました。。。。
Firebaseのドキュメントにも記載がなかったりしたので、ほんとにお役に立てれば幸いです。

JSON_PARSING_ERROR: Unexpected character (n) at position

認証も通った後に表示されたエラーがこれです。
JSONのパースエラーらしく、原因はWindowsコマンドラインでの書き方のせい。
一重引用符(‘)を使わず二重引用符(“)のみで記載し、二重引用符の前に「\」を記載することで解決。