2017-03-26 1 views
0

J'ai des problèmes avec la réception des notifications push de serveur firebasefirebase, ne peut pas recevoir des notifications (côté client)

Il y a un code de fichier firebase-messagerie-sw.js (qui utilise pour recevoir)

// [START initialize_firebase_in_sw] 
// Give the service worker access to Firebase Messaging. 
// Note that you can only use Firebase Messaging here, other Firebase  libraries 
// are not available in the service worker. 
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js'); 
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js'); 

// Initialize the Firebase app in the service worker by passing in the 
// messagingSenderId. 
firebase.initializeApp({ 
'messagingSenderId': 'xxxxxxxxx' 
}); 

// Retrieve an instance of Firebase Messaging so that it can handle background 
// messages. 
const messaging = firebase.messaging(); 
// [END initialize_firebase_in_sw] 

// If you would like to customize notifications that are received in the 
// background (Web app is closed or not in browser focus) then you should 
// implement this optional method. 
// [START background_handler] 
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); 
}); 
// [END background_handler] 

code travail 100 Subscribe% fin, donc je ne vais pas montrer (i besoin de plus la réputation d'ajouter plus de 2 liens)

il y a le code côté serveur que j'utilise pour envoyer des notifications:

define('API_ACCESS_KEY', 'xxxxxxxxxxxxxxxxxxxxx'); 
    $url = 'https://fcm.googleapis.com/fcm/send'; 
     $priority="high"; 
     $notification= array('title' => 'Some title','body' => 'hi', "priority" =>"high",); 

    $tokens = array('Token-1','token-2'); 


     $fields = array(
      'registration_ids' => $tokens, 
      'notification' => $notification 

      ); 


     $headers = array(
      'Authorization:key='.API_ACCESS_KEY, 
      'Content-Type: application/json' 
      ); 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
     // echo json_encode($fields); 
     $result = curl_exec($ch);   
     echo curl_error($ch); 
     if ($result === FALSE) { 
      die('Curl failed: ' . curl_error($ch)); 
     } 
     curl_close($ch); 
     echo $result; 

côté serveur

fonctionne aussi bien, parce que l'envoi d'une notification à Firebase, serveur renvoie cette réponse:

{ "multicast_id": 7642532958945472490, "succès": 1, "l'échec": 0, "canonical_ids": 0 , "results": [{"message_id": "0: 1490541716147780% e609af1cf9fd7ecd"}]}

comme vous le voyez, la notification a été envoyée avec succès.

Mais je ne peux pas le recevoir, je ne vois pas la fenêtre de notification en chrome.

Toutes les sources sont extraites d'exemples github de base de feu.

Quel est le problème? Pourquoi je ne peux pas recevoir de notification? Identifiant et clé d'accès sont corrects, pas d'erreurs ou d'avertissement en javascript, cela est prouvé par le fait que la notification est envoyée.

grâce

+1

S'il vous plaît assurez-vous que vous incluez le [code minimal qui reproduit le problème] (http://stackoverflow.com/help/mcve) dans la question elle-même. Les liens prennent plus de temps pour naviguer et ont tendance à pourrir au fil du temps. Pour apprendre comment mettre en forme du code dans une question Stack Overflow, voir http://stackoverflow.com/editing-help#syntax-highlighting –

+0

ok, la prochaine fois j'utiliserai le formatage stackoverflow. – Giorgi

+0

J'ai été éditer la question, maintenant, pouvez-vous m'aider? – Giorgi

Répondre

0

Je vous recommande d'utiliser à tout d'abord quelque chose comme postier pour les demandes d'essais. Vous pouvez ainsi garantir que le problème n'est pas causé par votre code.

i. Appelez-vous cette fonction pour spécifier le service worker pour la messagerie Firebase (à partir de votre page où vous avez votre jeton d'enregistrement)?

messaging.useServiceWorker(swRegistration); 

ii. L'exemple Firebase utilise uniquement l'API apiKey pour l'initialisation dans le service worker. Cela a causé quelques problèmes pour moi. Au lieu de cela j'utilise la config qui est également utilisé dans la page:

var config = { 
    apiKey: "xxxaSyDxxxaQMQW67JxxxnUzxxxSEhVxxxeqKXI", 
    authDomain: "xxx.firebaseapp.com", 
    databaseURL: "https://xxx.firebaseio.com", 
    projectId: "xxx-xxx-xxx", 
    storageBucket: "xxx-xxx-xxx.apxxxot.com", 
    messagingSenderId: "2xxxx5xxx" 
}; 

firebase.initializeApp(config);