Skip to content

[cloud_functions]: Integer parameters serialized as objects with type key in iOS #17587

@ernesto-elsaesser

Description

@ernesto-elsaesser

Is there an existing issue for this?

  • I have searched the existing issues.

Which plugins are affected?

Cloud Functions

Which platforms are affected?

iOS

Description

In a recent update, the cloud_functions package started using Pigeon for the platform channel. The Pigeon codec seems to serialize all integers as Int64. When calling an HttpsCallable in Dart with integer values in the parameters, the platform side will receive the values as Int64 and pass them as-is to the FirebaseFunctions Swift package, which then wraps them as:

{
    "value": "1234567",
    "@type': 'type.googleapis.com/google.protobuf.Int64Value"
}

for the HTTP request. Which of course causes errors with Cloud Functions that expect a numeric value.

Reproducing the issue

In pubspec.yaml:

firebase_core: ^3.15.0
cloud_functions: ^5.6.0

FirebaseFunctions Pod version: 11.15.0

Flutter client Dart code:

final functions = FirebaseFunctions.instanceFor(...);
final foo = functions.httpsCallable("foo");
foo({"count": 1});

Firebase Functions Python code:

@https_fn.on_call()
def foo(request: https_fn.CallableRequest):
    count = request.data["count"]
    assert type(count) == int

Firebase Core version

3.15.1

Flutter Version

3.32.5

Flutter dependencies

Expand Flutter dependencies snippet
Dart SDK 3.8.1
Flutter SDK 3.32.5
myapp 1.0.0+1

dependencies:
- camera 0.11.1 [camera_android_camerax camera_avfoundation camera_platform_interface camera_web flutter flutter_plugin_android_lifecycle]
- camera_android 0.10.10+3 [camera_platform_interface flutter flutter_plugin_android_lifecycle stream_transform]
- cloud_firestore 5.6.11 [cloud_firestore_platform_interface cloud_firestore_web collection firebase_core firebase_core_platform_interface flutter meta]
- cloud_functions 5.6.1 [cloud_functions_platform_interface cloud_functions_web firebase_core firebase_core_platform_interface flutter]
- cupertino_icons 1.0.8
- firebase_auth 5.6.2 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta]
- firebase_core 3.15.1 [firebase_core_platform_interface firebase_core_web flutter meta]
- firebase_crashlytics 4.3.9 [firebase_core firebase_core_platform_interface firebase_crashlytics_platform_interface flutter stack_trace]
- flutter 0.0.0 [characters collection material_color_utilities meta vector_math sky_engine]
- path_provider 2.1.5 [flutter path_provider_android path_provider_foundation path_provider_linux path_provider_platform_interface path_provider_windows]
- photo_manager 3.7.1 [flutter]
- shared_preferences 2.5.3 [flutter shared_preferences_android shared_preferences_foundation shared_preferences_linux shared_preferences_platform_interface shared_preferences_web shared_preferences_windows]
- url_launcher 6.3.1 [flutter url_launcher_android url_launcher_ios url_launcher_linux url_launcher_macos url_launcher_platform_interface url_launcher_web url_launcher_windows]
- video_player 2.10.0 [flutter html video_player_android video_player_avfoundation video_player_platform_interface video_player_web]
- zxing_lib 1.1.4 [intl charset]

