diff --git a/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestorePlugin.java b/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestorePlugin.java index 1684d7dfd4a5..02e2ccf5ffa0 100644 --- a/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestorePlugin.java +++ b/packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestorePlugin.java @@ -8,6 +8,7 @@ import static com.google.firebase.firestore.AggregateField.count; import static com.google.firebase.firestore.AggregateField.sum; +import android.annotation.SuppressLint; import android.app.Activity; import android.util.Log; import androidx.annotation.NonNull; @@ -33,6 +34,7 @@ import com.google.firebase.firestore.Source; import com.google.firebase.firestore.Transaction; import com.google.firebase.firestore.WriteBatch; +import com.google.firebase.firestore.remote.FirestoreChannel; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.embedding.engine.plugins.activity.ActivityAware; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; @@ -129,9 +131,12 @@ private static void destroyCachedFirebaseFirestoreInstanceForKey(FirebaseFiresto } } + @SuppressLint("RestrictedApi") @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { initInstance(binding.getBinaryMessenger()); + FirestoreChannel.setClientLanguage( + "gl-dart/" + io.flutter.plugins.firebase.firestore.BuildConfig.LIBRARY_VERSION); } @Override diff --git a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore.podspec b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore.podspec index fec9abc8c01c..5f6046a9d0df 100755 --- a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore.podspec +++ b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore.podspec @@ -24,7 +24,7 @@ Pod::Spec.new do |s| s.license = { :file => '../LICENSE' } s.authors = 'The Chromium Authors' s.source = { :path => '.' } - s.source_files = 'cloud_firestore/Sources/cloud_firestore/**/*.{h,m}' + s.source_files = 'cloud_firestore/Sources/cloud_firestore/**/*.{h,m,mm}' s.public_header_files = 'cloud_firestore/Sources/cloud_firestore/include/Public/**/*.h' s.private_header_files = 'cloud_firestore/Sources/cloud_firestore/include/Private/**/*.h' diff --git a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestorePlugin.m b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestorePlugin.m index 4edb7cf0f641..b7fa740fe68c 100644 --- a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestorePlugin.m +++ b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirebaseFirestorePlugin.m @@ -33,6 +33,10 @@ NSString *const kFLTFirebaseFirestoreLoadBundleChannelName = @"plugins.flutter.io/firebase_firestore/loadBundle"; +@interface FLTFirestoreClientLanguage : NSObject ++ (void)setClientLanguage:(NSString *)language; +@end + @interface FLTFirebaseFirestorePlugin () @property(nonatomic, retain) NSMutableDictionary *transactions; @@ -122,6 +126,10 @@ - (instancetype)init:(NSObject *)messenger { + (void)registerWithRegistrar:(NSObject *)registrar { FLTFirebaseFirestorePlugin *instance = [[FLTFirebaseFirestorePlugin alloc] init:[registrar messenger]]; +#if TARGET_OS_IPHONE + [FLTFirestoreClientLanguage + setClientLanguage:[NSString stringWithFormat:@"gl-dart/%@", @LIBRARY_VERSION]]; +#endif #if TARGET_OS_OSX // TODO(Salakar): Publish does not exist on MacOS version of FlutterPluginRegistrar. diff --git a/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirestoreClientLanguage.mm b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirestoreClientLanguage.mm new file mode 100644 index 000000000000..399944ededf8 --- /dev/null +++ b/packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FLTFirestoreClientLanguage.mm @@ -0,0 +1,33 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import +#import + +namespace firebase { +namespace firestore { +namespace api { + +class Firestore { + public: + static void SetClientLanguage(std::string language_token); +}; + +} // namespace api +} // namespace firestore +} // namespace firebase + +@interface FLTFirestoreClientLanguage : NSObject ++ (void)setClientLanguage:(NSString *)language; +@end + +@implementation FLTFirestoreClientLanguage ++ (void)setClientLanguage:(NSString *)language { + if (language == nil) { + return; + } + std::string token = std::string([language UTF8String]); + firebase::firestore::api::Firestore::SetClientLanguage(token); +} +@end