当前位置: 首页 > 知识库问答 >
问题:

Firebase云消息传递的getToken()只有在省略使用PublicVapidKey方法时才有效,为什么?

滑骞尧
2023-03-14

我对Firebase for Firebase Cloud Messaging(FCM)的实施有一个具体问题:

正如您在下面的代码中所看到的,//messaging.usePublicVapidKey(“

>

  • 代码:“消息传递/令牌订阅失败”,

    消息:“请求缺少必需的身份验证凭据。应为OAuth 2访问令牌、登录cookie或其他有效身份验证凭据。请参阅。”https://developers.google.com/identity/sign-in/web/devconsole-project.",

    堆栈:“FirebaseError:请求缺少所需的身份验证凭据。应为OAuth 2访问令牌、登录cookie或其他有效身份验证凭据。请参阅https://developers.google.com/identity/sign-in/web/devconsole-project. 在https://www.gstatic.com/firebasejs/4.12.1/firebase-messaging.js:6:8316"

    这是我当前的index.html文件:

    <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-messaging.js"></script>
    <script>
    var config = {
        apiKey: "<MY FIREBASE API KEY>",
        authDomain: "<MY FIREBASE PROJECT ID>.firebaseapp.com",
        databaseURL: "https://<MY FIREBASE PROJECT ID>.firebaseio.com",
        projectId: "<MY FIREBASE PROJECT ID>",
        storageBucket: "<MY FIREBASE PROJECT ID>.appspot.com",
        messagingSenderId: "<MY FIREBASE SENDER ID?>"
    };
    firebase.initializeApp(config);
    
    //messaging app
    const messaging = firebase.messaging();
    
    //vapid
    //messaging.usePublicVapidKey("<MY VAPID KEY IN HERE>");
    
    //register service worker
    navigator.serviceWorker.register('firebase-messaging-sw.js').then(function(registration) {
        console.log('Service Worker Registered!', registration);
    }).catch(function(err) {
        console.error('Service Worker registration failed', err);
    });
    </script>
    

    这是我调用的javascript函数,用于获取用户接收通知和获取用户令牌的权限:

    <script>
    function notification_permission() {
        messaging.requestPermission().then(function(permission) {
            console.log('Notification permission granted.', permission);
            messaging.getToken().then(function(current_token) {
                if(current_token) {
                    //update user token
                    // update_token(current_token);
                    console.log('token', current_token);
                } else {
                    // you don't have permission to show notifications
                    // detect whether they are blocked or not, then show your custom UI
                }
            }).catch(function(err) {
                // retrieving token failed, analyze the error
                console.error('retrieving token failed, analyze the error', err);
            });
        }).catch(function(err) {
            console.error('Unable to get permission to notify.', err)
        });
    }
    </script>
    

    我的manifest.json文件中已经有这个:

    {
        "gcm_sender_id": "103953800507",
        "serviceworker": {
            "src": "firebase-messaging-sw.js",
            "scope": "/"
        }
    }
    

    我对此配置的具体问题如下:

    >

  • 是否可以使用web推送生成空键只获取一次空键,并对所有用户请求使用相同的空键?

    为什么使用VAPID键时,getToken()方法失败?

    乏味的方法是可选的吗?使用它有什么好处?

    谢谢你的帮助!


  • 共有1个答案

    江宏深
    2023-03-14

    1) 对。

    2) 因为令牌与firebase帐户相关,而不是与vapid键相关。绕过firebase,您无法获得任何令牌。

    3) 不使用firebase时,使用vapid很有用。

     类似资料:
    • 访问者订阅,我检索FCM令牌。 我使用POST将此消息推送到https://fcm.googleapis.com/fcm/send 它总是说成功=1, 但事实上,只有当网站关闭时,信息才会被传递! 当我关闭选项卡并再次推送消息时,消息被传递。 此外,如果我打开网站或我去该领域的任何地方,如http://example.org/whatever/,但仍返回“success=1”。 测试了Chrome

    • 我试图让Android BroadcastReceiver在Android系统收到Firebase云消息通知时运行。 AndroidManifest中需要指定如下接收器标记: 正如您在上面的清单中看到的,我添加了: 确保当我将电缆插入Android设备时,BroadcastReceiver启动。它工作得很好。 因此,问题在于: BroadcastReceiver是否无法识别此意图筛选器操作?Bro

    • 在定义消息有效负载时的Firebase云消息文档中: 通过使用数据和/或通知键创建对象,可以指定一种或两种消息类型。 文档给出了组合消息的示例: 另请参阅后台应用程序中处理通知消息的文档: 这包括同时包含通知和数据有效负载的消息(以及从通知控制台发送的所有消息)。在这些情况下,通知会发送到设备的系统托盘,数据有效负载会在启动器活动的目的之外发送。 我用这个有效载荷发送通知: 但是始终为空: 我做错

    • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

    • 我试图从C#中的服务器发送推送通知,我使用了正确的注册令牌和API密钥,但仍然得到以下响应。 我按照这个网址来实现这个解决方案通过C#使用FCM(Firebase云消息传递)发送推送到Android 目前,我正在尝试向单个设备发送通知,但也希望同时向多个设备发送通知,我使用了url中给出的,但它不起作用。如果我必须同时向多个设备发送通知,我该怎么办? 这是我的密码

    • 我必须在SpringJava中为多层架构制作一个RESTAPI,其中需要为Firebase云消息传递(FCM)构建DAO、控制器和服务管理器,以向android应用程序发送推送通知消息,但我无法在Java中配置服务器以向设备发送通知。我怎么能?