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 实施

Firebase 上传缺少所需的 dSYM 不工作

如何创建 Firebase web user.reauthenticate() 方法所需的“凭据”对象?

将 APNS 证书添加到 Google Firebase

iOS APNS 证书即将过期(服务器端的 Firebase)

对使用自定义子域设置 Firebase 动态链接所需的 A 记录的担忧