diff --git a/zerver/lib/push_notifications.py b/zerver/lib/push_notifications.py index 6769b76568..ca05ce5e68 100644 --- a/zerver/lib/push_notifications.py +++ b/zerver/lib/push_notifications.py @@ -1447,6 +1447,9 @@ APNsPriority: TypeAlias = Literal[10, 5, 1] @dataclass class PushRequestBasePayload: + # FCM expects in this type must always be strings. Non-string + # fields must be converted into strings in the FCM code path + # within send_e2ee_push_notifications. push_account_id: int encrypted_data: str diff --git a/zilencer/lib/push_notifications.py b/zilencer/lib/push_notifications.py index f1f5466600..891225c4ce 100644 --- a/zilencer/lib/push_notifications.py +++ b/zilencer/lib/push_notifications.py @@ -196,9 +196,14 @@ def send_e2ee_push_notifications( apns_remote_push_devices.append(remote_push_device) else: assert isinstance(push_request, FCMPushRequest) + fcm_payload = dict( + # FCM only allows string values, so we stringify push_account_id. + push_account_id=str(push_request.payload.push_account_id), + encrypted_data=push_request.payload.encrypted_data, + ) fcm_requests.append( firebase_messaging.Message( - data=asdict(push_request.payload), + data=fcm_payload, token=remote_push_device.token, android=firebase_messaging.AndroidConfig(priority=push_request.fcm_priority), )