
本文旨在解决在使用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分为三类:
示例代码(PHP)
以下是一个使用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();
}
}代码解释:
注意事项:
总结:
通过使用Firebase Admin SDK提供的validateRegistrationTokens方法,你可以有效地验证和管理设备Token,清理数据库中无效的Token,提高推送的有效性和用户体验。请务必注意批量大小限制、频率限制和错误处理,并定期执行Token验证。 通过定期清理无效token,可以有效减少不必要的推送尝试,节省资源,并提高整体推送效率。
以上就是FCM Cloud Messaging:有效验证和管理设备Token的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号