
本文旨在解决在使用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
微信扫一扫
支付宝扫一扫