{"id":71990,"date":"2024-08-03T07:21:42","date_gmt":"2024-08-03T03:51:42","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/firebase-crashlytics-4d9\/"},"modified":"2024-08-03T07:21:42","modified_gmt":"2024-08-03T03:51:42","slug":"firebase-crashlytics-4d9","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/firebase-crashlytics-4d9\/","title":{"rendered":"Firebase Crashlytics &#8211; \u0627\u0646\u062c\u0645\u0646 DEV"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0631\u0627\u0628\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 Firebase \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Flutter \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645.<\/p>\n<p>  0. \u0633\u0641\u0627\u0631\u0634 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Firebase<\/p>\n<p>\u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Firebase \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 Firebase\u060c \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u062b\u0628\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646:<\/p>\n<p>\u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 Firebase\u060c \u0628\u0647 \u00ab\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647\u00bb \u0628\u0631\u0648\u06cc\u062f \u0648 \u0631\u0648\u06cc \u00ab\u0627\u0641\u0632\u0648\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u00bb \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<br \/>\n\u0646\u0627\u0645 \u0628\u0633\u062a\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 Flutter \u0634\u0645\u0627 (applicationId).<br \/>\n\u0646\u0627\u0645 \u0628\u0633\u062a\u0647 (Get SHA1 Fingerprint) \u0628\u0631\u0646\u0627\u0645\u0647 Flutter \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u062b\u0631 \u0627\u0646\u06af\u0634\u062a \u06af\u0648\u0627\u0647\u06cc SHA-1 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u06a9\u0646\u0633\u0648\u0644 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0648\u062f\u06cc\u0648<\/p>\n<p>$ .\/gradlew signingReport<\/p>\n<p>google-services.json  \u062f\u0627\u0646\u0644\u0648\u062f:<\/p>\n<p>google-services.json  \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f.<br \/>\n\u062f\u0631 \u067e\u0631\u0648\u0698\u0647 Flutter \u062e\u0648\u062f \u0641\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f. android\/app \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  1*.  firebase cli \u0631\u0627 \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f*<\/p>\n<p>firebase_options.dart \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.  \u0628\u0639\u062f\u0627\u064b \u062e\u0637\u0627\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 aipkey \u0648 \u0686\u0646\u062f\u06cc\u0646 \u062e\u0637\u0627\u06cc installizeApp \u0628\u0631\u0637\u0631\u0641 \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f.<\/p>\n<p>$ curl -sL https:\/\/firebase.tools | bash <\/p>\n<p>$ firebase login<\/p>\n<p>$ firebase projects:list<\/p>\n<p>$ dart pub global activate flutterfire_cli <\/p>\n<p>=================================================================<br \/>\n.zshrc or .bashrc \ucd94\uac00 \ud6c4 flutterfire \uc2e4\ud589<br \/>\nexport PATH=&#8221;$PATH&#8221;:&#8221;$HOME\/.pub-cache\/bin&#8221;<br \/>\n==================================================================<br \/>\n$ flutterfire configure<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2. \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0648\u062a\u0631<\/p>\n<p>pubspec.yaml  \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0641\u0627\u06cc\u0644:<\/p>\n<p>\u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 Firebase pubspec.yaml \u0628\u0647 \u0641\u0627\u06cc\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>dependencies:<br \/>\n  flutter:<br \/>\n    sdk: flutter<br \/>\n  firebase_core: ^3.1.1  # Firebase \ucd08\uae30\ud654 \ud328\ud0a4\uc9c0<br \/>\n  firebase_crashlytics: ^4.0.2  # Crashlytics \ud328\ud0a4\uc9c0<\/p>\n<p>&#8211; `firebase_core`\ub294 Firebase \uc11c\ube44\uc2a4 \ucd08\uae30\ud654\ub97c \ub2f4\ub2f9\ud558\uace0,<br \/>\n`firebase_crashlytics`\ub294 \uc571 \ucda9\ub3cc \uad00\ub9ac\ub97c \uc704\ud574 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f:<\/p>\n<p>\u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0627\u062a\u0631 android\/build.gradle \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f\u060c<br \/>\nbuildscript \u0628\u0644\u0648\u06a9 \u0648 \u0645\u0633\u06cc\u0631 \u06a9\u0644\u0627\u0633 \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Firebase \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>buildscript {<br \/>\n    repositories {<br \/>\n        google()<br \/>\n        mavenCentral()<br \/>\n    }<br \/>\n    dependencies {<br \/>\n        classpath &#8216;com.google.gms:google-services:4.4.2&#8217;<br \/>\n        classpath &#8216;com.google.firebase:firebase-crashlytics-gradle:2.7.1&#8217;<br \/>\n    }<br \/>\n}<\/p>\n<p>allprojects {<br \/>\n    repositories {<br \/>\n        google()<br \/>\n        mavenCentral()<br \/>\n    }<br \/>\n}<\/p>\n<p>rootProject.buildDir = &#8220;..\/build&#8221;<br \/>\nsubprojects {<br \/>\n    project.buildDir = &#8220;${rootProject.buildDir}\/${project.name}&#8221;<br \/>\n}<br \/>\nsubprojects {<br \/>\n    project.evaluationDependsOn(&#8220;:app&#8221;)<br \/>\n}<\/p>\n<p>tasks.register(&#8220;clean&#8221;, Delete) {<br \/>\n    delete rootProject.buildDir<br \/>\n}<\/p>\n<p>&#8211; Google Services \ud50c\ub7ec\uadf8\uc778\uc758 \ubc84\uc804(`com.google.gms:google-services`)<br \/>\n&#8211; Firebase Crashlytics \ud50c\ub7ec\uadf8\uc778\uc758 \ubc84\uc804<br \/>\n(`com.google.firebase:firebase-crashlytics-gradle`)\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0633\u0637\u062d \u0628\u0631\u0646\u0627\u0645\u0647 build.gradle \u062a\u0635\u062d\u06cc\u062d:<\/p>\n<p>\u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0627\u062a\u0631 android\/app\/build.gradle \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0641\u0632\u0648\u0646\u0647 Firebase Crashlytics \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>plugins {<br \/>\n    id &#8220;com.android.application&#8221;<br \/>\n    id &#8220;kotlin-android&#8221;<br \/>\n    \/\/ The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.<br \/>\n    id &#8220;dev.flutter.flutter-gradle-plugin&#8221;<br \/>\n    \/\/ firbase Crashlytics<br \/>\n    id &#8220;&#8216;com.google.gms.google-services'&#8221;<br \/>\n    id &#8220;com.google.firebase.crashlytics&#8221;<br \/>\n}<\/p>\n<p>dependencies { \/\/ Firbase Crashlytics<br \/>\n    implementation(platform(&#8220;com.google.firebase:firebase-bom:33.1.1&#8221;))<br \/>\n    \/\/ implementation &#8216;com.google.firebase:firebase-analytics-ktx&#8217;<br \/>\n    implementation &#8216;com.google.firebase:firebase-crashlytics-ktx&#8217;<br \/>\n}<\/p>\n<p>&#8220;com.google.gms.google-services&#8221;\u0648 &#8220;com.google.firebase.crashlytics&#8221;\u0648<br \/>\n&#8220;com.google.firebase:firebase-bom:33.1.1&#8221; (\u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc) \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u062e\u062f\u0645\u0627\u062a Firebase \u0648 Crashlytics \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  \u067e\u0627\u06cc\u0627\u0646 (\u062a\u0633\u062a)<\/p>\n<p>&#8220;&#8221;\u062a\u0635\u0627\u062f\u0641 \u0631\u062e \u062f\u0627\u062f&#8221; \u062f\u06a9\u0645\u0647 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f \u062a\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631<\/p>\n<p>import &#8216;dart:async&#8217;;<br \/>\nimport &#8216;package:firebase_core\/firebase_core.dart&#8217;;<br \/>\nimport &#8216;package:firebase_crashlytics\/firebase_crashlytics.dart&#8217;;<br \/>\nimport &#8216;package:flutter\/foundation.dart&#8217;;<br \/>\nimport &#8216;package:flutter\/material.dart&#8217;;<br \/>\nimport &#8216;package:flutter\/foundation.dart&#8217;;<\/p>\n<p>\/\/ The entry point of the application<br \/>\nFuturevoid&gt; main() async {<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n  await Firebase.initializeApp();<br \/>\n  FlutterError.onError = (errorDetails) {<br \/>\n    FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);<br \/>\n  };<br \/>\n  \/\/ Pass all uncaught asynchronous errors that aren&#8217;t handled by the Flutter framework to Crashlytics<br \/>\n  PlatformDispatcher.instance.onError = (error, stack) {<br \/>\n    FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);<br \/>\n    return true;<br \/>\n  };<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>  \/\/ Runs the main application widget<br \/>\n  runApp(const WhereIsKaaba());<br \/>\n}<\/p>\n<p>\/\/ Main application widget<br \/>\nclass WhereIsKaaba extends StatelessWidget {<br \/>\n  const WhereIsKaaba({super.key});<\/p>\n<p>  \/\/ This widget is the root of your application.<br \/>\n  @override<br \/>\n  Widget build(BuildContext context) {<br \/>\n    \/\/ Define the light text theme based on Material3<br \/>\n    final TextTheme lightTextTheme =<br \/>\n        ThemeData.light(useMaterial3: true).textTheme;<br \/>\n    \/\/ Define the dark text theme based on Material3<br \/>\n    final TextTheme darkTextTheme =<br \/>\n        ThemeData.dark(useMaterial3: true).textTheme;<\/p>\n<p>    \/\/ Create a custom material theme for the light theme<br \/>\n    final CustomMaterialTheme lightCustomMaterialTheme =<br \/>\n        CustomMaterialTheme(lightTextTheme);<br \/>\n    \/\/ Create a custom material theme for the dark theme<br \/>\n    final CustomMaterialTheme darkCustomMaterialTheme =<br \/>\n        CustomMaterialTheme(darkTextTheme);<\/p>\n<p>    return MaterialApp(<br \/>\n      debugShowCheckedModeBanner: false,<br \/>\n      \/\/ Localization delegates for internationalization support<br \/>\n      localizationsDelegates: const [<br \/>\n        S.delegate,<br \/>\n        GlobalMaterialLocalizations.delegate,<br \/>\n        GlobalWidgetsLocalizations.delegate,<br \/>\n        GlobalCupertinoLocalizations.delegate,<br \/>\n      ],<br \/>\n      \/\/ Supported locales for the application<br \/>\n      supportedLocales: S.delegate.supportedLocales,<br \/>\n      \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n      \/\/ Title of the application<br \/>\n      title: &#8216;Where is Kaaba.?&#8217;,<br \/>\n      \/\/ Light theme configuration<br \/>\n      theme: lightCustomMaterialTheme.light(),<br \/>\n      \/\/ Dark theme configuration<br \/>\n      darkTheme: darkCustomMaterialTheme.dark(),<br \/>\n      \/\/ Home widget of the application<br \/>\n      home: Semantics(<br \/>\n        label: &#8216;Main Screen with navigation tabs&#8217;,<br \/>\n        child: Center(<br \/>\n          child: ElevatedButton(<br \/>\n            onPressed: () {<br \/>\n             \/\/ \uac15\uc81c\ub85c \uc608\uc678\ub97c \ubc1c\uc0dd\uc2dc\ucf1c Crashlytics \ub85c\uadf8\ub97c \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4.<br \/>\n              throw Exception(&#8220;\ud14c\uc2a4\ud2b8 \uc608\uc678&#8221;);<br \/>\n            },<br \/>\n            child: const Text(&#8220;\ud06c\ub798\uc2dc \ubc1c\uc0dd&#8221;),<br \/>\n          ),<br \/>\n        ),<br \/>\n      ),<br \/>\n    );<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<div data-article-id=\"1946044\" id=\"article-body\">\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0631\u0627\u0628\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 Firebase \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Flutter \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/firebase-crashlytics-4d9\/#0_%D8%B3%D9%81%D8%A7%D8%B1%D8%B4_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_Firebase\" >0. \u0633\u0641\u0627\u0631\u0634 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Firebase<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/firebase-crashlytics-4d9\/#1_firebase_cli_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%D9%88_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\" >1*.  firebase cli \u0631\u0627 \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f*<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/firebase-crashlytics-4d9\/#2_%D8%AA%D9%86%D8%B8%DB%8C%D9%85%D8%A7%D8%AA_%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D9%81%D9%84%D9%88%D8%AA%D8%B1\" >2. \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0648\u062a\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/firebase-crashlytics-4d9\/#%D9%BE%D8%A7%DB%8C%D8%A7%D9%86_%D8%AA%D8%B3%D8%AA\" >\u067e\u0627\u06cc\u0627\u0646 (\u062a\u0633\u062a)<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"0_%D8%B3%D9%81%D8%A7%D8%B1%D8%B4_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_Firebase\"><\/span>\n<p>  0. \u0633\u0641\u0627\u0631\u0634 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Firebase<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<p><strong>\u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Firebase \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 Firebase\u060c \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u062b\u0628\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646<\/strong>:<\/p>\n<ul>\n<li>\u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 Firebase\u060c \u0628\u0647 \u00ab\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647\u00bb \u0628\u0631\u0648\u06cc\u062f \u0648 \u0631\u0648\u06cc \u00ab\u0627\u0641\u0632\u0648\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u00bb \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0646\u0627\u0645 \u0628\u0633\u062a\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 Flutter \u0634\u0645\u0627 (<code>applicationId<\/code>).<\/li>\n<li>\u0646\u0627\u0645 \u0628\u0633\u062a\u0647 (Get SHA1 Fingerprint) \u0628\u0631\u0646\u0627\u0645\u0647 Flutter \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0627\u062b\u0631 \u0627\u0646\u06af\u0634\u062a \u06af\u0648\u0627\u0647\u06cc SHA-1 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<\/strong>:<\/p>\n<ul>\n<li>\u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u06a9\u0646\u0633\u0648\u0644 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0648\u062f\u06cc\u0648\n<\/li>\n<\/ul>\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>.\/gradlew signingReport\n<\/code><\/pre>\n<\/li>\n<li>\n<p><strong><code>google-services.json<\/code>  \u062f\u0627\u0646\u0644\u0648\u062f<\/strong>:<\/p>\n<ul>\n<li>\n<code>google-services.json<\/code>  \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u062f\u0631 \u067e\u0631\u0648\u0698\u0647 Flutter \u062e\u0648\u062f \u0641\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f. <code>android\/app<\/code> \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"1_firebase_cli_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%D9%88_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  1*<em>.  firebase cli \u0631\u0627 \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f<\/em>*<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>firebase_options.dart \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.  \u0628\u0639\u062f\u0627\u064b \u062e\u0637\u0627\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 aipkey \u0648 \u0686\u0646\u062f\u06cc\u0646 \u062e\u0637\u0627\u06cc installizeApp \u0628\u0631\u0637\u0631\u0641 \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-sL<\/span> https:\/\/firebase.tools | bash \n\n<span class=\"nv\">$ <\/span>firebase login\n\n<span class=\"nv\">$ <\/span>firebase projects:list\n\n<span class=\"nv\">$ <\/span>dart pub global activate flutterfire_cli \n\n<span class=\"o\">=================================================================<\/span>\n.zshrc or .bashrc \ucd94\uac00 \ud6c4 flutterfire \uc2e4\ud589\n<span class=\"nb\">export <\/span><span class=\"nv\">PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$PATH<\/span><span class=\"s2\">\"<\/span>:<span class=\"s2\">\"<\/span><span class=\"nv\">$HOME<\/span><span class=\"s2\">\/.pub-cache\/bin\"<\/span>\n<span class=\"o\">==================================================================<\/span>\n<span class=\"nv\">$ <\/span>flutterfire configure\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"2_%D8%AA%D9%86%D8%B8%DB%8C%D9%85%D8%A7%D8%AA_%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D9%81%D9%84%D9%88%D8%AA%D8%B1\"><\/span>\n<p>  2. \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0648\u062a\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<p><strong><code>pubspec.yaml<\/code>  \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0641\u0627\u06cc\u0644<\/strong>:<\/p>\n<ul>\n<li>\u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 Firebase <code>pubspec.yaml<\/code> \u0628\u0647 \u0641\u0627\u06cc\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ul>\n<pre class=\"highlight yaml\"><code><span class=\"na\">dependencies<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">flutter<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">sdk<\/span><span class=\"pi\">:<\/span> <span class=\"s\">flutter<\/span>\n  <span class=\"na\">firebase_core<\/span><span class=\"pi\">:<\/span> <span class=\"s\">^3.1.1<\/span>  <span class=\"c1\"># Firebase \ucd08\uae30\ud654 \ud328\ud0a4\uc9c0<\/span>\n  <span class=\"na\">firebase_crashlytics<\/span><span class=\"pi\">:<\/span> <span class=\"s\">^4.0.2<\/span>  <span class=\"c1\"># Crashlytics \ud328\ud0a4\uc9c0<\/span>\n\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>- `firebase_core`\ub294 Firebase \uc11c\ube44\uc2a4 \ucd08\uae30\ud654\ub97c \ub2f4\ub2f9\ud558\uace0, \n`firebase_crashlytics`\ub294 \uc571 \ucda9\ub3cc \uad00\ub9ac\ub97c \uc704\ud574 \ud544\uc694\ud569\ub2c8\ub2e4.\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<p><strong>\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f<\/strong>:<\/p>\n<ul>\n<li>\u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0627\u062a\u0631 <code>android\/build.gradle<\/code> \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f\u060c<br \/>\n<code>buildscript<\/code> \u0628\u0644\u0648\u06a9 \u0648 \u0645\u0633\u06cc\u0631 \u06a9\u0644\u0627\u0633 \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Firebase \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ul>\n<pre class=\"highlight plaintext\"><code>buildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        classpath 'com.google.gms:google-services:4.4.2'\n        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\nrootProject.buildDir = \"..\/build\"\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}\/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(\":app\")\n}\n\ntasks.register(\"clean\", Delete) {\n    delete rootProject.buildDir\n}\n\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>- Google Services \ud50c\ub7ec\uadf8\uc778\uc758 \ubc84\uc804(`com.google.gms:google-services`)\n- Firebase Crashlytics \ud50c\ub7ec\uadf8\uc778\uc758 \ubc84\uc804\n(`com.google.firebase:firebase-crashlytics-gradle`)\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<p><strong>\u0633\u0637\u062d \u0628\u0631\u0646\u0627\u0645\u0647 <code>build.gradle<\/code> \u062a\u0635\u062d\u06cc\u062d<\/strong>:<\/p>\n<ul>\n<li>\u067e\u0631\u0648\u0698\u0647 \u0641\u0644\u0627\u062a\u0631 <code>android\/app\/build.gradle<\/code> \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0641\u0632\u0648\u0646\u0647 Firebase Crashlytics \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ul>\n<pre class=\"highlight plaintext\"><code>plugins {\n    id \"com.android.application\"\n    id \"kotlin-android\"\n    \/\/ The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.\n    id \"dev.flutter.flutter-gradle-plugin\"\n    \/\/ firbase Crashlytics\n    id \"'com.google.gms.google-services'\"\n    id \"com.google.firebase.crashlytics\"\n}\n\ndependencies { \/\/ Firbase Crashlytics\n    implementation(platform(\"com.google.firebase:firebase-bom:33.1.1\"))\n    \/\/ implementation 'com.google.firebase:firebase-analytics-ktx'\n    implementation 'com.google.firebase:firebase-crashlytics-ktx'\n}\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<ul>\n<li>\n<code>\"com.google.gms.google-services\"<\/code>\u0648 <code>\"com.google.firebase.crashlytics\"<\/code>\u0648<br \/>\n<code>\"com.google.firebase:firebase-bom:33.1.1\"<\/code> (\u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc) \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u062e\u062f\u0645\u0627\u062a Firebase \u0648 Crashlytics \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%DB%8C%D8%A7%D9%86_%D8%AA%D8%B3%D8%AA\"><\/span>\n<p>  \u067e\u0627\u06cc\u0627\u0646 (\u062a\u0633\u062a)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>&#8220;<strong>&#8220;\u062a\u0635\u0627\u062f\u0641 \u0631\u062e \u062f\u0627\u062f&#8221;<\/strong> \u062f\u06a9\u0645\u0647 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f \u062a\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kn\">import<\/span> <span class=\"s\">'dart:async'<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"s\">'package:firebase_core\/firebase_core.dart'<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"s\">'package:firebase_crashlytics\/firebase_crashlytics.dart'<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"s\">'package:flutter\/foundation.dart'<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"s\">'package:flutter\/material.dart'<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"s\">'package:flutter\/foundation.dart'<\/span><span class=\"o\">;<\/span>\n\n<span class=\"c1\">\/\/ The entry point of the application<\/span>\n<span class=\"n\">Future<\/span><span class=\"p\"><span class=\"kt\">void<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\n<span class=\"c1\">\/\/-----------------------<\/span>\n  <span class=\"k\">await<\/span> <span class=\"n\">Firebase<\/span><span class=\"o\">.<\/span><span class=\"na\">initializeApp<\/span><span class=\"p\">();<\/span>\n  <span class=\"n\">FlutterError<\/span><span class=\"o\">.<\/span><span class=\"na\">onError<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">errorDetails<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">FirebaseCrashlytics<\/span><span class=\"o\">.<\/span><span class=\"na\">instance<\/span><span class=\"o\">.<\/span><span class=\"na\">recordFlutterFatalError<\/span><span class=\"p\">(<\/span><span class=\"n\">errorDetails<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">};<\/span>\n  <span class=\"c1\">\/\/ Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics<\/span>\n  <span class=\"n\">PlatformDispatcher<\/span><span class=\"o\">.<\/span><span class=\"na\">instance<\/span><span class=\"o\">.<\/span><span class=\"na\">onError<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"n\">stack<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">FirebaseCrashlytics<\/span><span class=\"o\">.<\/span><span class=\"na\">instance<\/span><span class=\"o\">.<\/span><span class=\"na\">recordError<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"n\">stack<\/span><span class=\"p\">,<\/span> <span class=\"nl\">fatal:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">};<\/span>\n\n<span class=\"c1\">\/\/------------------------<\/span>\n\n  <span class=\"c1\">\/\/ Runs the main application widget<\/span>\n  <span class=\"n\">runApp<\/span><span class=\"p\">(<\/span><span class=\"kd\">const<\/span> <span class=\"n\">WhereIsKaaba<\/span><span class=\"p\">());<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ Main application widget<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">WhereIsKaaba<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">StatelessWidget<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"n\">WhereIsKaaba<\/span><span class=\"p\">({<\/span><span class=\"k\">super<\/span><span class=\"o\">.<\/span><span class=\"na\">key<\/span><span class=\"p\">});<\/span>\n\n  <span class=\"c1\">\/\/ This widget is the root of your application.<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Widget<\/span> <span class=\"n\">build<\/span><span class=\"p\">(<\/span><span class=\"n\">BuildContext<\/span> <span class=\"n\">context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Define the light text theme based on Material3<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">TextTheme<\/span> <span class=\"n\">lightTextTheme<\/span> <span class=\"o\">=<\/span>\n        <span class=\"n\">ThemeData<\/span><span class=\"o\">.<\/span><span class=\"na\">light<\/span><span class=\"p\">(<\/span><span class=\"nl\">useMaterial3:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"na\">textTheme<\/span><span class=\"p\">;<\/span>\n    <span class=\"c1\">\/\/ Define the dark text theme based on Material3<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">TextTheme<\/span> <span class=\"n\">darkTextTheme<\/span> <span class=\"o\">=<\/span>\n        <span class=\"n\">ThemeData<\/span><span class=\"o\">.<\/span><span class=\"na\">dark<\/span><span class=\"p\">(<\/span><span class=\"nl\">useMaterial3:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"na\">textTheme<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">\/\/ Create a custom material theme for the light theme<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">CustomMaterialTheme<\/span> <span class=\"n\">lightCustomMaterialTheme<\/span> <span class=\"o\">=<\/span>\n        <span class=\"n\">CustomMaterialTheme<\/span><span class=\"p\">(<\/span><span class=\"n\">lightTextTheme<\/span><span class=\"p\">);<\/span>\n    <span class=\"c1\">\/\/ Create a custom material theme for the dark theme<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">CustomMaterialTheme<\/span> <span class=\"n\">darkCustomMaterialTheme<\/span> <span class=\"o\">=<\/span>\n        <span class=\"n\">CustomMaterialTheme<\/span><span class=\"p\">(<\/span><span class=\"n\">darkTextTheme<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">MaterialApp<\/span><span class=\"p\">(<\/span>\n      <span class=\"nl\">debugShowCheckedModeBanner:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n      <span class=\"c1\">\/\/ Localization delegates for internationalization support<\/span>\n      <span class=\"nl\">localizationsDelegates:<\/span> <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span>\n        <span class=\"n\">S<\/span><span class=\"o\">.<\/span><span class=\"na\">delegate<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">GlobalMaterialLocalizations<\/span><span class=\"o\">.<\/span><span class=\"na\">delegate<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">GlobalWidgetsLocalizations<\/span><span class=\"o\">.<\/span><span class=\"na\">delegate<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">GlobalCupertinoLocalizations<\/span><span class=\"o\">.<\/span><span class=\"na\">delegate<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">],<\/span>\n      <span class=\"c1\">\/\/ Supported locales for the application<\/span>\n      <span class=\"nl\">supportedLocales:<\/span> <span class=\"n\">S<\/span><span class=\"o\">.<\/span><span class=\"na\">delegate<\/span><span class=\"o\">.<\/span><span class=\"na\">supportedLocales<\/span><span class=\"p\">,<\/span>\n      <span class=\"c1\">\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/span>\n      <span class=\"c1\">\/\/ Title of the application<\/span>\n      <span class=\"nl\">title:<\/span> <span class=\"s\">'Where is Kaaba.?'<\/span><span class=\"p\">,<\/span>\n      <span class=\"c1\">\/\/ Light theme configuration<\/span>\n      <span class=\"nl\">theme:<\/span> <span class=\"n\">lightCustomMaterialTheme<\/span><span class=\"o\">.<\/span><span class=\"na\">light<\/span><span class=\"p\">(),<\/span>\n      <span class=\"c1\">\/\/ Dark theme configuration<\/span>\n      <span class=\"nl\">darkTheme:<\/span> <span class=\"n\">darkCustomMaterialTheme<\/span><span class=\"o\">.<\/span><span class=\"na\">dark<\/span><span class=\"p\">(),<\/span>\n      <span class=\"c1\">\/\/ Home widget of the application<\/span>\n      <span class=\"nl\">home:<\/span> <span class=\"n\">Semantics<\/span><span class=\"p\">(<\/span>\n        <span class=\"nl\">label:<\/span> <span class=\"s\">'Main Screen with navigation tabs'<\/span><span class=\"p\">,<\/span>\n        <span class=\"nl\">child:<\/span> <span class=\"n\">Center<\/span><span class=\"p\">(<\/span>\n          <span class=\"nl\">child:<\/span> <span class=\"n\">ElevatedButton<\/span><span class=\"p\">(<\/span>\n            <span class=\"nl\">onPressed:<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n             <span class=\"c1\">\/\/ \uac15\uc81c\ub85c \uc608\uc678\ub97c \ubc1c\uc0dd\uc2dc\ucf1c Crashlytics \ub85c\uadf8\ub97c \ud14c\uc2a4\ud2b8\ud569\ub2c8\ub2e4.<\/span>\n              <span class=\"k\">throw<\/span> <span class=\"n\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\ud14c\uc2a4\ud2b8 \uc608\uc678\"<\/span><span class=\"p\">);<\/span>\n            <span class=\"p\">},<\/span>\n            <span class=\"nl\">child:<\/span> <span class=\"kd\">const<\/span> <span class=\"n\">Text<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\ud06c\ub798\uc2dc \ubc1c\uc0dd\"<\/span><span class=\"p\">),<\/span>\n          <span class=\"p\">),<\/span>\n        <span class=\"p\">),<\/span>\n      <span class=\"p\">),<\/span>\n    <span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0631\u0627\u0628\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 Firebase \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Flutter \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645. 0. \u0633\u0641\u0627\u0631\u0634 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 Firebase \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Firebase \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f: \u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 Firebase\u060c \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f. \u062b\u0628\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646: \u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 Firebase\u060c &hellip;<\/p>\n","protected":false},"author":2,"featured_media":71991,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-71990","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/71990","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=71990"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/71990\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/71991"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=71990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=71990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=71990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}