angular - 该请求缺少身份验证密钥(FCM 令牌)。请参阅 FCM 文档的“身份验证”部分
问题描述
我正在使用 Angular httppost 模块从我的 nativescript 应用程序发送 Firebase 通知,它有时会发送通知,有时它会返回请求缺少身份验证密钥(FCM 令牌)的错误。请参阅 FCM 文档的“身份验证”部分
如果应用程序在前台使用邮递员,它不会收到通知,但响应仍然成功,但如果应用程序在后台或我按下 android 上的主页按钮,它会收到通知这里是邮递员的一瞥
sendtoken(id, detail) {
console.log("????????????????????????????????????????????????");
console.log(JSON.stringify(detail.firebase_token));
console.log(JSON.stringify(this.DataService.activeJob));
console.log("\n\n" + detail.JobID);
var job = this.DataService.activeJob.filter(f => detail.JobID === f.jobID)[0];
// + detail.amount + "\n Origin : " + job.jobOrigin + "\nDestination : " + job.jobDestination
var data = {
notification: {
"title": "JOB",
"text": "Your Firm was allocated a job of amount :",
"sound": "default"
},
"priority": "High",
"to": detail.firebase_token
};
// alert(JSON.stringify(data));
var ServerSettings =
{
serverpath: "https://fcm.googleapis.com/fcm/send"
};
this.headers.append("Authorization", "key=AAAA9wyBPKg:APA91bGI6dOOM42iTJNqO47xMC9QIkLHf738Sn1iVk0gbkZDND1fuP9zBW1A38DlhupDdvlsAZCJu1iNACjbVvtdZQd3ePXnq1xctwYQ3PCErchmyYMM4UvmWjeeNjn2X1IL9mgy5ioT");
this.headers.append("Content-Type", "application/json");
this.options.headers = this.headers;
//this.setHeaders();
console.log("\n\nSending to Server for Update :\n\n" + data);
let url = ServerSettings.serverpath;
return this.httpmodule.post(url,data, this.options);
}
与邮递员
{
"notification": {
"title": "JOB",
"text": "Your Firm was allocated 5",
"sound": "default"
},
"priority": "High",
"to": "dwu1TEW5sPM:APA91bEppyye2NCq5IAfnjJg95eTsnsPf4Vn3U8CLgvUjJnY7uAVs4ASZiu1RCuFKf7uzXYojAGzKQD8cflKRGvpiqhEymbhK-DB-LQi8MogWIyyIR_xOm64GIpbviWrDuVZt8Td6xZ2"
}
与邮递员的回应
{
"multicast_id": 6341518491186981658,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1569773536386430%0a6c29b00a6c29b0"
}
]
}
解决方案
如果您总是希望在应用程序处于前台时显示通知而不在发送推送通知时发送其他参数/数据,则需要将 showNotificationsWhenInForeground 选项设置为 true:
firebase.init({
showNotificationsWhenInForeground: true,
});
编辑:
使用 Angular 在更新标头时,您应该用方法返回的新实例替换现有实例append
。
this.headers = this.headers.append("Authorization", "key=AAAA9wyBPKg:APA91bGI6dOOM42iTJNqO47xMC9QIkLHf738Sn1iVk0gbkZDND1fuP9zBW1A38DlhupDdvlsAZCJu1iNACjbVvtdZQd3ePXnq1xctwYQ3PCErchmyYMM4UvmWjeeNjn2X1IL9mgy5ioT").append("Content-Type", "application/json");
this.options.headers = this.headers;
推荐阅读
- linux - 项目错误:QT 中的未知模块:数据可视化
- reactjs - 使用 window.location.href 在反应中重定向页面时,Axios 无法正常工作
- javascript - 为什么从循环内部调用的回调处理程序没有从调用者那里获取适当的变量?
- javascript - 如何在 Netlify lambda 函数中从 Hugo 网站上的 Google Calendar API 获取请求
- sql - 使用 PASSWORD_VERIFY_FUNCTION 更改配置文件返回无效的函数名称
- reactjs - 使用 Material UI 进行主题嵌套
- java - Java 等价于 C++ Botan 函数调用
- r - 文件处理时间长
- mysql - AWS Aurora Auto Scaling 导致 mysqld_stmt_execute 的参数不正确
- angular - Angular7 性能