diff --git a/packages/firebase_crashlytics/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/FlutterFirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/FlutterFirebaseCrashlyticsPlugin.java index ba15bc6d7c36..b015efaf764b 100644 --- a/packages/firebase_crashlytics/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/FlutterFirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/FlutterFirebaseCrashlyticsPlugin.java @@ -6,6 +6,8 @@ import android.content.Context; import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.os.Handler; import android.os.Looper; import android.util.Log; @@ -16,6 +18,7 @@ import com.google.firebase.FirebaseApp; import com.google.firebase.crashlytics.FirebaseCrashlytics; import com.google.firebase.crashlytics.FlutterFirebaseCrashlyticsInternal; +import com.google.firebase.crashlytics.internal.Logger; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; @@ -35,6 +38,9 @@ public class FlutterFirebaseCrashlyticsPlugin public static final String TAG = "FLTFirebaseCrashlytics"; private MethodChannel channel; + private static final String FIREBASE_CRASHLYTICS_COLLECTION_ENABLED = + "firebase_crashlytics_collection_enabled"; + private void initInstance(BinaryMessenger messenger) { String channelName = "plugins.flutter.io/firebase_crashlytics"; channel = new MethodChannel(messenger, channelName); @@ -380,20 +386,42 @@ private boolean isCrashlyticsCollectionEnabled(FirebaseApp app) { SharedPreferences crashlyticsSharedPrefs = getCrashlyticsSharedPrefs(app.getApplicationContext()); - if (crashlyticsSharedPrefs.contains("firebase_crashlytics_collection_enabled")) { - enabled = crashlyticsSharedPrefs.getBoolean("firebase_crashlytics_collection_enabled", true); + if (crashlyticsSharedPrefs.contains(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED)) { + enabled = crashlyticsSharedPrefs.getBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED, true); } else { - if (app.isDataCollectionDefaultEnabled()) { - FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true); - enabled = true; - } else { - enabled = false; - } + + Boolean manifestEnabled = + readCrashlyticsDataCollectionEnabledFromManifest(app.getApplicationContext()); + + FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(manifestEnabled); + enabled = manifestEnabled; } return enabled; } + private static Boolean readCrashlyticsDataCollectionEnabledFromManifest( + Context applicationContext) { + try { + final PackageManager packageManager = applicationContext.getPackageManager(); + if (packageManager != null) { + final ApplicationInfo applicationInfo = + packageManager.getApplicationInfo( + applicationContext.getPackageName(), PackageManager.GET_META_DATA); + if (applicationInfo != null + && applicationInfo.metaData != null + && applicationInfo.metaData.containsKey(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED)) { + return applicationInfo.metaData.getBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED); + } + } + } catch (PackageManager.NameNotFoundException e) { + // This shouldn't happen since it's this app's package, but fall through to default + // if so. + Logger.getLogger().e("Could not read data collection permission from manifest", e); + } + return true; + } + @Override public Task> getPluginConstantsForFirebaseApp(FirebaseApp firebaseApp) { TaskCompletionSource> taskCompletionSource = new TaskCompletionSource<>(); diff --git a/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Flutter/AppFrameworkInfo.plist b/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Flutter/AppFrameworkInfo.plist index 9625e105df39..7c5696400627 100644 --- a/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Flutter/AppFrameworkInfo.plist +++ b/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/project.pbxproj b/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/project.pbxproj index 4762e281d386..bd79584a3d1f 100644 --- a/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/project.pbxproj @@ -171,7 +171,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { diff --git a/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index b9fdd8ee3149..0bb727268b7b 100644 --- a/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/firebase_crashlytics/firebase_crashlytics/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ +