问题描述
我们使用的是 firebase 8.2.1 版本。
我们正在使用 react 和 typescript 进行开发。
仅当我在 safari 中查看时才会出现该错误。
错误是 FirebaseError: Messaging: This browser does not support the API's required to use the firebase SDK.(messaging/unsupported-browser).
看了下文档,只有safari不支持云消息。
我该如何解决这个问题?
https://firebase.google.com/support/guides/environments_js-sdk?hl=ja[enter此处的链接说明]1
import firebase from 'firebase/app';
import 'firebase/messaging';
import { asyncNotificationToken } from 'apis/asyncNotificationToken';
const firebaseConfig = {
apiKey: '******************',projectId: '******',messagingSenderId: '*******',appId: '********',};
const vapid_KEY =
'******************************';
if (firebase.apps.length < 1) {
firebase.initializeApp(firebaseConfig);
}
export const prepareNotification = () => {
firebase
.messaging()
.requestPermission()
.then(() => {
prepareNotificationToken();
})
.catch(() => {
console.log('Unable to get permission to notify.');
});
};
export const prepareNotificationToken = () => {
firebase
.messaging()
.getToken({ vapidKey: vapid_KEY })
.then((token) => {
asyncNotificationToken(token).then(() => {
console.log('Registed notification token.');
});
});
};
export const prepareNotification = () => {
let messaging = null;
if (firebase.messaging.isSupported()) {
messaging = firebase.messaging();
}
firebase
.messaging()
.requestPermission()
.then(() => {
prepareNotificationToken();
})
.catch(() => {
console.log('Unable to get permission to notify.');
});
};
export const prepareNotificationToken = () => {
firebase
.messaging()
.getToken({ vapidKey: vapid_KEY })
.then((token) => {
asyncNotificationToken(token).then(() => {
console.log('Registed notification token.');
});
});
};
解决方法
遗憾的是,Safari 尚不支持 Push API,因此消息传递不起作用。
在尝试使用之前检查兼容性。
let messaging = null;
if (firebase.messaging.isSupported(){
messaging = firebase.messaging();
}
有关 .isSupported() 的详细信息,请参阅 documentation。
在 Mac 桌面上有一个 feature request 支持 safari push notification。