FCM.getToken()承诺从未解决

时间:2018-09-10 15:49:22

标签: javascript firebase notifications push messaging

我正在尝试使用FireBase实现Web推送通知。它在桌面chrome / firefox中很好用,但是在android上我无法获得通知令牌-从messages.getToken返回的promise从未解析,也没有抛出错误(总是未决)。我有一名服务人员,它正在运行并正在运行。这是我的代码-我该怎么做?

<script src="https://www.gstatic.com/firebasejs/5.4.2/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.4.2/firebase-messaging.js"></script>
<script>
  var config = {
    apiKey: "AIzaSyBuFGsjFDCILwYVzLHWLvoRIHSoDZIQBl8",
    authDomain: "mobilepush-fd2d5.firebaseapp.com",
    databaseURL: "https://mobilepush-fd2d5.firebaseio.com",
    projectId: "mobilepush-fd2d5",
    storageBucket: "mobilepush-fd2d5.appspot.com",
    messagingSenderId: "106871298920"
  };
  firebase.initializeApp(config);
  const messaging = firebase.messaging();
  messaging.usePublicVapidKey("BBYGyuGH2KqQSHyc55Di5IQnHc52fY6gqmExfWtg85-wabmQimja6X6ViR2jmNgPBZBuLeX0BXf9A0yLqUV5m90");
  var curStatus = messaging.getNotificationPermission_();
  if (curStatus == 'granted') {
    messaging.getToken().then(function(currentToken) {
      if (currentToken) {
        processToken(currentToken, 1);
      } else {
        reqPerm();
      }
    }).catch(function(err) {
      //error
    });
  } else if (curStatus == 'denied') {
    //denied
  } else {
    reqPerm();
  }

  function reqPerm() {
    messaging.requestPermission().then(function() {
      messaging.getToken().then(processToken);
    }).catch(function(err) {
      //error
    });
  }

  function processToken(token, hasAlready) {
    alert(token);
  }
</script>

1 个答案:

答案 0 :(得分:0)

找到它了-手机的内存已完全满,因此Firebase脚本无法将令牌数据添加到浏览器的本地indexeddb中。删除了设备上的一些文件,现在可以使用了。