9

Vì vậy, tôi cần triển khai thông báo đẩy web trong ứng dụng web của mình, tôi đã thiết lập thành công tin nhắn trên đám mây firebase trong ứng dụng của mình với sự trợ giúp của tài liệu, tôi có thể hỏi người dùng để cho phép thông báo và nhận id mã thông báo nếu anh ấy chấp nhận quyền.Không nhận được thông báo đẩy FCM cho web trên localhost

Vấn đề là khi tôi cố gắng gửi thông báo để kiểm tra mã thông báo đã tạo, tôi nhận được phản hồi rằng thư được gửi nhưng tôi không thể nhận được thư ở phía máy khách.

index.html My

<head> 
    <script src="https://www.gstatic.com/firebasejs/4.4.0/firebase.js"></script> 
    <link rel="manifest" href="./firebase.json"> 
</head> 
<script> 
    if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('./firebase-messaging-sw.js').then(function(registration) { 
     console.log('Firebase Worker Registered'); 

    }).catch(function(err) { 
     console.log('Service Worker registration failed: ', err); 
    }); 
    } 
    </script> 

Tôi thành công có thể đăng ký hồ sơ người lao động dịch vụ

App.component.ts My

var config = { 
      apiKey: "somekey", 
      authDomain: "someproject-2.firebaseapp.com", 
      databaseURL: "https://someproject-2.firebaseio.com", 
      projectId: "someproject-2", 
      storageBucket: "", 
      messagingSenderId: "someid" 
      }; 
      firebase.initializeApp(config); 



     const messaging = firebase.messaging(); 

     messaging.requestPermission() 
     .then(function() { 
      console.log('Notification permission granted.'); 
      return messaging.getToken() 
     }) 
     .then(function(result) { 
      console.log("The token is: ", result); 
     }) 
     .catch(function(err) { 
      console.log('Unable to get permission to notify.', err); 
     }); 

     messaging.onMessage(function(payload) { 
     console.log("Message received. ", payload); 
     }); 

tôi nhận được hộp thoại cho phép hộp yêu cầu sự cho phép và nhận mã thông báo với mã này

Mã curl tôi đã sử dụng để gửi tin nhắn

curl -X POST -H "Authorization: key=somekey" -H "Content-Type: application/json" -d '{ 
    "notification": { 
    "title": "Portugal vs. Denmark", 
    "body": "5 to 1", 
    "icon": "firebase-logo.png", 
    "click_action": "http://localhost:8081" 
    }, 
    "to": "sometoken" 
}' "https://fcm.googleapis.com/fcm/send" 

Tôi có thể gửi thông báo thành công với mã này

tôi không thể tìm ra nơi tôi sẽ sai, có lẽ bởi vì nó là trên localhost? có lẽ phương thức onMessage không chạy đúng cách? Bất kỳ sự trợ giúp nào cũng được đánh giá cao!

+0

Nhân viên dịch vụ không hoạt động trên nguồn gốc không an toàn. do đó localhost của bạn phải có trên https. –

+0

Bạn có tìm thấy sự cố không? Tôi có chính xác cùng một vấn đề. – chrisonline

+0

Không bro, sẽ cho bạn biết nếu tôi tìm ra –

Trả lời

0

Được rồi, tôi không nhận được bất kỳ câu trả lời cho điều này trên stackoverflow, vì vậy tôi phải làm điều đó một mình và đã nhận nó làm việc!

Sự cố nằm trong tệp công nhân dịch vụ, tôi dường như không xác định biến nhắn tin.

Nếu có ai đang đối mặt với vấn đề này, chỉ cần đảm bảo tệp công nhân dịch vụ của bạn trông giống như thế này.

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

firebase.initializeApp({ 
    'messagingSenderId': '182145913801' 
    }); 

const messaging = firebase.messaging(); 
0

Như đã trình bày trên trang web FCM:

Các FCM SDK chỉ được hỗ trợ trong các trang phục vụ qua HTTPS. Điều này là do việc sử dụng nhân viên dịch vụ chỉ khả dụng trên các trang web HTTPS.

Xem https://firebase.google.com/docs/cloud-messaging/js/client

+1

Tôi không nghĩ vậy, bởi vì tôi đã triển khai các thay đổi trên trang web dàn dựng không phải https, và ở đó tôi không thể đăng ký nhân viên dịch vụ của mình trang web không phải là https Nhưng tuy nhiên trên địa phương, tôi có thể đăng ký nhân viên dịch vụ và nhận mã thông báo, điều này cho thấy rằng nó có thể chạy trên máy chủ cục bộ và tôi nhớ anh chàng trong hướng dẫn firebase mình đang thực hiện nó trên http của mình localhost –

+1

Yup bạn nói đúng, bởi vì 'localhost' là màu trắng được liệt kê trong chrome, sai lầm của tôi tôi đã đồng ý @ManzurKhanSarguroh –

+0

Tôi đánh giá cao bạn dành thời gian để trả lời bro –

0

Tôi gặp sự cố tương tự và tôi đã gửi tin nhắn trên đám mây trên firebase và nhận khóa Máy chủ và thêm vào yêu cầu curl.

curl --header "Authorization: key=CloudMessagingServerKey" --header "Content-Type: application/json" -d '{ 
    "notification": { 
     "title": "FCM Message", 
     "body": "This is an FCM Message", 
     }, 
    "to": "token from messaging.getToken()" 
    }' "https://fcm.googleapis.com/fcm/send" 

tôi căn cứ hỏa lực-tin nhắn-sw.js trông giống như mã dưới đây

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

firebase.initializeApp({ 
    apiKey: 'yourapikey', 
    authDomain: 'xxxx.firebaseapp.com', 
    databaseURL: 'https://xxxx.firebaseio.com', 
    projectId: 'xxxx', 
    storageBucket: 'xxxx.appspot.com', 
    messagingSenderId: 'your message sender Id', 
}); 

const messaging = firebase.messaging(); 

đó đã làm các trick cho tôi. Lỗi của tôi là tôi đã sử dụng sai serverKey và tôi không sử dụng importScripts trong firebase-messaging-sw.js

Các vấn đề liên quan