Firebase 消息:由于所需的 APNs SSL 证书已过期或未上传,无法向 iOS 设备发送消息
Posted
技术标签:
【中文标题】Firebase 消息:由于所需的 APNs SSL 证书已过期或未上传,无法向 iOS 设备发送消息【英文标题】:Firebase Messaging: Unable to send message to iOS device due to required APNs SSL Cert expired or not uploaded 【发布时间】:2021-10-18 18:16:30 【问题描述】:检查this similar question 和another 后,我仍然无法向我的ios 设备发送消息。
我正在通过我的Firebase Cloud Functions
发送消息,这对于 android 可以正常工作,但对于 iOS 设备我最终收到此错误:A message targeted to an iOS device could not be sent because the required APNs SSL certificate was not uploaded or has expired. Check the validity of your development and production certificates
。
我已确认我确实拥有推送通知下的正确证书
在我的 Firebase 项目设置中,我还在 Apple Dev Console 中添加了我的 APN 密钥。
我已经完成了 3 次此过程,但仍然无法正常工作。
确认一下,这是我的cloud functions
代码
const functions = require("firebase-functions");
const admin = require('firebase-admin')
const CloudTasksClient = require('@google-cloud/tasks');
const serviceAccount = require('./serviceAccountKey.json');
admin.initializeApp(
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://[project-id].firebaseio.com"
)
exports.firestoreTtlCallback = functions.https.onRequest(async (req, res) =>
try
const payload = req.body;
let entry = await (await admin.firestore().doc(payload.docPath).get()).data();
let tokens = await (await admin.firestore().doc(`/users/$payload.uid`).get()).get('tokens')
const notification =
notification:
title: 'App',
body: entry['text']
const response = await admin.messaging().sendToDevice(
tokens,
notification
)
response.results.forEach((result, index) =>
const error = result.error;
if (error)
functions.logger.error('Failure sending notification to', tokens[index],
error)
if (error.code === 'messaging/invalid-registration-token' || error.code === 'messaging/registration-token-not-registered')
// remove token here
else
log("Successfully send message!")
)
await admin.firestore().doc(payload.docPath).update( expirationTask: admin.firestore.FieldValue.delete() )
res.sendStatus(200)
catch (err)
log(err)
await admin.firestore().doc(payload.docPath).update( expirationTask: admin.firestore.FieldValue.delete() )
res.status(500).send(err)
)
【问题讨论】:
【参考方案1】:我未获得授权的原因是我在 Firebase 项目设置中的 Team ID
与在 Apple Developer Console
中创建的 ID 不同。一旦我确定这些是相等的并再次完成该过程,我就能够成功获得通知。
【讨论】:
以上是关于Firebase 消息:由于所需的 APNs SSL 证书已过期或未上传,无法向 iOS 设备发送消息的主要内容,如果未能解决你的问题,请参考以下文章
如何创建 Firebase web user.reauthenticate() 方法所需的“凭据”对象?