質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.32%

androidエミュレータへのwebプッシュ

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 317

gazigazi

score 6

androidStudioのエミュレータへfcmを使ってwebプッシュを送信したいです。
pcのchromeへのwebプッシュは成功しています。
以下、コードです。

firebase-messaging-sw.js

importScripts("https://www.gstatic.com/firebasejs/7.14.4/firebase-app.js");
importScripts(
  "https://www.gstatic.com/firebasejs/7.14.4/firebase-messaging.js"
);

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
  apiKey: "AIzaSyCJzLFZEiMIzg1EKt5HzSUZb4Ly_gsQDTk",
  authDomain: "pwatest-a13b8.firebaseapp.com",
  databaseURL: "https://pwatest-a13b8.firebaseio.com",
  projectId: "pwatest-a13b8",
  storageBucket: "pwatest-a13b8.appspot.com",
  messagingSenderId: "165204440072",
  appId: "1:165204440072:web:0e5dfacb7bb4320b288dbd",
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
  console.log(
    "[firebase-messaging-sw.js] Received background message ",
    payload
  );
  // Customize notification here
  const notificationTitle = "Background Message Title";
  const notificationOptions = {
    body: "Background Message body.",
    icon: "/firebase-logo.png",
  };

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

index.js

import firebase from "firebase/app";
import "firebase/messaging";
import "firebase/firestore";

var firebaseConfig = {
  apiKey: "AIzaSyCJzLFZEiMIzg1EKt5HzSUZb4Ly_gsQDTk",
  authDomain: "pwatest-a13b8.firebaseapp.com",
  databaseURL: "https://pwatest-a13b8.firebaseio.com",
  projectId: "pwatest-a13b8",
  storageBucket: "pwatest-a13b8.appspot.com",
  messagingSenderId: "165204440072",
  appId: "1:165204440072:web:0e5dfacb7bb4320b288dbd",
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);

const messaging = firebase.messaging();
messaging.usePublicVapidKey(
  "BANkA5IJWmPZ68TtZP7mtG9Ts7IokiWGdPzXyoWaUA5AVkt7gx2ZmkRv7YGdjj9UNbQsWEzgpIH8UN9hKOFpUDc"
);

var db = firebase.firestore();
var usersRef = db.collection("users");

navigator.permissions.query({ name: "notifications" }).then((status) => {
  if (status.state === "granted") console.log("許可済み");
  else if (status.state === "prompt") console.log("ユーザ確認待ち");
  // if (status.state === 'denied')
  else console.log("拒否済み");
});

messaging.requestPermission().then(function () {
  messaging
    .getToken()
    .then((currentToken) => {
      if (currentToken) {
        console.log("ok");
      } else {
        // Show permission request.
        console.log(
          "No Instance ID token available. Request permission to generate one."
        );
      }
    })
    .catch((err) => {
      console.log("An error occurred while retrieving token. ", err);
    });
});

messaging.onMessage((payload) => {
  console.log("Message received. ", payload);
  // ...
});

manifest.json

{
    "name": "ServiceWorker Push",
    "short_name": "ServiceWorker Push",
    "icons": [{
        "src": "./image/black.png",
        "sizes": "192x192",
        "type": "image/png"
    }],
    "start_url": "./index.html",
    "display": "standalone",
    "gcm_sender_id": "103953800507"
}

navigator.permissions.query({ name: "notifications" })で確認したところ"granted"許可済みになっています。
chromeのdevToolのserviceWorckerのpushから送信してみてもダメでした。これはなぜかpcのchromeでも動作しません。
index.jsのmessaging.onMessageのconsole.logは出力されているのでfcmからpushを受け取れてはいると思うのですが、androidの通知が出てきません。

何が原因かご教授ください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る