Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
FCM Cloud Messaging:有效验证和管理设备Token_创想鸟

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

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)

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

use KreaitFirebaseFactory;use KreaitFirebaseContractMessaging;use KreaitFirebaseExceptionMessagingException;use KreaitFirebaseExceptionFirebaseException;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();    }}

代码解释:

引入必要的类: 引入了KreaitFirebaseFactory,KreaitFirebaseContractMessaging以及相关的异常类。创建Firebase Messaging实例: 使用Firebase Admin SDK初始化Firebase Messaging服务。需要配置Service Account Credentials。validate_fcm_token方法:接收一个包含设备Token的数组作为参数。检查输入是否为空或者token数组是否为空或者token数组的大小是否超过500。调用$this->messaging->validateRegistrationTokens($token)方法验证Token。捕获可能发生的MessagingException或FirebaseException异常。返回验证结果。使用示例:创建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的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1291749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP Walk Score API 集成:解决数组循环中的非对象属性访问错误
上一篇 2025年12月11日 07:43:12
Symfony 如何将设备信息转为数组
下一篇 2025年12月11日 07:43:19

相关推荐

发表回复

登录后才能评论
关注微信