繁体   English   中英

Firebase 云消息多播在令牌无效时不抛出异常

[英]Firebase Cloud Messaging Multicast not throwing exceptions when tokens are invalid

如果令牌已过期或未注册,我正在尝试删除 FCM 通知令牌。 我添加了一个 try-except 块来捕获与无效令牌相关的特定错误,但它似乎没有触发。 但是,手动循环批处理响应似乎可行,但我找不到不同异常消息的文档。

  1. 根据文档response.exceptionFirebaseError但我怎么知道该错误与无效令牌特别相关?
  2. response.exception打印一个字符串,而不是FirebaseError Object,例如可以访问原因和代码属性的文档 为什么会这样?
  3. 为什么 except 不能捕获 FirebaseErrors?

希望获得有关如何处理删除非活动令牌的一些帮助和建议。

代码如下:

    try:
        batch_response = messaging.send_multicast(message)
    except messaging.UnregisteredError as err:
        print('Error message:', err)
        print('Error code:', err.code)
        print('HTTP response:', err.http_response)
    
    except exceptions.FirebaseError as ex:
        print('Something else went wrong')

    for (index, response) in enumerate(batch_response.responses):
        print(f'status: {response.success}')
        print(f'exception: {response.exception}')
        print('-----------------------------------')

终端打印:

status: False
exception: Requested entity was not found.
-----------------------------------
status: True
exception: None
-----------------------------------
status: False
exception: The registration token is not a valid FCM registration token
-----------------------------------
status: False
exception: The registration token is not a valid FCM registration token
-----------------------------------

根据文档, response.exception 是 FirebaseError 但我怎么知道该错误与无效令牌特别相关?

您可以检查response.exception的类型。 例如:

isinstance(response.exception, messaging.UnregisteredError)

response.exception 打印一个字符串,而不是 FirebaseError Object,例如可以访问原因和代码属性的文档。 为什么会这样?

它正在打印一个字符串,因为您在代码中执行print(f'exception: {response.exception}') 它实际上是文档中提到的FirebaseError object。

为什么 except 不能捕获 FirebaseErrors?

send_multicast()不会引发部分失败。 所以没什么可抓的。 您必须检查返回值,并相应地处理返回 object 中的任何错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM