首页 > 解决方案 > 在 JavaScript 中检索 FCM 令牌

问题描述

我正在尝试使用 django 作为后端和 FCM 来构建一个聊天系统作为通知。到目前为止,我一直在尝试检索 FCM 令牌,但我无法使用下面的代码。当我尝试它时,会弹出一个警报,说“检索令牌时出错”。我错过了什么?

我对 Firebase 完全陌生,所以我不太清楚如何处理它。

<script src="https://www.gstatic.com/firebasejs/5.10.0/firebase.js"></script>
<!-- Firebase App is always required and must be first -->
<script src="https://www.gstatic.com/firebasejs/5.8.4/firebase-app.js"></script>

<!-- Add additional services that you want to use -->
<script src="https://www.gstatic.com/firebasejs/5.8.4/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.1/firebase-messaging.js"></script>
<script>
    // Initialize Firebase
    var config = {
        apiKey: "",
        authDomain: "",
        databaseURL: "",
        projectId: "",
        storageBucket: "",
        messagingSenderId: ""
    };
    firebase.initializeApp(config);
</script>
<script>
    function googleLogin(){
        var provider = new firebase.auth.GoogleAuthProvider();
        firebase.auth().useDeviceLanguage();
        firebase.auth().signInWithPopup(provider).then(function(result) {
            // This gives you a Google Access Token. You can use it to access the Google API.
            var token = result.credential.accessToken;
            // The signed-in user info.
            var user = result.user;
            // ...
            firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
                var csrftoken = '{{ csrf_token }}';
                const messaging = firebase.messaging();
                messaging.usePublicVapidKey("");
                messaging.requestPermission().then(function() {
                    console.log('Notification permission granted.');
                    messaging.getToken().then(function(currentToken) {
                        if (currentToken) {
                            alert(currentToken);
                            $.post("/api/login", {'csrfmiddlewaretoken': csrftoken, 'token': idToken});
                            setTimeout(function(){
                                document.location.reload(true);
                            }, 1500);
                        } else {
                            alert("No token");
                            console.log('No Instance ID token available. Request permission to generate one.');
                        }
                    }).catch(function(err) {
                        alert("Error retrieving token");
                        console.log('An error occurred while retrieving token. ', err);
                    });
                }).catch(function(err) {
                    alert("No permission");
                    console.log('Unable to get permission to notify.', err);
                });

            }).catch(function(error) {
                alert("Error logging in")
                // Handle error
            });
       }).catch(function(error) {
            // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;
            // The email of the user's account used.
            var email = error.email;
            // The firebase.auth.AuthCredential type that was used.
            var credential = error.credential;
            // ...
        });
    }
</script>

我读过一些关于包含 manifest.json 文件的内容,但我真的不知道如何处理这个文件或我应该在哪里包含它。

标签: javascriptdjangofirebasefirebase-cloud-messaging

解决方案


推荐阅读