FCM Cloud Messaging:有效验证和管理设备Token

花韻仙語
发布: 2025-08-14 18:42:12
原创
212人浏览过

fcm cloud messaging:有效验证和管理设备token

本文旨在解决在使用Firebase Cloud Messaging (FCM)进行推送通知时,如何有效验证和管理设备Token的问题。当用户通过非应用内的方式取消订阅通知时,服务器无法立即得知,导致数据库中残留无效Token。本文将介绍如何使用Firebase Admin SDK提供的validateRegistrationTokens方法批量验证Token,并清理数据库中无效的Token,确保推送的有效性和用户体验。

在使用FCM进行推送通知时,一个常见的问题是如何处理无效的设备Token。用户可能通过多种方式取消订阅通知,例如在浏览器设置中禁用通知,或者卸载应用程序。这些操作不会直接通知你的服务器,导致数据库中可能存在大量无效的Token。向这些无效Token发送推送消息会浪费资源,并且可能影响推送的送达率。

Firebase Admin SDK提供了一个强大的工具来解决这个问题:validateRegistrationTokens方法。这个方法允许你批量验证设备Token的有效性,并识别出无效的Token,以便你可以从数据库中删除它们。

批量验证Token

validateRegistrationTokens方法接受一个包含设备Token的数组作为参数,并返回一个包含验证结果的对象。该对象将Token分为三类:

  • valid: 有效的Token,可以正常接收推送消息。
  • invalid: 无效的Token,无法接收推送消息。这些Token应该从数据库中删除。
  • unknown: 无法确定有效性的Token。这些Token可能需要进一步调查。

示例代码(PHP)

乾坤圈新媒体矩阵管家
乾坤圈新媒体矩阵管家

新媒体账号、门店矩阵智能管理系统

乾坤圈新媒体矩阵管家17
查看详情 乾坤圈新媒体矩阵管家

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

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

class SomeController {

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

    }

    /**
     * 验证设备注册ID.
     *
     * @param string|string[] $token 单个token或token数组
     * @return array|bool|Exception|MessagingException|FirebaseException 验证结果.
     */
    public function validate_fcm_token( string|array $token=[] ): bool|Exception|MessagingException|array|FirebaseException {
        if ($token == null|| is_array($token) && (sizeof($token) === 0 || sizeof($token) > 500)) {return false;}
        else if (is_string($token)) {$token = [ $token ];}
        try {
            return $this->messaging->validateRegistrationTokens($token);
        } catch ( MessagingException | FirebaseException $e ) {
            return $e;
        }
    }
}

// 使用示例:
$controller = new SomeController();
$tokens = [
    'valid_token_1',
    'invalid_token_1',
    'valid_token_2',
    'invalid_token_2',
    // ...
];

$results = $controller->validate_fcm_token($tokens);

if (is_array($results) && isset($results['invalid'])) {
    $invalidTokens = $results['invalid'];
    foreach ($invalidTokens as $invalidToken) {
        // 从数据库中删除无效的Token
        echo "Invalid token: " . $invalidToken . "\n";
        // 在此处添加删除数据库记录的逻辑
    }
} else {
    // 处理错误情况
    echo "Error validating tokens.\n";
    if ($results instanceof Exception) {
        echo $results->getMessage();
    }
}
登录后复制

代码解释:

  1. 引入必要的类: 引入了Kreait\Firebase\Factory,Kreait\Firebase\Contract\Messaging以及相关的异常类。
  2. 创建Firebase Messaging实例: 使用Firebase Admin SDK初始化Firebase Messaging服务。需要配置Service Account Credentials。
  3. validate_fcm_token方法:
    • 接收一个包含设备Token的数组作为参数。
    • 检查输入是否为空或者token数组是否为空或者token数组的大小是否超过500。
    • 调用$this->messaging->validateRegistrationTokens($token)方法验证Token。
    • 捕获可能发生的MessagingException或FirebaseException异常。
    • 返回验证结果。
  4. 使用示例:
    • 创建SomeController实例。
    • 定义一个包含需要验证的Token的数组$tokens。
    • 调用validate_fcm_token方法验证Token。
    • 检查返回结果,如果存在invalid数组,则遍历该数组,并从数据库中删除相应的Token。
    • 处理可能发生的错误情况。

注意事项:

  • 批量大小限制: validateRegistrationTokens方法一次最多可以验证500个Token。如果你的数据库中存在大量的Token,你需要将它们分成多个批次进行验证。
  • 频率限制: 为了防止滥用,Firebase可能会对validateRegistrationTokens方法的调用频率进行限制。请确保你的代码遵循这些限制。
  • 错误处理: 在调用validateRegistrationTokens方法时,可能会发生各种错误,例如网络错误或服务器错误。请确保你的代码能够正确处理这些错误。
  • 定期执行: 建议你定期执行Token验证,例如每天或每周一次,以确保数据库中的Token始终保持最新状态。
  • 安全性: 保护好你的Service Account Credentials,避免泄露,防止未经授权的访问。

总结:

通过使用Firebase Admin SDK提供的validateRegistrationTokens方法,你可以有效地验证和管理设备Token,清理数据库中无效的Token,提高推送的有效性和用户体验。请务必注意批量大小限制、频率限制和错误处理,并定期执行Token验证。 通过定期清理无效token,可以有效减少不必要的推送尝试,节省资源,并提高整体推送效率。

以上就是FCM Cloud Messaging:有效验证和管理设备Token的详细内容,更多请关注php中文网其它相关文章!

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

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

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

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