transitive dependencies:
- _flutterfire_internals 1.3.58 [collection firebase_core firebase_core_platform_interface flutter meta]
- async 2.13.0 [collection meta]
- boolean_selector 2.1.2 [source_span string_scanner]
- camera_android_camerax 0.6.19 [async camera_platform_interface flutter meta stream_transform]
- camera_avfoundation 0.9.20+1 [camera_platform_interface flutter stream_transform]
- camera_platform_interface 2.10.0 [cross_file flutter plugin_platform_interface stream_transform]
- camera_web 0.3.5 [camera_platform_interface flutter flutter_web_plugins stream_transform web]
- characters 1.4.0
- charset 2.0.1
- clock 1.1.2
- cloud_firestore_platform_interface 6.6.11 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface]
- cloud_firestore_web 4.4.11 [_flutterfire_internals cloud_firestore_platform_interface collection firebase_core firebase_core_web flutter flutter_web_plugins]
- cloud_functions_platform_interface 5.8.1 [firebase_core flutter meta plugin_platform_interface]
- cloud_functions_web 4.11.4 [cloud_functions_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins web]
- collection 1.19.1
- cross_file 0.3.4+2 [meta web]
- csslib 1.0.2 [source_span]
- fake_async 1.3.3 [clock collection]
- ffi 2.1.4
- file 7.0.1 [meta path]
- firebase_auth_platform_interface 7.7.2 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface]
- firebase_auth_web 5.15.2 [firebase_auth_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins http_parser meta web]
- firebase_core_platform_interface 6.0.0 [collection flutter flutter_test meta plugin_platform_interface]
- firebase_core_web 2.24.1 [firebase_core_platform_interface flutter flutter_web_plugins meta web]
- firebase_crashlytics_platform_interface 3.8.9 [_flutterfire_internals collection firebase_core flutter meta plugin_platform_interface]
- flutter_plugin_android_lifecycle 2.0.28 [flutter]
- flutter_test 0.0.0 [flutter test_api matcher path fake_async clock stack_trace vector_math leak_tracker_flutter_testing async boolean_selector characters collection leak_tracker leak_tracker_testing material_color_utilities meta source_span stream_channel string_scanner term_glyph vm_service]
- flutter_web_plugins 0.0.0 [flutter characters collection material_color_utilities meta vector_math]
- html 0.15.6 [csslib source_span]
- http_parser 4.1.2 [collection source_span string_scanner typed_data]
- intl 0.20.2 [clock meta path]
- leak_tracker 10.0.9 [clock collection meta path vm_service]
- leak_tracker_flutter_testing 3.0.9 [flutter leak_tracker leak_tracker_testing matcher meta]
- leak_tracker_testing 3.0.1 [leak_tracker matcher meta]
- matcher 0.12.17 [async meta stack_trace term_glyph test_api]
- material_color_utilities 0.11.1 [collection]
- meta 1.16.0
- path 1.9.1
- path_provider_android 2.2.17 [flutter path_provider_platform_interface]
- path_provider_foundation 2.4.1 [flutter path_provider_platform_interface]
- path_provider_linux 2.2.1 [ffi flutter path path_provider_platform_interface xdg_directories]
- path_provider_platform_interface 2.1.2 [flutter platform plugin_platform_interface]
- path_provider_windows 2.3.0 [ffi flutter path path_provider_platform_interface]
- platform 3.1.6
- plugin_platform_interface 2.1.8 [meta]
- shared_preferences_android 2.4.10 [flutter shared_preferences_platform_interface]
- shared_preferences_foundation 2.5.4 [flutter shared_preferences_platform_interface]
- shared_preferences_linux 2.4.1 [file flutter path path_provider_linux path_provider_platform_interface shared_preferences_platform_interface]
- shared_preferences_platform_interface 2.4.1 [flutter plugin_platform_interface]
- shared_preferences_web 2.4.3 [flutter flutter_web_plugins shared_preferences_platform_interface web]
- shared_preferences_windows 2.4.1 [file flutter path path_provider_platform_interface path_provider_windows shared_preferences_platform_interface]
- sky_engine 0.0.0
- source_span 1.10.1 [collection path term_glyph]
- stack_trace 1.12.1 [path]
- stream_channel 2.1.4 [async]
- stream_transform 2.1.1
- string_scanner 1.4.1 [source_span]
- term_glyph 1.2.2
- test_api 0.7.4 [async boolean_selector collection meta source_span stack_trace stream_channel string_scanner term_glyph]
- typed_data 1.4.0 [collection]
- url_launcher_android 6.3.16 [flutter url_launcher_platform_interface]
- url_launcher_ios 6.3.3 [flutter url_launcher_platform_interface]
- url_launcher_linux 3.2.1 [flutter url_launcher_platform_interface]
- url_launcher_macos 3.2.2 [flutter url_launcher_platform_interface]
- url_launcher_platform_interface 2.3.2 [flutter plugin_platform_interface]
- url_launcher_web 2.4.1 [flutter flutter_web_plugins url_launcher_platform_interface web]
- url_launcher_windows 3.1.4 [flutter url_launcher_platform_interface]
- vector_math 2.1.4
- video_player_android 2.8.7 [flutter video_player_platform_interface]
- video_player_avfoundation 2.7.2 [flutter video_player_platform_interface]
- video_player_platform_interface 6.4.0 [flutter plugin_platform_interface]
- video_player_web 2.3.5 [flutter flutter_web_plugins video_player_platform_interface web]
- vm_service 15.0.0
- web 1.1.1
- xdg_directories 1.1.0 [meta path]

Additional context and comments

I am aware that cloud_function version 6 and firebase_core version 4 were just release a few days ago and we are using the previous versions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    blocked: customer-responseWaiting for customer response, e.g. more information was requested.platform: iosIssues / PRs which are specifically for iOS.plugin: functionstype: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions