web-dev-qa-db-ja.com

無効なJSONペイロードを受信しました。不明な名前click_action

したがって、私は現在PWAを開発しています。

私は現在プッシュ通知で作業しており、次の非常に単純なJSON構造でバックグラウンド通知とフォアグラウンド通知の両方をすでに受信できています。

{
  "message":{
    "token":"aValidToken",
    "notification": {
      "title": "New Content!",
      "body": "A new video has been uploaded."
    }
  }
}

また、他の情報を含むデータメンバーを追加しても、不都合なく通知を受け取ることができました。

今問題は、たとえば別のメンバーを追加したいの場合、たとえばclick_actionのように、次のように投稿することです。

{
  "message":{
    "token":"aValidToken",
    "notification": {
      "title": "New Content!",
      "body": "A new video has been uploaded.",
      "click_action":"https://www.google.com.ar/"
    }
  }
}

そして、私は次のエラーを受け取ります:

{
    "error": {
        "code": 400,
        "message": "Invalid JSON payload received. Unknown name \"click_action\" at 'message.notification': Cannot find field.",
        "status": "INVALID_ARGUMENT",
        "details": [
            {
                "@type": "type.googleapis.com/google.rpc.BadRequest",
                "fieldViolations": [
                    {
                        "field": "message.notification",
                        "description": "Invalid JSON payload received. Unknown name \"click_action\" at 'message.notification': Cannot find field."
                    }
                ]
            }
        ]
    }
}

これは、他のほぼすべてのメンバーで次のように起こっています:優先度、アイコン、サウンド、バッジなど

最後に、setBackgroundMessageHandlericonおよびclick_actionをハードコーディングしてみました(これにより、呼び出された)役に立たない。アイコンは表示されず、通知をクリックしても何も起こりません。

messaging.setBackgroundMessageHandler( (notif) => {

  const notificationTitle = notif.notification.title;
  const notificationOptions = {
    body : notif.notification.body,
    icon : '/assets/icon/icon72x72.png',
    click_action : 'https://www.google.com.ar/'
  };

  return self.registration.showNotification(notificationTitle, notificationOptions);
});

これは純粋にIonic PWAプロジェクトであり、モバイルブラウザとデスクトップで実行することを目的としています。あなたが私に与えることができるあらゆるヒントに感謝します!ありがとう!

5
Franch

新しいAPIを使用しているようです: https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages

しかし、レガシーAPIのフィールドを使用しようとしています: https://firebase.google.com/docs/cloud-messaging/http-server-ref

使用しているAPIでアイコンを定義できますが、ペイロードは次のようにする必要があります。

{
  "message": {
    "token": "aValidToken",
    "webpush": {
      "notification": {
        "title": "New Content!",
        "body": "A new video has been uploaded.",
        "icon": "your_icon"
      }
    }
  }
}

Webpush通知フィールドについての詳細情報 ここ を見つけることができます。

参考までに、あなたが言及した他のほとんどのフィールド(優先度、サウンド、バッジ)はサポートされていませんどちらのAPIを使用するWebでもまだサポートされています。

編集(2018年5月10日):すべての 通知プロパティ (優先度、アイコン、サウンド、バッジなど)が新しいAPIでサポートされるようになりました。詳細は このガイド を参照してください。

10