FCM Token 验证与失效处理:构建可靠的推送通知系统

心靈之曲
发布: 2025-08-14 19:54:01
原创
669人浏览过

fcm token 验证与失效处理:构建可靠的推送通知系统

本文旨在解决在使用 Firebase Cloud Messaging (FCM) 构建 Web 应用时,如何有效验证和管理设备 Token 的问题。当用户在客户端自行取消订阅推送通知,而服务端未能及时同步状态时,会导致数据库中存在无效 Token。本文将介绍如何使用 Firebase Admin SDK 提供的 validateRegistrationTokens 方法批量验证 Token,并清理数据库中的无效条目,从而确保推送通知的准确性和有效性。

在使用 Firebase Cloud Messaging (FCM) 构建 Web 应用时,一个常见的问题是用户可能在客户端(例如 Chrome 或 Firefox)取消订阅推送通知,而服务端却无法立即得知这一变化。这会导致数据库中存储了无效的 FCM Token,进而影响推送通知的准确性和效率。为了解决这个问题,我们需要定期验证数据库中的 Token,并移除无效的条目。

Firebase Admin SDK 提供了一个强大的方法 validateRegistrationTokens,可以批量验证 FCM Token 的有效性。本文将详细介绍如何使用此方法,并提供一个 PHP 示例代码,帮助开发者构建可靠的推送通知系统。

批量验证 FCM Token

validateRegistrationTokens 方法允许一次性验证多个 Token,最多支持 500 个。该方法会返回一个包含有效、无效和未知 Token 的结果集。开发者可以根据这些结果更新数据库,移除无效 Token,并处理未知状态的 Token。

知我AI
知我AI

一款多端AI知识助理,通过一键生成播客/视频/文档/网页文章摘要、思维导图,提高个人知识获取效率;自动存储知识,通过与知识库聊天,提高知识利用效率。

知我AI 26
查看详情 知我AI

PHP 示例代码

以下是一个使用 PHP 和 Firebase Admin SDK 验证 FCM Token 的示例代码:

<?php

use Kreait\Firebase\Factory;
use Kreait\Firebase\Contract\Messaging;
use Kreait\Firebase\Exception\MessagingException;
use Kreait\Firebase\Exception\FirebaseException;

class FCMTokenValidator {

    private Messaging $messaging;

    /**
     * 构造函数
     */
    public function __construct() {
        $factory = (new Factory)->withServiceAccount(getenv('GOOGLE_APPLICATION_CREDENTIALS'));
        $this->messaging = $factory->createMessaging();
    }

    /**
     * 验证设备注册 ID.
     *
     * @param string|string[] $token 要验证的 Token,可以是单个字符串或字符串数组
     * @return array|bool|Exception|MessagingException|FirebaseException 验证结果
     */
    public function validateFCMToken( string|array $token=[] ): bool|Exception|MessagingException|array|FirebaseException {
        if ($token == null || is_array($token) && (sizeof($token) === 0 || sizeof($token) > 500)) {
            return false; // Token 为空或数量超出限制
        } elseif (is_string($token)) {
            $token = [ $token ]; // 将单个 Token 转换为数组
        }

        try {
            return $this->messaging->validateRegistrationTokens($token);
        } catch ( MessagingException | FirebaseException $e ) {
            return $e; // 捕获并返回异常
        }
    }
}

// 使用示例:
$validator = new FCMTokenValidator();
$tokens = [
    'valid_token_1',
    'invalid_token_1',
    'valid_token_2',
    'invalid_token_2',
    // ... up to 500 tokens
];

$validationResult = $validator->validateFCMToken($tokens);

if (is_array($validationResult)) {
    // 处理验证结果
    if (isset($validationResult['invalid'])) {
        $invalidTokens = $validationResult['invalid'];
        // 从数据库中删除这些无效 Token
        foreach ($invalidTokens as $invalidToken) {
            // 数据库删除逻辑
            echo "Invalid token: " . $invalidToken . PHP_EOL;
        }
    }

    if (isset($validationResult['valid'])) {
        $validTokens = $validationResult['valid'];
        // 可以选择更新这些有效 Token 的最后活跃时间
        foreach ($validTokens as $validToken) {
            // 数据库更新逻辑
            echo "Valid token: " . $validToken . PHP_EOL;
        }
    }

    if (isset($validationResult['unknown'])) {
        $unknownTokens = $validationResult['unknown'];
        // 对于未知状态的 Token,可以进行重试或进一步调查
        foreach ($unknownTokens as $unknownToken) {
            echo "Unknown token: " . $unknownToken . PHP_EOL;
        }
    }

} else {
    // 处理异常
    echo "Error: " . $validationResult->getMessage() . PHP_EOL;
}

?>
登录后复制

代码解释:

  1. 引入依赖: 引入 Firebase Admin SDK 相关的类。
  2. 创建 FCMTokenValidator 类: 封装 Token 验证的逻辑。
  3. 构造函数: 初始化 Firebase Messaging 客户端。
  4. validateFCMToken 方法:
    • 接收一个 Token 数组作为参数。
    • 验证 Token 数组的大小是否符合要求 (0 < size <= 500)。
    • 调用 $this->messaging->validateRegistrationTokens() 方法进行批量验证。
    • 捕获并处理可能出现的异常。
  5. 使用示例:
    • 创建 FCMTokenValidator 实例。
    • 准备要验证的 Token 数组。
    • 调用 validateFCMToken 方法进行验证。
    • 根据验证结果,从数据库中删除无效 Token,更新有效 Token,并处理未知状态的 Token。

注意事项

  • 安全性: 确保 Firebase Admin SDK 的 Service Account 凭据安全存储,避免泄露。
  • 频率控制: 不要过于频繁地验证 Token,以免对 FCM 服务造成不必要的压力。建议根据应用的实际情况,设置合理的验证周期。
  • 错误处理: 在验证过程中,可能会遇到各种错误,例如网络问题、权限问题等。务必进行充分的错误处理,确保程序的健壮性。
  • 批量大小: validateRegistrationTokens 方法一次最多只能验证 500 个 Token。如果数据库中的 Token 数量超过 500,需要分批进行验证。
  • 数据库操作: 在删除或更新数据库中的 Token 时,务必谨慎操作,避免误删或数据不一致的情况。

总结

通过使用 Firebase Admin SDK 提供的 validateRegistrationTokens 方法,可以有效地验证和管理 FCM Token,确保推送通知的准确性和可靠性。开发者可以根据本文提供的示例代码,结合自身的应用场景,构建完善的 Token 验证机制,提升用户体验。 定期执行 Token 验证,清理无效 Token,可以减少无效推送,降低成本,并提高推送效率。

以上就是FCM Token 验证与失效处理:构建可靠的推送通知系统的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号